blob: a90185fd6b8b298e7b5ce5f1be361834d840ad42 [file] [log] [blame]
#!/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