summaryrefslogtreecommitdiffstats
path: root/source/d/llvm/llvm.SlackBuild
diff options
context:
space:
mode:
Diffstat (limited to 'source/d/llvm/llvm.SlackBuild')
-rwxr-xr-xsource/d/llvm/llvm.SlackBuild208
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/