1#!/bin/bash -eu
2#
3# Copyright 2016 Google Inc.
4#
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8#
9#      http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16#
17################################################################################
18
19if [ "$SANITIZER" = undefined ]; then
20    export CFLAGS="$CFLAGS -fsanitize=unsigned-integer-overflow -fno-sanitize-recover=unsigned-integer-overflow"
21    export CXXFLAGS="$CXXFLAGS -fsanitize=unsigned-integer-overflow -fno-sanitize-recover=unsigned-integer-overflow"
22fi
23
24export V=1
25
26./autogen.sh \
27    --disable-shared \
28    --without-debug \
29    --without-ftp \
30    --without-http \
31    --without-legacy \
32    --without-python
33make -j$(nproc)
34
35cd fuzz
36make clean-corpus
37make fuzz.o
38
39for fuzzer in html regexp schema uri xml xpath; do
40    make $fuzzer.o
41    # Link with $CXX
42    $CXX $CXXFLAGS \
43        $fuzzer.o fuzz.o \
44        -o $OUT/$fuzzer \
45        $LIB_FUZZING_ENGINE \
46        ../.libs/libxml2.a -Wl,-Bstatic -lz -llzma -Wl,-Bdynamic
47
48    [ -e seed/$fuzzer ] || make seed/$fuzzer.stamp
49    zip -j $OUT/${fuzzer}_seed_corpus.zip seed/$fuzzer/*
50done
51
52cp *.dict *.options $OUT/
53