Created
September 14, 2021 07:51
-
-
Save TheCrott/3135417865187f634620aef1cad85b98 to your computer and use it in GitHub Desktop.
script to install symcc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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