1*5c90c05cSAndroid Build Coastguard Worker#!/bin/sh 2*5c90c05cSAndroid Build Coastguard Worker# 3*5c90c05cSAndroid Build Coastguard Worker# Creates fuzzer builds of various kinds 4*5c90c05cSAndroid Build Coastguard Worker# - oss-fuzz emulated mode (makes sure a simulated invocation by oss-fuzz works) 5*5c90c05cSAndroid Build Coastguard Worker# - libFuzzer build (you will need clang) 6*5c90c05cSAndroid Build Coastguard Worker# - afl build (you will need afl) 7*5c90c05cSAndroid Build Coastguard Worker# 8*5c90c05cSAndroid Build Coastguard Worker# 9*5c90c05cSAndroid Build Coastguard Worker# Copyright (c) 2019 Paul Dreik 10*5c90c05cSAndroid Build Coastguard Worker# 11*5c90c05cSAndroid Build Coastguard Worker# For the license information refer to format.h. 12*5c90c05cSAndroid Build Coastguard Worker 13*5c90c05cSAndroid Build Coastguard Workerset -e 14*5c90c05cSAndroid Build Coastguard Workerme=$(basename $0) 15*5c90c05cSAndroid Build Coastguard Workerroot=$(readlink -f "$(dirname "$0")/../..") 16*5c90c05cSAndroid Build Coastguard Worker 17*5c90c05cSAndroid Build Coastguard Worker 18*5c90c05cSAndroid Build Coastguard Workerecho $me: root=$root 19*5c90c05cSAndroid Build Coastguard Worker 20*5c90c05cSAndroid Build Coastguard Workerhere=$(pwd) 21*5c90c05cSAndroid Build Coastguard Worker 22*5c90c05cSAndroid Build Coastguard WorkerCXXFLAGSALL="-DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION= -g" 23*5c90c05cSAndroid Build Coastguard WorkerCMAKEFLAGSALL="$root -GNinja -DCMAKE_BUILD_TYPE=Debug -DFMT_DOC=Off -DFMT_TEST=Off -DFMT_FUZZ=On -DCMAKE_CXX_STANDARD=17" 24*5c90c05cSAndroid Build Coastguard Worker 25*5c90c05cSAndroid Build Coastguard WorkerCLANG=clang++-11 26*5c90c05cSAndroid Build Coastguard Worker 27*5c90c05cSAndroid Build Coastguard Worker# For performance analysis of the fuzzers. 28*5c90c05cSAndroid Build Coastguard Workerbuilddir=$here/build-fuzzers-perfanalysis 29*5c90c05cSAndroid Build Coastguard Workermkdir -p $builddir 30*5c90c05cSAndroid Build Coastguard Workercd $builddir 31*5c90c05cSAndroid Build Coastguard WorkerCXX="ccache g++" CXXFLAGS="$CXXFLAGSALL -g" cmake \ 32*5c90c05cSAndroid Build Coastguard Worker$CMAKEFLAGSALL \ 33*5c90c05cSAndroid Build Coastguard Worker-DFMT_FUZZ_LINKMAIN=On \ 34*5c90c05cSAndroid Build Coastguard Worker-DCMAKE_BUILD_TYPE=Release 35*5c90c05cSAndroid Build Coastguard Worker 36*5c90c05cSAndroid Build Coastguard Workercmake --build $builddir 37*5c90c05cSAndroid Build Coastguard Worker 38*5c90c05cSAndroid Build Coastguard Worker# Builds the fuzzers as oss-fuzz does. 39*5c90c05cSAndroid Build Coastguard Workerbuilddir=$here/build-fuzzers-ossfuzz 40*5c90c05cSAndroid Build Coastguard Workermkdir -p $builddir 41*5c90c05cSAndroid Build Coastguard Workercd $builddir 42*5c90c05cSAndroid Build Coastguard WorkerCXX=$CLANG \ 43*5c90c05cSAndroid Build Coastguard WorkerCXXFLAGS="$CXXFLAGSALL -fsanitize=fuzzer-no-link" cmake \ 44*5c90c05cSAndroid Build Coastguard Workercmake $CMAKEFLAGSALL \ 45*5c90c05cSAndroid Build Coastguard Worker-DFMT_FUZZ_LINKMAIN=Off \ 46*5c90c05cSAndroid Build Coastguard Worker-DFMT_FUZZ_LDFLAGS="-fsanitize=fuzzer" 47*5c90c05cSAndroid Build Coastguard Worker 48*5c90c05cSAndroid Build Coastguard Workercmake --build $builddir 49*5c90c05cSAndroid Build Coastguard Worker 50*5c90c05cSAndroid Build Coastguard Worker 51*5c90c05cSAndroid Build Coastguard Worker# Builds fuzzers for local fuzzing with libfuzzer with asan+usan. 52*5c90c05cSAndroid Build Coastguard Workerbuilddir=$here/build-fuzzers-libfuzzer 53*5c90c05cSAndroid Build Coastguard Workermkdir -p $builddir 54*5c90c05cSAndroid Build Coastguard Workercd $builddir 55*5c90c05cSAndroid Build Coastguard WorkerCXX=$CLANG \ 56*5c90c05cSAndroid Build Coastguard WorkerCXXFLAGS="$CXXFLAGSALL -fsanitize=fuzzer-no-link,address,undefined" cmake \ 57*5c90c05cSAndroid Build Coastguard Workercmake $CMAKEFLAGSALL \ 58*5c90c05cSAndroid Build Coastguard Worker-DFMT_FUZZ_LINKMAIN=Off \ 59*5c90c05cSAndroid Build Coastguard Worker-DFMT_FUZZ_LDFLAGS="-fsanitize=fuzzer" 60*5c90c05cSAndroid Build Coastguard Worker 61*5c90c05cSAndroid Build Coastguard Workercmake --build $builddir 62*5c90c05cSAndroid Build Coastguard Worker 63*5c90c05cSAndroid Build Coastguard Worker# Builds a fast fuzzer for making coverage fast. 64*5c90c05cSAndroid Build Coastguard Workerbuilddir=$here/build-fuzzers-fast 65*5c90c05cSAndroid Build Coastguard Workermkdir -p $builddir 66*5c90c05cSAndroid Build Coastguard Workercd $builddir 67*5c90c05cSAndroid Build Coastguard WorkerCXX=$CLANG \ 68*5c90c05cSAndroid Build Coastguard WorkerCXXFLAGS="$CXXFLAGSALL -fsanitize=fuzzer-no-link -O3" cmake \ 69*5c90c05cSAndroid Build Coastguard Workercmake $CMAKEFLAGSALL \ 70*5c90c05cSAndroid Build Coastguard Worker-DFMT_FUZZ_LINKMAIN=Off \ 71*5c90c05cSAndroid Build Coastguard Worker-DFMT_FUZZ_LDFLAGS="-fsanitize=fuzzer" \ 72*5c90c05cSAndroid Build Coastguard Worker -DCMAKE_BUILD_TYPE=Release 73*5c90c05cSAndroid Build Coastguard Worker 74*5c90c05cSAndroid Build Coastguard Workercmake --build $builddir 75*5c90c05cSAndroid Build Coastguard Worker 76*5c90c05cSAndroid Build Coastguard Worker 77*5c90c05cSAndroid Build Coastguard Worker# Builds fuzzers for local fuzzing with afl. 78*5c90c05cSAndroid Build Coastguard Workerbuilddir=$here/build-fuzzers-afl 79*5c90c05cSAndroid Build Coastguard Workermkdir -p $builddir 80*5c90c05cSAndroid Build Coastguard Workercd $builddir 81*5c90c05cSAndroid Build Coastguard WorkerCXX="afl-g++" \ 82*5c90c05cSAndroid Build Coastguard WorkerCXXFLAGS="$CXXFLAGSALL -fsanitize=address,undefined" \ 83*5c90c05cSAndroid Build Coastguard Workercmake $CMAKEFLAGSALL \ 84*5c90c05cSAndroid Build Coastguard Worker-DFMT_FUZZ_LINKMAIN=On 85*5c90c05cSAndroid Build Coastguard Worker 86*5c90c05cSAndroid Build Coastguard Workercmake --build $builddir 87*5c90c05cSAndroid Build Coastguard Worker 88*5c90c05cSAndroid Build Coastguard Worker 89*5c90c05cSAndroid Build Coastguard Workerecho $me: all good 90*5c90c05cSAndroid Build Coastguard Worker 91