blob: 7cc7df5106db67ce49c3633eb4b32e57b9d8cd38 [file] [log] [blame]
Jonathan Rudenberg7db7d5b2018-01-13 19:51:07 -05001#!/bin/bash
2# SPDX-License-Identifier: LGPL-2.1+
3#
4# Copyright 2017 Jonathan Rudenberg
Jonathan Rudenberg7db7d5b2018-01-13 19:51:07 -05005
6set -ex
7
8export LC_CTYPE=C.UTF-8
9
Zbigniew Jędrzejewski-Szmek36cd9912018-03-12 15:59:10 +010010export CC=${CC:-clang}
11export CXX=${CXX:-clang++}
12clang_version="$($CC --version | sed -nr 's/.*version ([^ ]+?) .*/\1/p' | sed -r 's/-$//')"
13
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -050014SANITIZER=${SANITIZER:-address -fsanitize-address-use-after-scope}
15flags="-O1 -fno-omit-frame-pointer -gline-tables-only -DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION -fsanitize=$SANITIZER -fsanitize-coverage=trace-pc-guard,trace-cmp"
16
Zbigniew Jędrzejewski-Szmek36cd9912018-03-12 15:59:10 +010017clang_lib="/usr/lib64/clang/${clang_version}/lib/linux"
18[ -d "$clang_lib" ] || clang_lib="/usr/lib/clang/${clang_version}/lib/linux"
19
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -050020export CFLAGS=${CFLAGS:-$flags}
21export CXXFLAGS=${CXXFLAGS:-$flags}
Zbigniew Jędrzejewski-Szmek36cd9912018-03-12 15:59:10 +010022export LDFLAGS=${LDFLAGS:--L${clang_lib}}
23
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -050024export WORK=${WORK:-$(pwd)}
25export OUT=${OUT:-$(pwd)/out}
26mkdir -p $OUT
27
Jonathan Rudenberg7d941c02018-01-16 08:36:56 -050028build=$WORK/build
29rm -rf $build
30mkdir -p $build
31
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -050032fuzzflag="oss-fuzz=true"
33if [ -z "$FUZZING_ENGINE" ]; then
34 fuzzflag="llvm-fuzz=true"
35fi
36
37meson $build -D$fuzzflag -Db_lundef=false
Jonathan Rudenberg7d941c02018-01-16 08:36:56 -050038ninja -C $build fuzzers
Jonathan Rudenberg7db7d5b2018-01-13 19:51:07 -050039
Jonathan Rudenberg2bd37c52018-01-19 19:44:56 -050040for d in "$(dirname "$0")/../test/fuzz-corpus/"*; do
41 zip -jqr $OUT/fuzz-$(basename "$d")_seed_corpus.zip "$d"
42done
43
44# get fuzz-dns-packet corpus
Jonathan Rudenberg7d941c02018-01-16 08:36:56 -050045df=$build/dns-fuzzing
Jonathan Rudenberg7db7d5b2018-01-13 19:51:07 -050046git clone --depth 1 https://github.com/CZ-NIC/dns-fuzzing $df
47zip -jqr $OUT/fuzz-dns-packet_seed_corpus.zip $df/packet
48
Zbigniew Jędrzejewski-Szmek3c31f3a2018-05-08 17:00:19 +020049# install the private shared library without executable permissions
50install -Dt $OUT/src/shared/ -m 0644 $build/src/shared/libsystemd-shared-*.so
Jonathan Rudenberg7db7d5b2018-01-13 19:51:07 -050051
Jonathan Rudenberg7d941c02018-01-16 08:36:56 -050052find $build -maxdepth 1 -type f -executable -name "fuzz-*" -exec mv {} $OUT \;
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -050053cp src/fuzz/*.options $OUT