#!/bin/sh # Slackware build script for shader-slang # Copyright 2026 Jay Lanagan (j@lngn.net), Detroit, MI, USA. # 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=shader-slang SRCNAM=slang VERSION=${VERSION:-2026.19} BUILD=${BUILD:-1} TAG=${TAG:-_lngn} PKGTYPE=${PKGTYPE:-txz} if [ -z "$ARCH" ]; then case "$( uname -m )" in i?86) ARCH=i586 ;; arm*) ARCH=arm ;; *) ARCH=$( uname -m ) ;; esac fi TMP=${TMP:-/tmp/lngn} 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 -march=x86-64 -mtune=generic -fPIC" LIBDIRSUFFIX="64" elif [ "$ARCH" = "aarch64" ]; then SLKCFLAGS="-O2 -march=armv8-a -mtune=generic -fPIC" LIBDIRSUFFIX="64" else SLKCFLAGS="-O2" LIBDIRSUFFIX="" fi set -e rm -rf $PKG mkdir -p $TMP $PKG $OUTPUT cd $TMP rm -rf $SRCNAM-$VERSION tar xvf $CWD/$SRCNAM-$VERSION.tar.?z cd $SRCNAM-$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 {} \; git clone https://github.com/swiftlang/swift-cmark $TMP/$SRCNAM-$VERSION/external/cmark git clone --branch v5.4.9 https://github.com/lua/lua.git $TMP/$SRCNAM-$VERSION/external/lua sed -e "s/find_package(lz4.*/include(FindPkgConfig)\npkg_check_modules(lz4 REQUIRED IMPORTED_TARGET GLOBAL liblz4)/" \ -e "s/LZ4::lz4/PkgConfig::lz4/g" \ -e "/find_package/ s/VulkanHeaders/Vulkan/g" \ -i CMakeLists.txt sed -e "s/\(find_package(LLVM \)\([^ ]\+\) /\1/" \ -i cmake/LLVM.cmake find tools/gfx/vulkan/ \ \( -name "*.cpp" -or -name "*.h" \) \ -exec \ sed -e 's/"spirv-tools\/include\/\(.*\)"/<\1>/g' \ -i {} \+ # Add include prefix sed -e 's/${CMAKE_INSTALL_INCLUDEDIR}/&\/'"$PRGNAM"'/g' \ -i cmake/SlangTarget.cmake # Disable double header install perl -0777 -pi -e 's/install\s*\(\s*DIRECTORY\s*"\$\{slang_SOURCE_DIR\}\/include\".*?\)\s*//s' \ CMakeLists.txt # https://github.com/shader-slang/slang/pull/8369#issuecomment-3255737218 sed -e 's/#include "\(SPIRV\/.*\)"/#include /g' \ -i source/slang-glslang/slang-glslang.cpp # Use system stb and fast float sed -e 's#${CMAKE_CURRENT_LIST_DIR}/stb#/usr/include/stb#' \ -e 's#set(_fast_float_include "${CMAKE_CURRENT_LIST_DIR}/fast_float/include")#find_package(FastFloat REQUIRED)#' \ -e 's#INTERFACE "${_fast_float_include}"#INTERFACE FastFloat::fast_float#' \ -i external/CMakeLists.txt # Fix compatibility with unordered_dense 5.x sed -e 's/detail::wyhash::hash/detail::hash_bytes/' -i source/core/slang-hash.h mkdir -p build cd build CC=clang \ CXX=clang++ \ cmake \ -DCMAKE_C_FLAGS:STRING="$SLKCFLAGS" \ -DCMAKE_CXX_FLAGS:STRING="$SLKCFLAGS" \ -DCMAKE_INSTALL_PREFIX=/usr \ -DCMAKE_INSTALL_LIBDIR=/usr/lib${LIBDIRSUFFIX} \ -DCMAKE_INSTALL_FULL_LIBDIR=/usr/lib${LIBDIRSUFFIX} \ -DCMAKE_BUILD_TYPE='Release' \ -DCMAKE_INSTALL_PREFIX=/usr \ -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON \ -DSLANG_VERSION_NUMERIC="$VERSION" \ -DSLANG_VERSION_FULL="v$VERSION" \ -DSLANG_ENABLE_RELEASE_DEBUG_INFO=FALSE \ -DSLANG_ENABLE_SPLIT_DEBUG_INFO=FALSE \ -DSLANG_ENABLE_TESTS=FALSE \ -DSLANG_ENABLE_SLANG_RHI=FALSE \ -DSLANG_USE_SYSTEM_MINIZ=TRUE \ -DSLANG_USE_SYSTEM_LZ4=TRUE \ -DSLANG_USE_SYSTEM_VULKAN_HEADERS=TRUE \ -DSLANG_USE_SYSTEM_SPIRV_HEADERS=TRUE \ -DSLANG_USE_SYSTEM_SPIRV_TOOLS=TRUE \ -DSLANG_USE_SYSTEM_UNORDERED_DENSE=TRUE \ -DSLANG_USE_SYSTEM_GLSLANG=TRUE \ -DSLANG_OVERRIDE_LUA_PATH="$TMP/$SRCNAM-$VERSION/external" \ -DSLANG_OVERRIDE_CMARK_PATH="$TMP/$SRCNAM-$VERSION/external" \ -DSLANG_SLANG_LLVM_FLAVOR=DISABLE \ -DSLANG_ENABLE_SLANG_PROXY=FALSE \ -DSLANG_ENABLE_GFX=FALSE .. make make install DESTDIR=$PKG cd .. # -DSLANG_DXC_BUILD_FROM_SOURCE=ON \ # Don't ship .la files: 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 if [ "$ARCH" = "x86_64" ]; then mkdir -p $PKG/usr/lib64 cp -R $PKG/usr/lib/* $PKG/usr/lib64 rm -r $PKG/usr/lib sed 's|/lib|/lib64|' -i $PKG/usr/lib64/pkgconfig/slang-compiler.pc elif [ "$ARCH" = "aarch64" ]; then mkdir -p $PKG/usr/lib64 cp -R $PKG/usr/lib/* $PKG/usr/lib64 rm -r $PKG/usr/lib sed 's|/lib|/lib64|' -i $PKG/usr/lib64/pkgconfig/slang-compiler.pc fi if [ -d $PKG/usr/man ]; then find $PKG/usr/man -type f -exec gzip -9 {} \; for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done fi mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION #mv $PKG/usr/share/doc/slang $PKG/usr/doc/$PRGNAM-$VERSION rm -r $PKG/usr/share cp -a LICENSE *.md $PKG/usr/doc/$PRGNAM-$VERSION chmod 644 $PKG/usr/doc/$PRGNAM-$VERSION/* cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild mkdir -p $PKG/install cat $CWD/slack-desc > $PKG/install/slack-desc cat $CWD/slack-required > $PKG/install/slack-required cd $PKG /sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE