| #!/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" |
| |
| # 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/" |
| |
| |