Files
alr-repo/lib32-llvm18/alr.sh
Евгений Храмов a48df5437f lib32-llvm18: сохранение llvm-config как llvm-config-18-32
Сохранён llvm-config под именем llvm-config-18-32 для использования при
сборке 32-битных пакетов. Это необходимо для правильной линковки Mesa
с 32-битными библиотеками LLVM.
2025-11-22 14:38:18 +03:00

155 lines
4.2 KiB
Bash

name='lib32-llvm18'
version='18.1.8'
release='7'
desc='32-bit LLVM libraries for Mesa'
desc_ru='32-битные библиотеки LLVM для Mesa'
homepage='https://llvm.org/'
maintainer='Evgeniy Khramov <xpamych@yandex.ru>'
maintainer_ru='Евгений Храмов <xpamych@yandex.ru>'
license='Apache-2.0 WITH LLVM-exception'
architectures=('amd64')
min_alr_version='v0.0.14'
# Runtime dependencies
deps=()
deps_redos=()
# Build dependencies
build_deps=(
'cmake'
'ninja-build'
'gcc'
'gcc-c++'
'python3'
'python3-devel'
'zlib-devel(x86-32)'
'libzstd-devel(x86-32)'
'libxml2-devel(x86-32)'
'ncurses-devel(x86-32)'
'libedit-devel(x86-32)'
'libffi-devel(x86-32)'
'glibc-devel(x86-32)'
)
build_deps_redos=("${build_deps[@]}")
# Provides 32-bit LLVM libraries
provides=(
'lib32-llvm18'
'llvm18-libs(x86-32)'
'llvm18-devel(x86-32)'
)
conflicts=(
'llvm18-libs(x86-32) < 18.1.8'
)
_pkgver="${version}"
sources=("https://github.com/llvm/llvm-project/releases/download/llvmorg-${_pkgver}/llvm-project-${_pkgver}.src.tar.xz")
checksums=('SKIP')
prepare() {
cd "$srcdir/llvm-project-${_pkgver}.src"
echo "==> Preparing LLVM ${version} (32-bit)..."
}
build() {
cd "$srcdir/llvm-project-${_pkgver}.src/llvm"
export CFLAGS="-m32 -O2 -g1"
export CXXFLAGS="-m32 -O2 -g1"
export LDFLAGS="-m32"
export PKG_CONFIG_PATH="/usr/lib/pkgconfig:/usr/share/pkgconfig"
echo "==> Configuring LLVM (32-bit) with CMake..."
cmake -B build -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr \
-DCMAKE_C_FLAGS="-m32" \
-DCMAKE_CXX_FLAGS="-m32" \
-DLLVM_LIBDIR_SUFFIX="" \
-DLLVM_TARGET_ARCH=i686 \
-DLLVM_DEFAULT_TARGET_TRIPLE=i686-redsoft-linux-gnu \
-DLLVM_TARGETS_TO_BUILD="X86;AMDGPU" \
-DLLVM_ENABLE_PROJECTS="" \
-DLLVM_BUILD_LLVM_DYLIB=ON \
-DLLVM_LINK_LLVM_DYLIB=ON \
-DLLVM_BUILD_TOOLS=OFF \
-DLLVM_BUILD_UTILS=OFF \
-DLLVM_INCLUDE_TESTS=OFF \
-DLLVM_INCLUDE_EXAMPLES=OFF \
-DLLVM_INCLUDE_BENCHMARKS=OFF \
-DLLVM_INCLUDE_DOCS=OFF \
-DLLVM_ENABLE_DOXYGEN=OFF \
-DLLVM_ENABLE_SPHINX=OFF \
-DLLVM_ENABLE_BINDINGS=OFF \
-DLLVM_ENABLE_TERMINFO=ON \
-DLLVM_ENABLE_ZLIB=ON \
-DLLVM_ENABLE_ZSTD=ON \
-DLLVM_ENABLE_LIBXML2=ON \
-DBUILD_SHARED_LIBS=OFF
echo "==> Building LLVM (32-bit) - this may take 30-60 minutes..."
cmake --build build -j$(nproc)
}
package() {
cd "$srcdir/llvm-project-${_pkgver}.src/llvm"
echo "==> Installing LLVM (32-bit) libraries..."
DESTDIR="$pkgdir" cmake --install build
# Keep llvm-config but rename it for 32-bit
if [ -d "$pkgdir/usr/bin" ]; then
mkdir -p "$pkgdir/usr/bin"
if [ -f "$pkgdir/usr/bin/llvm-config" ]; then
mv "$pkgdir/usr/bin/llvm-config" "$pkgdir/usr/bin/llvm-config-18-32"
fi
# Remove other executables
find "$pkgdir/usr/bin" -type f ! -name "llvm-config-18-32" -delete
rmdir "$pkgdir/usr/bin" 2>/dev/null || true
fi
rm -rf "$pkgdir/usr/share/man"
rm -rf "$pkgdir/usr/share/opt-viewer"
# Move libraries to /usr/lib (32-bit location)
if [ -d "$pkgdir/usr/lib64" ]; then
mkdir -p "$pkgdir/usr/lib"
mv "$pkgdir/usr/lib64"/* "$pkgdir/usr/lib/" 2>/dev/null || true
rmdir "$pkgdir/usr/lib64"
fi
# Remove static libraries to avoid conflicts with system llvm-static.i686
echo "==> Removing static libraries (.a files)..."
find "$pkgdir/usr/lib" -name "*.a" -delete
# Remove conflicting shared libraries (keep only LLVM-*.so)
echo "==> Removing conflicting shared libraries..."
rm -f "$pkgdir/usr/lib/libLTO.so"*
rm -f "$pkgdir/usr/lib/libRemarks.so"*
rm -f "$pkgdir/usr/lib/LLVMgold.so"
rm -rf "$pkgdir/usr/lib/bfd-plugins"
# Keep only essential headers for Mesa compilation
# Remove conflicting includes
if [ -d "$pkgdir/usr/include" ]; then
mkdir -p "$pkgdir/usr/include/llvm-32"
mv "$pkgdir/usr/include/llvm" "$pkgdir/usr/include/llvm-32/" 2>/dev/null || true
mv "$pkgdir/usr/include/llvm-c" "$pkgdir/usr/include/llvm-32/" 2>/dev/null || true
# Remove other includes that conflict
rm -rf "$pkgdir/usr/include"/*.h
fi
# Install license
install -Dm644 LICENSE.TXT "$pkgdir/usr/share/licenses/$name/LICENSE.TXT"
echo "==> LLVM ${version} (32-bit) libraries installed"
}
files() {
# Find all installed files
find "$pkgdir" -type f -o -type l | sed "s|^$pkgdir||" | sort
}