#!/bin/bash # Slackware build script for ddisasm # Copyright 2025, Lockywolf # All rights reserved. # # Redistribution and use of this script, with or without modification, is # permitted provided that the following conditions are met: # # 1. Redistributions of this script must retain the above copyright # notice, this list of conditions and the following disclaimer. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. cd $(dirname $0) ; CWD=$(pwd) PRGNAM=ddisasm VERSION=${VERSION:-1.8.0.20251125} BUILD=${BUILD:-1} TAG=${TAG:-_SBo} PKGTYPE=${PKGTYPE:-tgz} COMMIT=99a152e3443cf99844343f81d96045725bb67a21 GTIRB_VERSION=7d8d02eecdeb199b91aefce7f0296b38bc9314a8 PPRINTER_VERSION=8447ac93d10d459cdfecb9b6212fe59d2e9c00f7 LIEF_VERSION=0.16.7 CAPSTONE_VERSION=cd6dd7b75d126a855be1f9f76570ee5a850c6061 LIBEHP_VERSION=5e41e26b88d415f3c7d3eb47f9f0d781cc519459 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} MYTMP=$TMP/ddisasm-build rm -rf "$MYTMP" 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" elif [ "$ARCH" = "aarch64" ]; then SLKCFLAGS="-O2 -fPIC" LIBDIRSUFFIX="64" else SLKCFLAGS="-O2" LIBDIRSUFFIX="" fi set -e rm -rf $PKG mkdir -p $TMP $PKG $OUTPUT cd $TMP mkdir -p $MYTMP cd $MYTMP ( rm -rf gtirb-$GTIRB_VERSION tar xvf $CWD/gtirb-$GTIRB_VERSION.tar.gz cd gtirb-$GTIRB_VERSION chown -R root:root . find -L . \ \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ -o -perm 511 \) -exec chmod 755 {} + -o \ \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ -o -perm 440 -o -perm 400 \) -exec chmod 644 {} + sed -i '/Werror/d' CMakeLists.txt mkdir -p build cd build cmake \ -DCMAKE_C_FLAGS:STRING="$SLKCFLAGS" \ -DCMAKE_CXX_FLAGS:STRING="$SLKCFLAGS" \ -DCMAKE_INSTALL_PREFIX=/usr \ -DLIB_SUFFIX=${LIBDIRSUFFIX} \ -DMAN_INSTALL_DIR=/usr/man \ -DCMAKE_BUILD_TYPE=Release .. \ -DGTIRB_ENABLE_TESTS=OFF \ -DGTIRB_ENABLE_MYPY=OFF \ -DGTIRB_BUILD_SHARED_LIBS=OFF \ -DENABLE_CODE_COVERAGE=OFF \ -DGTIRB_RUN_CLANG_TIDY=OFF \ -DCMAKE_CXX_COMPILER=clang++ \ -DCMAKE_C_COMPILER=clang \ -DProtobuf_LIBRARIES='-lprotobuf' \ -DGTIRB_JAVA_API=OFF \ -DGTIRB_CL_API=OFF \ -DCMAKE_EXE_LINKER_FLAGS='-labsl_status -labsl_hash -labsl_log_internal_check_op -labsl_log_internal_message' make || exit 1 # make install/strip DESTDIR=$PKG ) ( rm -rf capstone-$CAPSTONE_VERSION tar xvf $CWD/capstone-$CAPSTONE_VERSION.tar.gz cd capstone-$CAPSTONE_VERSION chown -R root:root . find -L . \ \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ -o -perm 511 \) -exec chmod 755 {} + -o \ \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ -o -perm 440 -o -perm 400 \) -exec chmod 644 {} + sed -i '/Werror/d' CMakeLists.txt mkdir -p build cd build cmake \ -DCMAKE_C_FLAGS:STRING="$SLKCFLAGS" \ -DCMAKE_CXX_FLAGS:STRING="$SLKCFLAGS" \ -DCMAKE_INSTALL_PREFIX=/usr \ -DLIB_SUFFIX=${LIBDIRSUFFIX} \ -DMAN_INSTALL_DIR=/usr/man \ -DCMAKE_BUILD_TYPE=Release .. \ -DCAPSTONE_BUILD_STATIC_RUNTIME=ON \ -DCMAKE_EXE_LINKER_FLAGS='-labsl_status -labsl_hash -labsl_log_internal_check_op -labsl_log_internal_message' make || exit 1 ) ( rm -rf gtirb-pprinter-$PPRINTER_VERSION tar xvf $CWD/gtirb-pprinter-$PPRINTER_VERSION.tar.gz cd gtirb-pprinter-$PPRINTER_VERSION chown -R root:root . find -L . \ \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ -o -perm 511 \) -exec chmod 755 {} + -o \ \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ -o -perm 440 -o -perm 400 \) -exec chmod 644 {} + sed -i '/Werror/d' CMakeLists.txt sed -i '/Export.hpp/a#include ' include/gtirb_pprinter/Syntax.hpp sed -i '/add_subdirectory(test)/d' src/gtirb_pprinter/CMakeLists.txt mkdir -p build cd build cmake \ -DCMAKE_C_FLAGS:STRING="$SLKCFLAGS" \ -DCMAKE_CXX_FLAGS:STRING="$SLKCFLAGS" \ -DCMAKE_INSTALL_PREFIX=/usr \ -DLIB_SUFFIX=${LIBDIRSUFFIX} \ -DMAN_INSTALL_DIR=/usr/man \ -DCMAKE_CXX_COMPILER=clang++ \ -DCMAKE_C_COMPILER=clang \ -DCMAKE_BUILD_TYPE=Release .. \ -DGTIRB_PPRINTER_ENABLE_TESTS=OFF \ -DGTIRB_PPRINTER_BUILD_SHARED_LIBS=OFF \ -DENABLE_CODE_COVERAGE=OFF \ -DProtobuf_LIBRARIES='-lprotobuf' \ -DCMAKE_LIBRARY_PATH=$MYTMP/capstone-$CAPSTONE_VERSION/build/ \ -DCMAKE_EXE_LINKER_FLAGS='-labsl_status -labsl_hash -labsl_log_internal_check_op -labsl_log_internal_message' make || exit 1 cd .. ) ( rm -rf LIEF-$LIEF_VERSION tar xvf $CWD/LIEF-$LIEF_VERSION.tar.gz cd LIEF-$LIEF_VERSION chown -R root:root . find -L . \ \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ -o -perm 511 \) -exec chmod 755 {} + -o \ \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ -o -perm 440 -o -perm 400 \) -exec chmod 644 {} + source /etc/profile.d/cmake-opt.sh sed -i '/Werror/d' CMakeLists.txt mkdir -p build cd build cmake \ -DCMAKE_C_FLAGS:STRING="$SLKCFLAGS" \ -DCMAKE_CXX_FLAGS:STRING="$SLKCFLAGS" \ -DCMAKE_INSTALL_PREFIX="$(readlink -f ..)"/install \ -DLIB_SUFFIX=${LIBDIRSUFFIX} \ -DMAN_INSTALL_DIR=/usr/man \ -DCMAKE_CXX_COMPILER=clang++ \ -DCMAKE_C_COMPILER=clang \ -DLIEF_EXAMPLES=OFF \ -DLIEF_TESTS=OFF \ -DLIEF_PYTHON_API=OFF \ -DCMAKE_BUILD_TYPE=Release .. \ -DBUILD_SHARED_LIBS=OFF \ -DENABLE_CODE_COVERAGE=OFF \ -DProtobuf_LIBRARIES='-lprotobuf' cmake --build . || exit 1 cmake --install . || exit 1 cd .. ) ( rm -rf libehp-$LIBEHP_VERSION tar xvf $CWD/libehp-$LIBEHP_VERSION.tar.gz cd libehp-$LIBEHP_VERSION chown -R root:root . find -L . \ \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ -o -perm 511 \) -exec chmod 755 {} + -o \ \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ -o -perm 440 -o -perm 400 \) -exec chmod 644 {} + sed -i '/stdlib\.h/a#include ' src/ehp.cpp mkdir -p build cd build cmake \ -DCMAKE_C_FLAGS:STRING="$SLKCFLAGS" \ -DCMAKE_CXX_FLAGS:STRING="$SLKCFLAGS" \ -DCMAKE_INSTALL_PREFIX=/usr \ -DLIB_SUFFIX=${LIBDIRSUFFIX} \ -DMAN_INSTALL_DIR=/usr/man \ -DCMAKE_CXX_COMPILER=clang++ \ -DCMAKE_C_COMPILER=clang \ -DCMAKE_BUILD_TYPE=Release .. \ -DEHP_BUILD_SHARED_LIBS=OFF \ -DBUILD_SHARED_LIBS=OFF cmake --build . --parallel 1 --verbose || exit 1 ) rm -rf $PRGNAM-$COMMIT tar xvf $CWD/$PRGNAM-$COMMIT.tar.gz cd $PRGNAM-$COMMIT chown -R root:root . find -L . \ \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ -o -perm 511 \) -exec chmod 755 {} + -o \ \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ -o -perm 440 -o -perm 400 \) -exec chmod 644 {} + sed -i '/set(CSTOOL_VERSION/amessage(STATUS "lwf:CSTOOL_VERSION=${CSTOOL_VERSION}")' CMakeLists.txt sed -i '/#include /a#include ' src/gtirb-builder/ArchiveReader.h mkdir -p build cd build cmake \ -DCMAKE_C_FLAGS:STRING="$SLKCFLAGS" \ -DCMAKE_CXX_FLAGS:STRING="$SLKCFLAGS" \ -DCMAKE_INSTALL_PREFIX=/usr \ -DLIB_SUFFIX=${LIBDIRSUFFIX} \ -DMAN_INSTALL_DIR=/usr/man \ -DCMAKE_CXX_COMPILER=/usr/bin/clang++ \ -DCMAKE_C_COMPILER=/usr/bin/clang \ -DCMAKE_LIBRARY_PATH="$MYTMP/capstone-$CAPSTONE_VERSION/build;$TMP/LIEF-$LIEF_VERSION/build" \ -DCMAKE_PROGRAM_PATH="$MYTMP"/capstone-$CAPSTONE_VERSION/build \ -DCMAKE_MODULE_PATH=$MYTMP/LIEF-$LIEF_VERSION/install/share/LIEF/cmake/ \ -DLIEF_DIR=$MYTMP/LIEF-$LIEF_VERSION/build/ \ -DLIEF_LIBRARY=$MYTMP/LIEF-$LIEF_VERSION/install/lib/libLIEF.a \ -DLIEF_INCLUDE_DIR=$MYTMP/LIEF-$LIEF_VERSION/install/include \ -DDDISASM_BUILD_SHARED_LIBS=OFF \ -DBUILD_SHARED_LIBS=OFF \ -DDDISASM_ENABLE_TESTS=OFF \ -DCMAKE_BUILD_TYPE=Release .. \ -DCMAKE_EXE_LINKER_FLAGS="-labsl_status -labsl_hash -labsl_log_internal_check_op -labsl_log_internal_message" cmake --build . --verbose --parallel 16 make install/strip DESTDIR=$PKG cd .. rm -f $PKG/{,usr/}lib${LIBDIRSUFFIX}/*.la find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION cp -a \ CHANGELOG.md CODE_OF_CONDUCT.md GrammaTech-CLA-ddisasm.pdf \ CONTRIBUTING.md LICENSE.txt README.md \ $PKG/usr/doc/$PRGNAM-$VERSION cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild mv $PKG/usr/share/doc/ddisasm/copyright $PKG/usr/doc/$PRGNAM-$VERSION/ rm -rf $PKG/usr/share mkdir -p $PKG/install cat $CWD/slack-desc > $PKG/install/slack-desc cd $PKG /sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE