#!/bin/bash -eu # Copyright 2019 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. # ################################################################################ # Mostly copied from # https://github.com/google/oss-fuzz/blob/7f8013db108e62727fba1c3cbcccac07d543682b/projects/grpc/build.sh # Copy $CFLAGS and $CXXFLAGS into Bazel command-line flags, for both # compilation and linking. # # Some flags, such as `-stdlib=libc++`, generate warnings if used on a C source # file. Since the build runs with `-Werror` this will cause it to break, so we # use `--conlyopt` and `--cxxopt` instead of `--copt`. readonly EXTRA_BAZEL_FLAGS="$( for f in ${CFLAGS}; do echo "--conlyopt=${f}" "--linkopt=${f}" done for f in ${CXXFLAGS}; do echo "--cxxopt=${f}" "--linkopt=${f}" done if [ "${SANITIZER}" = "undefined" ] then # Bazel uses clang to link binary, which does not link clang_rt ubsan library for C++ automatically. # See issue: https://github.com/bazelbuild/bazel/issues/8777 echo "--linkopt=$(find $(llvm-config --libdir) -name libclang_rt.ubsan_standalone_cxx-x86_64.a | head -1)" fi )" # Temporary hack, see https://github.com/google/oss-fuzz/issues/383 readonly NO_VPTR='--copt=-fno-sanitize=vptr --linkopt=-fno-sanitize=vptr' readonly FUZZER_TARGETS=() readonly ENABLED=false if [ "$ENABLED" = true ]; then bazel build \ --client_env=CC=${CC} \ --client_env=CXX=${CXX} \ --dynamic_mode=off \ --spawn_strategy=standalone \ --genrule_strategy=standalone \ ${NO_VPTR} \ --strip=never \ --linkopt=-lc++ \ --linkopt=-pthread \ --cxxopt=-std=c++11 \ --copt=${LIB_FUZZING_ENGINE} \ --linkopt=${LIB_FUZZING_ENGINE} \ --remote_cache=https://storage.googleapis.com/oak-bazel-cache \ --remote_upload_local_results=false \ ${EXTRA_BAZEL_FLAGS} \ ${FUZZER_TARGETS[@]} for target in ${FUZZER_TARGETS}; do # Replace : with /. fuzzer_name="${target/:/\/}" cp "./bazel-bin/${fuzzer_name}" "${OUT}/" done # Cleanup bazel- symlinks to avoid oss-fuzz trying to copy out of the build # cache. rm -f ./bazel-* fi