| #!/bin/bash -eu |
| # Copyright 2018 Google Inc. |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| # |
| ################################################################################ |
| PREFIX=$WORK/prefix |
| mkdir -p $PREFIX |
| |
| export PKG_CONFIG="`which pkg-config` --static" |
| export PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig |
| export PATH=$PREFIX/bin:$PATH |
| |
| BUILD=$WORK/build |
| |
| rm -rf $WORK/* |
| rm -rf $BUILD |
| mkdir -p $BUILD |
| |
| # Build glib |
| pushd $SRC/glib-2.64.2 |
| meson \ |
| --prefix=$PREFIX \ |
| --libdir=lib \ |
| --default-library=static \ |
| -Db_lundef=false \ |
| -Doss_fuzz=enabled \ |
| -Dlibmount=disabled \ |
| -Dinternal_pcre=true \ |
| _builddir |
| ninja -C _builddir |
| ninja -C _builddir install |
| popd |
| |
| # Build gdk-pixbuf |
| pushd $SRC/gdk-pixbuf |
| meson \ |
| --prefix=$PREFIX \ |
| --libdir=lib \ |
| --default-library=static \ |
| -Dintrospection=disabled \ |
| -Dbuiltin_loaders='all' \ |
| _builddir |
| ninja -C _builddir |
| ninja -C _builddir install |
| popd |
| |
| mv $SRC/{*.zip,*.dict} $OUT |
| |
| if [ ! -f "${OUT}/gdk-pixbuf_seed_corpus.zip" ]; then |
| echo "missing seed corpus" |
| exit 1 |
| fi |
| |
| if [ ! -f "${OUT}/gdk-pixbuf.dict" ]; then |
| echo "missing dictionary" |
| exit 1 |
| fi |
| |
| PREDEPS_LDFLAGS="-Wl,-Bdynamic -ldl -lm -lc -pthread -lrt -lpthread" |
| DEPS="gmodule-2.0 glib-2.0 gio-2.0 gobject-2.0 gdk-pixbuf-2.0" |
| BUILD_CFLAGS="$CFLAGS `pkg-config --static --cflags $DEPS`" |
| BUILD_LDFLAGS="-Wl,-static `pkg-config --static --libs $DEPS`" |
| |
| fuzzers=$(find $SRC/fuzz/ -name "*_fuzzer.c") |
| for f in $fuzzers; do |
| fuzzer_name=$(basename $f .c) |
| $CC $CFLAGS $BUILD_CFLAGS -c $f -o $WORK/${fuzzer_name}.o |
| $CXX $CXXFLAGS \ |
| $WORK/${fuzzer_name}.o -o $OUT/${fuzzer_name} \ |
| $PREDEPS_LDFLAGS \ |
| $BUILD_LDFLAGS \ |
| $LIB_FUZZING_ENGINE \ |
| -Wl,-Bdynamic |
| ln -sf $OUT/gdk-pixbuf_seed_corpus.zip $OUT/${fuzzer_name}_seed_corpus.zip |
| ln -sf $OUT/gdk-pixbuf.dict $OUT/${fuzzer_name}.dict |
| done |