Skip to content

Instantly share code, notes, and snippets.

@TheCrott
Created September 14, 2021 07:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save TheCrott/3135417865187f634620aef1cad85b98 to your computer and use it in GitHub Desktop.
Save TheCrott/3135417865187f634620aef1cad85b98 to your computer and use it in GitHub Desktop.
script to install symcc
BASE=$PWD
install_packages_12() {
echo "[+] installing packages"
sudo apt-get install wget
wget --no-check-certificate -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
sudo add-apt-repository 'deb http://apt.llvm.org/focal/ llvm-toolchain-focal-12 main'
echo "Updated repo "
sudo apt-get update && sudo apt-get upgrade -y
sudo apt-get install -y \
python \
cargo \
cmake \
gcc-10 \
g++-10 \
git \
ninja-build \
zlib1g-dev \
clang-12 \
llvm-12-dev \
llvm-12-tools \
screen \
gdb
sudo apt-get install -y \
build-essential \
python3-dev \
python3-pip \
python3-setuptools \
automake \
flex bison \
libglib2.0-dev \
libpixman-1-dev
sudo pip3 install lit
echo "[+] done installing packages"
}
get_z3() {
# Build Z3
cd ${BASE}
git clone -b z3-4.8.7 https://github.com/Z3Prover/z3.git
mkdir z3/build
cd z3/build
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release ..
ninja
sudo ninja install
}
get_qsym() {
echo "[+] installing deps"
cd ${BASE}
cd symcc/runtime/qsym_backend
git clone https://github.com/AdaLogics/qsym
cd qsym
git checkout adalogics
}
install_symcc() {
echo "[+] installing SymCC"
# Build SymCC with the Qsym backend
cd ${BASE}
rm -rf ./symcc_build_qsym
mkdir symcc_build_qsym && cd symcc_build_qsym
cmake -G Ninja \
-DQSYM_BACKEND=ON -DZ3_TRUST_SYSTEM_VERSION=ON \
-DCMAKE_BUILD_TYPE=Release \
../symcc
ninja -j3
cd ../examples && export SYMCC_PC=1 && ${BASE}/symcc_build_qsym/symcc -c ./libfuzz-harness-proxy.c -o /libfuzzer-harness.o
cargo install --path ~/symcc/util/symcc_fuzzing_helper
}
install_libcxx() {
echo " installing libcxx"
# Download the LLVM sources already so that we don't need to get them again when
# SymCC changes
cd ${BASE}
git clone -b llvmorg-12.0.0 --depth 1 https://github.com/llvm/llvm-project.git ./llvm_source
echo "[+] finished cloning llvm-12 source"
rm -rf ./libcxx_native_install && rm -rf libcxx_native_build
mkdir ./libcxx_native_install && mkdir ./libcxx_native_build
cd ./libcxx_native_install
export SYMCC_REGULAR_LIBCXX=""
# export SYMCC_NO_SYMBOLIC_INPUT=yes
cmake ../llvm_source/llvm \
-G Ninja \
-DLLVM_ENABLE_PROJECTS="libcxx;libcxxabi" \
-DLLVM_DISTRIBUTION_COMPONENTS="cxx;cxxabi;cxx-headers" \
-DLLVM_TARGETS_TO_BUILD="X86" \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=${BASE}/libcxx_native_build \
-DCMAKE_C_COMPILER=${BASE}/symcc_build_qsym/symcc \
-DCMAKE_CXX_COMPILER=${BASE}/symcc_build_qsym/sym++ \
-DCMAKE_VERBOSE_MAKEFILE:BOOL=ON \
-DHAVE_POSIX_REGEX=1 \
-DHAVE_STEADY_CLOCK=1
ninja distribution
ninja install-distribution
echo "[+] done installing SymCC"
}
cleanup() {
echo "[+] cleaning up"
rm -rf ./libcxx_symcc_install
rm -rf ./symcc_build
rm -rf ./symcc_build_qsym
echo "[+] done cleaning up"
}
git clone https://github.com/AdaLogics/adacc symcc
cd symcc/
git checkout edda79dcb830c95ba6d303e47c698839313ef506
cd ${BASE}
export CC=clang
export CXX=clang++
export LLVM_CONFIG=llvm-config
export PATH=$PATH:/home/aldo/symcc_build_qsym/symcc
export PATH=$PATH:/home/aldo/symcc_build_qsym/sym++
export PATH=$PATH:/home/aldo/.cargo/bin
export ASAN_OPTIONS=detect_leaks=0,abort_on_error=1,symbolize=1,check_initialization_order=true,detect_stack_use_after_return=true,strict_string_checks=true,detect_invalid_pointer_pairs=2,print_scariness=1,print_summary=1
export UBSAN_OPTIONS=print_stacktrace=1:print_summary=1:halt_on_error=1
echo "[+] Cleanup"
cleanup
echo "... Done"
cd ${BASE}
echo "[+] packages"
install_packages_12
sudo ln -s /usr/bin/clang-12 /usr/bin/clang
sudo ln -s /usr/bin/clang++-12 /usr/bin/clang++
sudo ln -s /usr/bin/llvm-config-12 /usr/bin/llvm-config
sudo ln -s /usr/bin/llvm-symbolizer-12 /usr/bin/llvm-symbolizer
cd ${BASE}
echo "[+] z3"
get_z3
cd ${BASE}
echo "[+] qsym"
get_qsym
cd ${BASE}
echo "[+] symcc"
install_symcc
cd ${BASE}
echo "[+] libcxx"
install_libcxx
cd ~/
rm -f /tmp/magick*
sudo sed -i 's/# deb-src/deb-src/' /etc/apt/sources.list
sudo apt update
sudo apt-get -s build-dep imagemagick
wget https://download.imagemagick.org/ImageMagick/download/ImageMagick-7.1.0-7.tar.gz
tar -xzf ImageMagick-7.1.0-7.tar.gz
mkdir magick_symcc
cd magick_symcc
cp -r ../ImageMagick-7.1.0-7 .
cd ImageMagick-7.1.0-7/
CC=${BASE}/symcc_build_qsym/symcc CXX=${BASE}/symcc_build_qsym/sym++ ./configure --disable-shared --disable-docs --without-perl --with-tiff --with-webp --with-png --with-xml --with-freetype --with-gslib --disable-dependency-tracking
make -j$(nproc)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment