1#!/bin/bash -eu 2# Copyright 2019 Google Inc. 3# 4# Licensed under the Apache License, Version 2.0 (the "License"); 5# you may not use this file except in compliance with the License. 6# You may obtain a copy of the License at 7# 8# http://www.apache.org/licenses/LICENSE-2.0 9# 10# Unless required by applicable law or agreed to in writing, software 11# distributed under the License is distributed on an "AS IS" BASIS, 12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13# See the License for the specific language governing permissions and 14# limitations under the License. 15# 16################################################################################ 17 18# Mostly copied from 19# https://github.com/google/oss-fuzz/blob/7f8013db108e62727fba1c3cbcccac07d543682b/projects/grpc/build.sh 20 21# Copy $CFLAGS and $CXXFLAGS into Bazel command-line flags, for both 22# compilation and linking. 23# 24# Some flags, such as `-stdlib=libc++`, generate warnings if used on a C source 25# file. Since the build runs with `-Werror` this will cause it to break, so we 26# use `--conlyopt` and `--cxxopt` instead of `--copt`. 27readonly EXTRA_BAZEL_FLAGS="$( 28for f in ${CFLAGS}; do 29 echo "--conlyopt=${f}" "--linkopt=${f}" 30done 31for f in ${CXXFLAGS}; do 32 echo "--cxxopt=${f}" "--linkopt=${f}" 33done 34if [ "${SANITIZER}" = "undefined" ] 35then 36 # Bazel uses clang to link binary, which does not link clang_rt ubsan library for C++ automatically. 37 # See issue: https://github.com/bazelbuild/bazel/issues/8777 38 echo "--linkopt=$(find $(llvm-config --libdir) -name libclang_rt.ubsan_standalone_cxx-x86_64.a | head -1)" 39fi 40)" 41 42# Temporary hack, see https://github.com/google/oss-fuzz/issues/383 43readonly NO_VPTR='--copt=-fno-sanitize=vptr --linkopt=-fno-sanitize=vptr' 44 45readonly FUZZER_TARGETS=( 46 'oak/server:wasm_node_fuzz' 47) 48 49bazel build \ 50 --client_env=CC=${CC} \ 51 --client_env=CXX=${CXX} \ 52 --dynamic_mode=off \ 53 --spawn_strategy=standalone \ 54 --genrule_strategy=standalone \ 55 ${NO_VPTR} \ 56 --strip=never \ 57 --linkopt=-lc++ \ 58 --linkopt=-pthread \ 59 --cxxopt=-std=c++11 \ 60 --copt=${LIB_FUZZING_ENGINE} \ 61 --linkopt=${LIB_FUZZING_ENGINE} \ 62 --remote_cache=https://storage.googleapis.com/oak-bazel-cache \ 63 --remote_upload_local_results=false \ 64 ${EXTRA_BAZEL_FLAGS} \ 65 ${FUZZER_TARGETS[@]} 66 67for target in ${FUZZER_TARGETS}; do 68 # Replace : with /. 69 fuzzer_name="${target/:/\/}" 70 cp "./bazel-bin/${fuzzer_name}" "${OUT}/" 71done 72 73# Cleanup bazel- symlinks to avoid oss-fuzz trying to copy out of the build 74# cache. 75rm -f ./bazel-* 76