mirror of https://github.com/google/oss-fuzz.git
84 lines
2.7 KiB
Bash
84 lines
2.7 KiB
Bash
#!/bin/bash
|
|
|
|
# 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.
|
|
#
|
|
################################################################################
|
|
|
|
# If you ran this script as root against a local checkout, you may need to do
|
|
# the following to restore the Pigweed build environment before continuing
|
|
# development:
|
|
# $ cd $PW_ROOT
|
|
# $ sudo rm -rf .cipd/ .python3-env/ out/
|
|
# $ git reset --hard
|
|
# $ source ./bootstrap.sh
|
|
|
|
PW_ROOT="$SRC/pigweed"
|
|
BUILDROOT="$PW_ROOT/out/oss-fuzz"
|
|
mkdir -p $BUILDROOT
|
|
|
|
# Tweak the ensure file to skip downloading a bunch of build environment pieces
|
|
# that we won't use and/or that OSS-Fuzz wants to provide itself.
|
|
python $SRC/filter_cipd.py \
|
|
--root "$PW_ROOT" \
|
|
--json "$PW_ROOT/pw_env_setup/py/pw_env_setup/cipd_setup/pigweed.json" \
|
|
--excludes \
|
|
infra/cmake \
|
|
fuchsia/third_party/bazel \
|
|
pigweed/third_party/bloaty-embedded \
|
|
fuchsia/third_party/clang \
|
|
infra/go \
|
|
pigweed/third_party/protoc-gen-go \
|
|
pigweed/third_party/openocd \
|
|
fuchsia/rust \
|
|
pigweed/third_party/mingw64-x86_64-win32-seh \
|
|
pigweed/host_tools \
|
|
infra/goma/client \
|
|
fuchsia/third_party/qemu \
|
|
pigweed/third_party/kythe
|
|
|
|
# Pigweed checks that it can find these as part of a "sanity check".
|
|
mkdir -p "$PW_ROOT/.environment/cipd/pigweed/bin"
|
|
for b in arm-none-eabi-gcc bazel bloaty ; do
|
|
x="$PW_ROOT/.environment/cipd/pigweed/bin/$b"
|
|
if [[ ! -x $x ]] ; then
|
|
ln -s "$(which false)" "$x"
|
|
fi
|
|
done
|
|
|
|
# Setup the Pigweed build environemnt
|
|
set +u
|
|
PW_ENVSETUP_QUIET=1 source "$PW_ROOT/bootstrap.sh"
|
|
set -u
|
|
|
|
# -stdlib=libc++ conflicts with the -nostdinc++ used on pw_minimal_cpp_stdlib.
|
|
EXTRA_CXXFLAGS="-Wno-unused-command-line-argument"
|
|
|
|
# Disable UBSan vptr since target built with -fno-rtti.
|
|
EXTRA_CXXFLAGS+=" -fno-sanitize=vptr"
|
|
EXTRA_CXXFLAGS+=" -fcoverage-compilation-dir=$PW_ROOT"
|
|
|
|
# Build!
|
|
CXXFLAGS="$CXXFLAGS $EXTRA_CXXFLAGS" LDFLAGS="$CXXFLAGS" \
|
|
gn gen "$BUILDROOT" \
|
|
--root="$PW_ROOT" \
|
|
--args="pw_toolchain_OSS_FUZZ_ENABLED=true
|
|
pw_toolchain_SANITIZERS=[\"$SANITIZER\"]"
|
|
ninja -C "$BUILDROOT" fuzzers
|
|
|
|
# Use build-generated metadata to identify available fuzzers
|
|
python "$SRC/extract_pw_fuzzers.py" --buildroot "$BUILDROOT" --out "$OUT/"
|
|
|
|
|