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