#!/bin/bash -eu
# Copyright 2020 Google Inc.
#
# 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
#
#      http://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.
#
################################################################################

#builds project
export PATH="$HOME/.local/bin:$PATH"
$SRC/orbit/bootstrap-orbit.sh --force-public-remotes --dont-compile --ignore-system-requirements

conan profile new default --detect
conan profile update settings.compiler.libcxx=libc++ default
conan profile update settings.compiler.fpo=False default
conan profile update settings.compiler.address_sanitizer=True default
conan profile update settings.compiler.fuzzer_sanitizer=True default

sed -i 's/\[settings\]/include(libfuzzer_base)\n\n[settings]/' ~/.conan/profiles/default
echo "CFLAGS=\$BASE_CFLAGS" >> ~/.conan/profiles/default
echo "CXXFLAGS=\$BASE_CXXFLAGS" >> ~/.conan/profiles/default
echo "LDFLAGS=\$BASE_LDFLAGS" >> ~/.conan/profiles/default
echo "OrbitProfiler:CFLAGS=\$BASE_CFLAGS $CFLAGS" >> ~/.conan/profiles/default
echo "OrbitProfiler:CXXFLAGS=\$BASE_CFLAGS $CXXFLAGS" >> ~/.conan/profiles/default

# The following two lines is what should theoretically be correct. The workaround + explanation follows
# echo "llvm:CFLAGS=\$BASE_CFLAGS $CFLAGS" >> ~/.conan/profiles/default
# echo "llvm:CXXFLAGS=\$BASE_CXXFLAGS $CXXFLAGS" >> ~/.conan/profiles/default

# The $CFLAGS and $CXXFLAGS contains "-fsanitize=address -fsanitize-address-use-after-scope -fsanitize=fuzzer-no-link"
# when this script is called. Since llvm currently cannot be build with address sanitizers, 
# the flags are set manually here.
echo "llvm:CFLAGS=\$BASE_CFLAGS -O1 -fno-omit-frame-pointer -gline-tables-only -DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION" >> ~/.conan/profiles/default
echo "llvm:CXXFLAGS=\$BASE_CXXFLAGS -O1 -fno-omit-frame-pointer -gline-tables-only -DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION -stdlib=libc++" >> ~/.conan/profiles/default

$SRC/orbit/build.sh default

function copy_fuzzer {
  mkdir -p "$OUT/lib"
  cp -v "$1" "$OUT/"
  patchelf --set-rpath '$ORIGIN/lib' "$OUT/$(basename "$1")"

  ldd "$1" | grep '=>' | cut -d ' ' -f 3 | while read lib; do
    if [[ -f $lib ]]; then
      cp -v "$lib" "$OUT/lib/"
      patchelf --set-rpath '$ORIGIN' "$OUT/lib/$(basename "$lib")"
    fi
  done
}

find $SRC/orbit/build_default/bin -name \*Fuzzer | while read fuzzer; do
  copy_fuzzer "$fuzzer"
done
