128 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Bash
		
	
	
	
			
		
		
	
	
			128 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Bash
		
	
	
	
| #!/bin/bash -eu
 | |
| # Copyright 2021 Google LLC
 | |
| #
 | |
| # 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.
 | |
| #
 | |
| ################################################################################
 | |
| 
 | |
| # Place to keep dependencies for static linking
 | |
| DEPS=/deps
 | |
| mkdir ${DEPS}
 | |
| 
 | |
| 
 | |
| # Build libffi
 | |
| cd $SRC
 | |
| tar xvfz libffi-3.2.1.tar.gz
 | |
| cd libffi-3.2.1
 | |
| ./configure --disable-shared
 | |
| make -j$(nproc)
 | |
| export LIBFFI_LIBS="-L/src/libffi-3.2.1 libraries/ -lffi"
 | |
| cp ./x86_64-unknown-linux-gnu/.libs/libffi.a ${DEPS}/
 | |
| 
 | |
| 
 | |
| # Build libxml2
 | |
| cd $SRC/libxml2
 | |
| ./autogen.sh \
 | |
|     --disable-shared \
 | |
|     --without-debug \
 | |
|     --without-ftp \
 | |
|     --without-http \
 | |
|     --without-legacy \
 | |
|     --without-python
 | |
| make -j$(nproc)
 | |
| make install
 | |
| cp .libs/libxml2.a ${DEPS}/
 | |
| 
 | |
| 
 | |
| # Build glib
 | |
| cd $SRC/glib
 | |
| GLIB_BUILD=$WORK/meson
 | |
| rm -rf $GLIB_BUILD
 | |
| mkdir $GLIB_BUILD
 | |
| meson $GLIB_BUILD \
 | |
|   -Db_lundef=false \
 | |
|   -Ddefault_library=static \
 | |
|   -Dlibmount=disabled
 | |
| ninja -C $GLIB_BUILD
 | |
| ninja -C $GLIB_BUILD install
 | |
| 
 | |
| cp ${GLIB_BUILD}/gobject/libgobject-2.0.a ${DEPS}/
 | |
| cp ${GLIB_BUILD}/gmodule/libgmodule-2.0.a ${DEPS}/
 | |
| cp ${GLIB_BUILD}/glib/libglib-2.0.a ${DEPS}/
 | |
| 
 | |
| 
 | |
| # Build Pidgin
 | |
| cd $SRC 
 | |
| tar -xf pidgin-2.14.5.tar.bz2
 | |
| mv pidgin-2.14.5 pidgin
 | |
| cd pidgin
 | |
| ./configure --disable-consoleui \
 | |
|             --disable-shared \
 | |
|             --disable-screensaver \
 | |
|             --disable-sm \
 | |
|             --disable-gtkspell \
 | |
|             --disable-gevolution \
 | |
|             --enable-gnutls=no \
 | |
|             --disable-gstreamer \
 | |
|             --disable-vv \
 | |
|             --disable-idn \
 | |
|             --disable-meanwhile \
 | |
|             --disable-avahi \
 | |
|             --disable-dbus \
 | |
|             --disable-perl \
 | |
|             --disable-tcl \
 | |
|             --disable-cyrus-sasl \
 | |
|             --disable-gtkui \
 | |
|             --enable-nss=no
 | |
| make -j$(nproc)
 | |
| 
 | |
| 
 | |
| # Build fuzzers
 | |
| readonly FUZZERS=( \
 | |
|   pidgin_xml_fuzzer
 | |
|   pidgin_utils_fuzzer
 | |
| )
 | |
| 
 | |
| cd libpurple
 | |
| cp $SRC/*fuzzer.c .
 | |
| 
 | |
| for fuzzer in "${FUZZERS[@]}"; do
 | |
|   $CC $CFLAGS -DHAVE_CONFIG_H \
 | |
|     -I. \
 | |
|     -I.. \
 | |
|     -I${SRC}/glib \
 | |
|     -I${SRC}/glib/glib \
 | |
|     -I${SRC}/glib/gmodule \
 | |
|     -I${GLIB_BUILD} \
 | |
|     -I${GLIB_BUILD}/glib \
 | |
|     -I/usr/lib/x86_64-linux-gnu/glib-2.0/include \
 | |
|     -I/src/pidgin/libpurple/protocols/jabber \
 | |
|     -I/usr/local/include/libxml2 \
 | |
|     -c $fuzzer.c \
 | |
|     -o $fuzzer.o
 | |
| 
 | |
|   $CC $CXXFLAGS $LIB_FUZZING_ENGINE $fuzzer.o \
 | |
|     -o $OUT/$fuzzer \
 | |
|     /src/pidgin/libpurple/protocols/jabber/.libs/libjabber.a \
 | |
|     ./.libs/libpurple.a \
 | |
|     ${DEPS}/libxml2.a \
 | |
|     ${DEPS}/libgobject-2.0.a \
 | |
|     ${DEPS}/libgmodule-2.0.a \
 | |
|     ${DEPS}/libglib-2.0.a \
 | |
|     ${DEPS}/libffi.a \
 | |
|     -lresolv -lz -llzma
 | |
| done
 | |
| 
 | |
| zip $OUT/pidgin_xml_fuzzer_seed_corpus.zip $SRC/go-fuzz-corpus/xml/corpus/*
 | |
| cp $SRC/fuzzing/dictionaries/xml.dict $OUT/pidgin_xml_fuzzer.dict
 |