diff options
Diffstat (limited to 'source/d/llvm/llvm.SlackBuild')
-rwxr-xr-x | source/d/llvm/llvm.SlackBuild | 208 |
1 files changed, 131 insertions, 77 deletions
diff --git a/source/d/llvm/llvm.SlackBuild b/source/d/llvm/llvm.SlackBuild index f2f1ab094..aab67ce71 100755 --- a/source/d/llvm/llvm.SlackBuild +++ b/source/d/llvm/llvm.SlackBuild @@ -3,7 +3,7 @@ # Slackware build script for llvm # Copyright 2008-2016 Heinz Wiesinger, Amsterdam, The Netherlands -# Copyright 2012, 2013, 2014, 2015, 2016, 2018, 2019, 2020, 2021 Patrick J. Volkerding, Sebeka, MN, USA +# Copyright 2012, 2013, 2014, 2015, 2016, 2018, 2019, 2020, 2021, 2022, 2023, 2024 Patrick J. Volkerding, Sebeka, MN, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -29,6 +29,18 @@ PKGNAM=llvm VERSION=${VERSION:-$(echo llvm-*.tar.xz | rev | cut -f 4- -d . | cut -f 1 -d - | rev)} BUILD=${BUILD:-1} +# For the two options below, either set both to OFF or *only one* to ON: + +# Build using -DLLVM_BUILD_LLVM_DYLIB=ON -DLLVM_LINK_LLVM_DYLIB=ON -DCLANG_LINK_CLANG_DYLIB=ON: +# This is the upstream recommended way to build LLVM with shared libraries and +# seems to be the way to go these days. +LLVM_BUILD_LLVM_DYLIB=${LLVM_BUILD_LLVM_DYLIB:=ON} + +# Build using -DBUILD_SHARED_LIBS=ON. +# We used this for years here to get a smaller LLVM package, but it no longer +# works. Feel free to try it, but expect breakage. +BUILD_SHARED_LIBS=${BUILD_SHARED_LIBS:=OFF} + NUMJOBS=${NUMJOBS:-" -j$(expr $(nproc) + 1) "} if [ -z "$ARCH" ]; then @@ -39,29 +51,6 @@ if [ -z "$ARCH" ]; then esac fi -# Building clangd will be determined automatically unless BUILD_CLANG is -# preset to YES or NO: -if [ -z $BUILD_CLANGD ]; then - if [ "$ARCH" = "i586" -o "$ARCH" = "i686" ]; then - BUILD_CLANGD=NO - else - BUILD_CLANGD=YES - fi -fi -if [ "$BUILD_CLANGD" = "NO" ]; then - CLANGD="-DCLANG_ENABLE_CLANGD=OFF" -fi - -# Building lld will be determined automatically unless BUILD_LLD is -# preset to YES or NO: -if [ -z $BUILD_LLD ]; then - if [ "$ARCH" = "i586" -o "$ARCH" = "i686" ]; then - BUILD_LLD=NO - else - BUILD_LLD=YES - fi -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. @@ -72,82 +61,129 @@ fi TMP=${TMP:-/tmp} PKG=$TMP/package-$PKGNAM +BUILDDIR=${TMP}/llvm-build-${VERSION} + +# Ignore that which should be ignored to avoid long build times and +# massive warning spew: +IGNORE_GNU_EXTENSIONS=${IGNORE_GNU_EXTENSIONS:--Wno-unknown-warning-option -Wno-gnu-line-marker -Wno-gnu-anonymous-struct -Wno-gnu-include-next} if [ "$ARCH" = "i586" ]; then - SLKCFLAGS="-O2 -march=i586 -mtune=i686" + SLKCFLAGS="-O2 -march=i586 -mtune=i686 $IGNORE_GNU_EXTENSIONS" LIBDIRSUFFIX="" elif [ "$ARCH" = "i686" ]; then - SLKCFLAGS="-O2 -march=i686 -mtune=i686" + SLKCFLAGS="-O2 -march=i686 -mtune=i686 $IGNORE_GNU_EXTENSIONS" LIBDIRSUFFIX="" elif [ "$ARCH" = "x86_64" ]; then - SLKCFLAGS="-O2 -fPIC" + SLKCFLAGS="-O2 -fPIC $IGNORE_GNU_EXTENSIONS" LIBDIRSUFFIX="64" else - SLKCFLAGS="-O2" + SLKCFLAGS="-O2 $IGNORE_GNU_EXTENSIONS" LIBDIRSUFFIX="" fi -# Python2 short version: -PY2=$(python -c 'from distutils.sysconfig import get_python_lib; print(get_python_lib())' | cut -f 2 -d n | cut -f 1 -d /) +# Building clangd will be determined automatically unless BUILD_CLANG is +# preset to YES or NO: +if [ -z $BUILD_CLANGD ]; then + if [ "$ARCH" = "i586" -o "$ARCH" = "i686" ]; then + BUILD_CLANGD=NO + else + BUILD_CLANGD=YES + fi +fi +if [ "$BUILD_CLANGD" = "NO" ]; then + CLANGD="-DCLANG_ENABLE_CLANGD=OFF" +fi + # Python3 short version: PY3=$(python3 -c 'from distutils.sysconfig import get_python_lib; print(get_python_lib())' | cut -f 2 -d n | cut -f 1 -d /) -# Sadly, glibc-2.30 exposed some sort of problem with clang and icecream. -# The symptom is a compile failure that says none of the types in -# <linux/types.h> are defined, even though they are. gcc/g++ seem unaffected. -# For now, not much choice other than to disable this. -# Don't use icecream: -#PATH=$(echo $PATH | sed "s|/usr/libexec/icecc/bin||g" | tr -s : | sed "s/^://g" | sed "s/:$//g") +rm -rf $PKG $BUILDDIR +mkdir -p $TMP $PKG $BUILDDIR +cd $BUILDDIR + +# Add a fake configure script so the cleanup script used here at Slackware +# knows to delete this stuff later. Other folks can just ignore this... it +# doesn't have any other purpose. +touch configure +chmod 755 configure + +# Extract and rename some support files: +echo "Extracting $CWD/cmake-$VERSION.src.tar.xz..." +tar xf $CWD/cmake-$VERSION.src.tar.xz || exit 1 +mv cmake-$VERSION.src cmake +echo "Extracting $CWD/third-party-$VERSION.src.tar.xz..." +tar xf $CWD/third-party-$VERSION.src.tar.xz || exit 1 +mv third-party-$VERSION.src third-party +echo "Extracting $CWD/runtimes-$VERSION.src.tar.xz..." +tar xf $CWD/runtimes-$VERSION.src.tar.xz || exit 1 +mv runtimes-${VERSION}.src/cmake/Modules/* cmake/Modules || exit 1 +rm -r runtimes-${VERSION}.src -rm -rf $PKG -mkdir -p $TMP $PKG -cd $TMP rm -rf $PKGNAM-${VERSION}.src $PKGNAM-${VERSION} -tar xvf $CWD/$PKGNAM-$VERSION.src.tar.xz || exit 1 +echo "Extracting $CWD/$PKGNAM-$VERSION.src.tar.xz..." +tar xf $CWD/$PKGNAM-$VERSION.src.tar.xz || exit 1 -cd $PKGNAM-${VERSION}/tools || cd $PKGNAM-${VERSION}.src/tools || exit 1 - tar xvf $CWD/clang-$VERSION.src.tar.xz || exit 1 +cd $PKGNAM-${VERSION}.src/tools || cd $PKGNAM-${VERSION}/tools || exit 1 + echo "Extracting $CWD/clang-$VERSION.src.tar.xz..." + tar xf $CWD/clang-$VERSION.src.tar.xz || exit 1 mv clang-${VERSION} clang 2>/dev/null || mv clang-${VERSION}.src clang || exit 1 - #tar xvf $CWD/flang-$VERSION.src.tar.xz || exit 1 + #echo "Extracting $CWD/flang-$VERSION.src.tar.xz..." + #tar xf $CWD/flang-$VERSION.src.tar.xz || exit 1 #mv flang-${VERSION} flang 2>/dev/null || mv flang-${VERSION}.src flang || exit 1 - tar xvf $CWD/lldb-$VERSION.src.tar.xz || exit 1 + echo "Extracting $CWD/lldb-$VERSION.src.tar.xz..." + tar xf $CWD/lldb-$VERSION.src.tar.xz || exit 1 mv lldb-${VERSION} lldb 2>/dev/null || mv lldb-${VERSION}.src lldb || exit 1 - if [ "$BUILD_LLD" = "YES" ]; then - tar xvf $CWD/lld-$VERSION.src.tar.xz || exit 1 - mv lld-${VERSION} lld 2>/dev/null || mv lld-${VERSION}.src lld || exit 1 - fi + echo "Extracting $CWD/lld-$VERSION.src.tar.xz..." + tar xf $CWD/lld-$VERSION.src.tar.xz || exit 1 + mv lld-${VERSION} lld 2>/dev/null || mv lld-${VERSION}.src lld || exit 1 cd ../ cd tools/clang/tools || exit 1 - tar xvf $CWD/clang-tools-extra-$VERSION.src.tar.xz || exit 1 + echo "Extracting $CWD/clang-tools-extra-$VERSION.src.tar.xz..." + tar xf $CWD/clang-tools-extra-$VERSION.src.tar.xz || exit 1 mv clang-tools-extra-${VERSION} extra 2>/dev/null \ || mv clang-tools-extra-${VERSION}.src extra || exit 1 - # HACK # Otherwise the build fails because files aren't found. - rm -rf $TMP/clang-tools-extra - cp -a extra $TMP/clang-tools-extra cd ../../../ cd projects || exit 1 - tar xvf $CWD/compiler-rt-$VERSION.src.tar.xz || exit 1 + echo "Extracting $CWD/compiler-rt-$VERSION.src.tar.xz..." + tar xf $CWD/compiler-rt-$VERSION.src.tar.xz || exit 1 mv compiler-rt-${VERSION} compiler-rt 2>/dev/null || mv compiler-rt-${VERSION}.src compiler-rt || exit 1 - tar xvf $CWD/openmp-$VERSION.src.tar.xz || exit 1 + echo "Extracting $CWD/openmp-$VERSION.src.tar.xz..." + tar xf $CWD/openmp-$VERSION.src.tar.xz || exit 1 mv openmp-${VERSION} openmp 2>/dev/null || mv openmp-${VERSION}.src openmp || exit 1 - tar xvf $CWD/libcxx-${VERSION}.src.tar.xz || exit 1 + echo "Extracting $CWD/libcxx-${VERSION}.src.tar.xz..." + tar xf $CWD/libcxx-${VERSION}.src.tar.xz || exit 1 mv libcxx-${VERSION} libcxx 2>/dev/null || mv libcxx-${VERSION}.src libcxx || exit 1 - tar xvf $CWD/libcxxabi-${VERSION}.src.tar.xz || exit 1 + echo "Extracting $CWD/libcxxabi-${VERSION}.src.tar.xz..." + tar xf $CWD/libcxxabi-${VERSION}.src.tar.xz || exit 1 mv libcxxabi-${VERSION} libcxxabi 2>/dev/null || mv libcxxabi-${VERSION}.src libcxxabi || exit 1 - tar xvf $CWD/polly-$VERSION.src.tar.xz || exit 1 + echo "Extracting $CWD/polly-$VERSION.src.tar.xz..." + tar xf $CWD/polly-$VERSION.src.tar.xz || exit 1 mv polly-${VERSION} polly 2>/dev/null || mv polly-${VERSION}.src polly || exit 1 # We just need a header file from this... - tar xvf $CWD/libunwind-${VERSION}.src.tar.xz || exit 1 - mv libunwind-${VERSION} libunwind || mv libunwind-${VERSION}.src libunwind || exit 1 + echo "Extracting $CWD/libunwind-${VERSION}.src.tar.xz..." + tar xf $CWD/libunwind-${VERSION}.src.tar.xz || exit 1 + mv libunwind-${VERSION}.src libunwind || mv libunwind-${VERSION} libunwind || exit 1 cd ../ # Support GCC built for i586-slackware-linux: zcat $CWD/clang.toolchains.i586.triple.diff.gz | patch -p1 --verbose || exit 1 -# Hack to fix build with polly. Maybe we should just not use polly... ? -zcat $CWD/llvm.polly.hack.diff.gz | patch -p1 --verbose || exit 1 +# We require libatomic on 32-bit platforms: +if [ -f ./tools/lldb/source/Utility/CMakeLists.txt ]; then + if [ "$ARCH" = "i586" -o "$ARCH" = "i686" ]; then + zcat $CWD/lldb.32-bit.link.libatomic.diff.gz | patch -p1 --verbose || exit 1 + fi +fi + +# These hackish links seem to be required... +cd .. +ln -sf */runtimes . +cd - +cd projects +ln -sf ../../cmake . +cd - chown -R root:root . find . \ @@ -156,6 +192,15 @@ find . \ \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \ -exec chmod 644 {} \+ +# Collect shared library options. If both of the configurable options are set +# to ON, the last one we check will be the one we use. +if [ "$BUILD_SHARED_LIBS" = "ON" ]; then + SHARED_LIBRARY_OPTIONS="-DBUILD_SHARED_LIBS=ON" +fi +if [ "$LLVM_BUILD_LLVM_DYLIB" = "ON" ]; then + SHARED_LIBRARY_OPTIONS="-DLLVM_BUILD_LLVM_DYLIB=ON -DLLVM_LINK_LLVM_DYLIB=ON -DCLANG_LINK_CLANG_DYLIB=ON" +fi + mkdir build cd build mkdir include @@ -170,17 +215,26 @@ cd build -DCMAKE_CXX_FLAGS:STRING="$SLKCFLAGS" \ -DCMAKE_INSTALL_PREFIX=/usr \ -DLLVM_LIBDIR_SUFFIX=${LIBDIRSUFFIX} \ + -DLIBCXX_LIBDIR_SUFFIX=${LIBDIRSUFFIX} \ + -DLIBCXXABI_LIBDIR_SUFFIX=${LIBDIRSUFFIX} \ -DCMAKE_BUILD_TYPE=Release \ - -DBUILD_SHARED_LIBS=ON \ - -DLLVM_USE_LINKER=gold \ + $SHARED_LIBRARY_OPTIONS \ + -DLLVM_USE_LINKER=lld \ -DLLVM_ENABLE_RTTI=ON \ -DLLVM_ENABLE_FFI=ON \ + -DLLVM_ENABLE_ZLIB=ON \ -DLLVM_ENABLE_ASSERTIONS=OFF \ + -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=NO \ -DLLVM_INSTALL_UTILS=ON \ -DLLVM_BINUTILS_INCDIR=/usr/include \ - -DCLANG_RESOURCE_DIR="../lib${LIBDIRSUFFIX}/clang/${VERSION}" \ + -DCLANG_RESOURCE_DIR="../lib${LIBDIRSUFFIX}/clang/$(echo $VERSION | cut -f 1 -d .)" \ -DLLVM_TARGETS_TO_BUILD="host;AMDGPU;BPF" \ - -DLLDB_USE_SYSTEM_SIX=1 \ + -DLLVM_INCLUDE_BENCHMARKS=OFF \ + -DLIBCXX_INCLUDE_BENCHMARKS=OFF \ + -DCOMPILER_RT_BUILD_LIBFUZZER=OFF \ + -DCLANG_DEFAULT_PIE_ON_LINUX=ON \ + -DLIBCXX_ENABLE_ABI_LINKER_SCRIPT=ON \ + -DLIBCXXABI_USE_LLVM_UNWINDER=OFF \ $CLANGD \ .. || exit 1 @@ -206,31 +260,31 @@ if [ ! -r $PKG/usr/bin/lit-cpuid ]; then chown root:root $PKG/usr/bin/lit-cpuid chmod 755 $PKG/usr/bin/lit-cpuid fi + # Remove symlink to libgomp, which is already provided by gcc: rm -f $PKG/usr/lib$LIBDIRSUFFIX/libgomp.so # Install Python bindings: -for pyver in ${PY2} ${PY3}; do +for pyver in ${PY3}; do mkdir -p "$PKG/usr/lib$LIBDIRSUFFIX/python$pyver/site-packages" cp -a tools/clang/bindings/python/clang "$PKG/usr/lib$LIBDIRSUFFIX/python$pyver/site-packages/" done # Remove bundled python-six: -rm -f "$PKG/usr/lib$LIBDIRSUFFIX/python${PY2}/site-packages/six.py" +rm -f "$PKG/usr/lib$LIBDIRSUFFIX/python2*/site-packages/six.py" # Compile Python scripts: -python -m compileall "$PKG/usr/lib$LIBDIRSUFFIX/python${PY2}/site-packages/clang" -python -O -m compileall "$PKG/usr/lib$LIBDIRSUFFIX/python${PY2}/site-packages/clang" python3 -m compileall "$PKG/usr/lib$LIBDIRSUFFIX/python${PY3}/site-packages/clang" python3 -O -m compileall "$PKG/usr/lib$LIBDIRSUFFIX/python${PY3}/site-packages/clang" -python -m compileall "$PKG/usr/lib$LIBDIRSUFFIX/python${PY2}/site-packages/lldb" -python -O -m compileall "$PKG/usr/lib$LIBDIRSUFFIX/python${PY2}/site-packages/lldb" -python -m compileall "$PKG/usr/share/scan-view" -python -O -m compileall "$PKG/usr/share/scan-view" -python -m compileall "$PKG/usr/share/clang" -python -O -m compileall "$PKG/usr/share/clang" -python -m compileall "$PKG/usr/share/opt-viewer" -python -O -m compileall "$PKG/usr/share/opt-viewer" +python3 -m compileall "$PKG/usr/share/scan-view" +python3 -O -m compileall "$PKG/usr/share/scan-view" +python3 -m compileall "$PKG/usr/share/clang" +python3 -O -m compileall "$PKG/usr/share/clang" +python3 -m compileall "$PKG/usr/share/opt-viewer" +python3 -O -m compileall "$PKG/usr/share/opt-viewer" + +# Nevermind, we're not shipping this python2 crap: +rm -rf $PKG/usr/lib$LIBDIRSUFFIX/python2* # Move man page directory: mv $PKG/usr/share/man $PKG/usr/ |