#!/bin/bash -eu
# Copyright 2018 The Wuffs Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#    https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# ----------------

# See build-all.sh for commentary.

if [ ! -e wuffs-root-directory.txt ]; then
  echo "$0 should be run from the Wuffs root directory."
  exit 1
fi

CC=${CC:-gcc}
CXX=${CXX:-g++}
LDFLAGS=${LDFLAGS:-}

# The "-fdata-sections -ffunction-sections -Wl,--gc-sections" produces smaller
# binaries. See commit 41fce8a8 "Strip examples of unused data and functions".
CFLAGS=${CFLAGS:--O3 -fdata-sections -ffunction-sections -Wl,--gc-sections}
CXXFLAGS=${CXXFLAGS:--O3 -fdata-sections -ffunction-sections -Wl,--gc-sections}

mkdir -p gen/bin

sources=$@
if [ $# -eq 0 ]; then
  sources=fuzz/c/std/*_fuzzer.c*
fi

for f in $sources; do
  f=${f%_fuzzer.c}
  f=${f%_fuzzer.cc}
  f=${f%/}
  f=${f##*/}
  if [ -z $f ]; then
    continue
  fi

  if [   -e fuzz/c/std/${f}_fuzzer.c  ]; then
    echo "Building (C)   gen/bin/fuzz-$f"
    $CC  $CFLAGS   -DWUFFS_CONFIG__FUZZLIB_MAIN fuzz/c/std/${f}_fuzzer.c  \
        $LDFLAGS -o gen/bin/fuzz-$f
  elif [ -e fuzz/c/std/${f}_fuzzer.cc ]; then
    echo "Building (C++) gen/bin/fuzz-$f"
    $CXX $CXXFLAGS -DWUFFS_CONFIG__FUZZLIB_MAIN fuzz/c/std/${f}_fuzzer.cc \
        $LDFLAGS -o gen/bin/fuzz-$f
  fi
done
