1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
|
#!/bin/bash
# Slackware build script for afl
# Written by B. Watson (yalhcru@gmail.com)
# Licensed under the WTFPL. See http://www.wtfpl.net/txt/copying/ for details.
# 20200217 bkw: BUILD=2.
# - fix afl-clang-fast
# - include README.llvm and optional README.qemu in doc dir
# - update README slightly
# 20180709 bkw: updated for v2.52b.
cd $(dirname $0) ; CWD=$(pwd)
PRGNAM=afl
VERSION=${VERSION:-2.52b}
BUILD=${BUILD:-2}
TAG=${TAG:-_SBo}
PKGTYPE=${PKGTYPE:-tgz}
if [ -z "$ARCH" ]; then
case "$( uname -m )" in
i?86) ARCH=i586 ;;
arm*) ARCH=arm ;;
*) ARCH=$( uname -m ) ;;
esac
fi
# If the variable PRINT_PACKAGE_NAME is set, then this script will report what
# the name of the created package would be, and then exit. This information
# could be useful to other scripts.
if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE"
exit 0
fi
TMP=${TMP:-/tmp/SBo}
PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp}
if [ "$ARCH" = "i586" ]; then
SLKCFLAGS="-O2 -march=i586 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "i686" ]; then
SLKCFLAGS="-O2 -march=i686 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "x86_64" ]; then
SLKCFLAGS="-O2 -fPIC"
LIBDIRSUFFIX="64"
else
SLKCFLAGS="-O2"
LIBDIRSUFFIX=""
fi
set -e
rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
rm -rf $PRGNAM-$VERSION
tar xvf $CWD/$PRGNAM-$VERSION.tgz
cd $PRGNAM-$VERSION
chown -R root:root .
find -L . -perm /111 -a \! -perm 755 -a -exec chmod 755 {} \+ -o \
\! -perm /111 -a \! -perm 644 -a -exec chmod 644 {} \+
# apply slack cflags, tell gcc to create stripped binaries
sed -i "/^CFLAGS/s|-O3.*|$SLKCFLAGS -Wl,-s|" Makefile llvm_mode/Makefile
sed -i "/^CFLAGS/s|-O3|$SLKCFLAGS|" qemu_mode/build_qemu_support.sh
PKGDOC=$PKG/usr/doc/$PRGNAM-$VERSION
make \
DESTDIR=$PKG \
PREFIX=/usr \
HELPER_PATH=/usr/lib$LIBDIRSUFFIX/$PRGNAM \
DOC_PATH=/usr/doc/$PRGNAM-$VERSION \
all \
install
# llvm fast mode looks useful, include it.
# comment this out if you're building on slack 14.1, its llvm is too old.
make -C llvm_mode \
PREFIX=/usr \
HELPER_PATH=/usr/lib$LIBDIRSUFFIX/$PRGNAM
# no 'make install' support, manual install.
install -s -m0755 -oroot -groot afl-clang-fast $PKG/usr/bin
ln -s afl-clang-fast $PKG/usr/bin/afl-clang-fast++
# 20200217 bkw: clang fast mode support libraries. Thanks to mity for
# a very detailed bug report.
CLANGLIB=$PKG/usr/lib$LIBDIRSUFFIX/$PRGNAM
install -s -m0755 -oroot -groot afl-llvm-pass.so $CLANGLIB
# no -s here, stripping this would be bad:
install -m0644 -oroot -groot afl-llvm-rt*.o $CLANGLIB
# replace identical .o files with symlinks
baseobj=$CLANGLIB/afl-llvm-rt.o
for bits in 32 64; do
bitobj=$CLANGLIB/afl-llvm-rt-$bits.o
if [ -e $bitobj ] && cmp $bitobj $baseobj; then
rm -f $bitobj
ln -s afl-llvm-rt.o $bitobj
fi
done
WITHQEMU="without"
# figure out the qemu source tarball name. N.B. update the README
# when this changes!
( egrep "^(VERSION|QEMU_URL)=" qemu_mode/build_qemu_support.sh > 1.sh
source ./1.sh
echo "$QEMU_URL" > qemu.url )
QEMU_SRC="$( basename "$( cat qemu.url )" )"
# optional qemu support, needed for fuzzing binary-only stuff,
# only built if $CWD contains the qemu source.
if [ -e "$CWD/$QEMU_SRC" ]; then
echo "=== qemu source \$CWD/$QEMU_SRC found"
cp "$CWD/$QEMU_SRC" qemu_mode
cd qemu_mode
sh build_qemu_support.sh
cp -a README.qemu $PKGDOC
cd -
install -s -m0755 -oroot -groot afl-qemu-trace $PKG/usr/bin
WITHQEMU="with"
else
echo "!!! qemu source \$CWD/$QEMU_SRC not found"
echo "!!! wget $( cat qemu.url )"
# grep for the !!! in the log to find the URL, when updating afl
fi
# 'make install' already put the docs where they belong.
# the experimental/ stuff is sample source code, include in docs.
# since llvm_mode has no 'make install', we install its doc here.
cp -a llvm_mode/README.llvm experimental $PKGDOC
cat $CWD/$PRGNAM.SlackBuild > $PKGDOC/$PRGNAM.SlackBuild
mkdir -p $PKG/install
sed "s,@WITHQEMU@,$WITHQEMU," $CWD/slack-desc > $PKG/install/slack-desc
cd $PKG
/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE
|