xref: /aosp_15_r20/external/fmtlib/test/fuzzing/build.sh (revision 5c90c05cd622c0a81b57953a4d343e0e489f2e08)
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