From 5a0dc1016143bb6dd093d35907dc4846d7462616 Mon Sep 17 00:00:00 2001 From: EnumDev Date: Mon, 27 Oct 2025 21:39:59 +0200 Subject: [PATCH] Switch to new download format and update source.sh script --- pkg.info | 44 ++++++++++++++++++++++--- source.sh | 97 ++++++++++++++++++++----------------------------------- 2 files changed, 74 insertions(+), 67 deletions(-) diff --git a/pkg.info b/pkg.info index 7058d5b..827a573 100644 --- a/pkg.info +++ b/pkg.info @@ -1,18 +1,52 @@ name: llvm description: A collection of modular and reusable compiler and toolchain technologies version: 20.1.8 -revision: 3 +revision: 4 url: https://llvm.org license: Apache2-with-llvm-exception architecture: any -make_depends: ["cmake","libffi","ncurses","ninja","python3","zlib","zstd"] type: source +make_depends: + - cmake + - libffi + - ncurses + - ninja + - python3 + - zlib + - zstd +downloads: + - url: https://github.com/llvm/llvm-project/releases/download/llvmorg-${BPM_PKG_VERSION}/llvm-${BPM_PKG_VERSION}.src.tar.xz + extract_to: ${BPM_SOURCE} + extract_strip_components: 1 + checksum: e1363888216b455184dbb8a74a347bf5612f56a3f982369e1cba6c7e0726cde1 + - url: https://github.com/llvm/llvm-project/releases/download/llvmorg-${BPM_PKG_VERSION}/clang-${BPM_PKG_VERSION}.src.tar.xz + extract_to: ${BPM_SOURCE}/tools/clang + extract_strip_components: 1 + checksum: b7a1b7b0af7b9c7596af6bd46e36d11321926eaa66a7a7dc957ab0a1375ee4b0 + - url: https://github.com/llvm/llvm-project/releases/download/llvmorg-${BPM_PKG_VERSION}/cmake-${BPM_PKG_VERSION}.src.tar.xz + extract_to: cmake + extract_strip_components: 1 + checksum: 3319203cfd1172bbac50f06fa68e318af84dcb5d65353310c0586354069d6634 + - url: https://github.com/llvm/llvm-project/releases/download/llvmorg-${BPM_PKG_VERSION}/third-party-${BPM_PKG_VERSION}.src.tar.xz + extract_to: third-party + extract_strip_components: 1 + checksum: 9a4e452a8163732d417db067a89190fcda823cb3aa33199e834ac7c028923f4b split_packages: - name: llvm - depends: ["llvm-libs","perl"] + depends: + - llvm-libs + - perl - name: llvm-libs - depends: ["gcc-libs","libedit","libffi","libxml2","zlib","zstd"] + depends: + - gcc-libs + - libedit + - libffi + - libxml2 + - zlib + - zstd - name: clang description: C language family frontend for LLVM url: https://clang.llvm.org/ - depends: ["gcc","llvm"] + depends: + - gcc + - llvm diff --git a/source.sh b/source.sh index 562a29d..551a612 100644 --- a/source.sh +++ b/source.sh @@ -2,40 +2,11 @@ # BPM Expects the source code to be extracted into the automatically created 'source' directory which can be accessed using $BPM_SOURCE # BPM Expects the output files to be present in the automatically created 'output' directory which can be accessed using $BPM_OUTPUT -DOWNLOAD="https://github.com/llvm/llvm-project/releases/download/llvmorg-${BPM_PKG_VERSION}/llvm-${BPM_PKG_VERSION}.src.tar.xz" -DOWNLOAD_CLANG="https://github.com/llvm/llvm-project/releases/download/llvmorg-${BPM_PKG_VERSION}/clang-${BPM_PKG_VERSION}.src.tar.xz" -DOWNLOAD_CMAKE_MODULES="https://github.com/llvm/llvm-project/releases/download/llvmorg-${BPM_PKG_VERSION}/cmake-${BPM_PKG_VERSION}.src.tar.xz" -DOWNLOAD_THIRD_PARTY="https://github.com/llvm/llvm-project/releases/download/llvmorg-${BPM_PKG_VERSION}/third-party-${BPM_PKG_VERSION}.src.tar.xz" -FILENAME="${DOWNLOAD##*/}" -FILENAME_CLANG="${DOWNLOAD_CLANG##*/}" -FILENAME_CMAKE_MODULES="${DOWNLOAD_CMAKE_MODULES##*/}" -FILENAME_THIRD_PARTY="${DOWNLOAD_THIRD_PARTY##*/}" - -# The prepare function is executed in the root of the temp directory -# This function is used for downloading files and putting them into the correct location -prepare() { - wget "$DOWNLOAD" - wget "$DOWNLOAD_CLANG" - wget "$DOWNLOAD_CMAKE_MODULES" - wget "$DOWNLOAD_THIRD_PARTY" - - tar -xvf "$FILENAME" --strip-components=1 -C "$BPM_SOURCE" - tar -xvf "$FILENAME_CLANG" -C "$BPM_SOURCE"/tools - mv "$BPM_SOURCE"/tools/clang-${BPM_PKG_VERSION}.src "$BPM_SOURCE"/tools/clang - mkdir {cmake,third-party} - tar -xvf "$FILENAME_CMAKE_MODULES" --strip-components=1 -C cmake - tar -xvf "$FILENAME_THIRD_PARTY" --strip-components=1 -C third-party -} - # The build function is executed in the source directory # This function is used to compile the source code build() { - - mkdir build - cd build - - CC=gcc CXX=g++ \ - cmake -DCMAKE_INSTALL_PREFIX=/usr \ + export CC=gcc CXX=g++ + cmake -B build -DCMAKE_INSTALL_PREFIX=/usr \ -DLLVM_ENABLE_FFI=ON \ -DCMAKE_BUILD_TYPE=Release \ -DLLVM_BUILD_LLVM_DYLIB=ON \ @@ -44,37 +15,47 @@ build() { -DLLVM_BINUTILS_INCDIR=/usr/include \ -DLLVM_INCLUDE_BENCHMARKS=OFF \ -DCLANG_DEFAULT_PIE_ON_LINUX=ON \ - -Wno-dev -G Ninja .. - ninja + -Wno-dev -G Ninja + cmake --build build +} + +_pick() { + local p="$1" f d; shift + for f; do + [ -d "$BPM_WORKDIR"/output_"$p" ] || { echo "Split package $p not found"; exit 1; } + d="$BPM_WORKDIR"/output_"$p"/"${f#$BPM_OUTPUT}" + mkdir -p "$(dirname "$d")" + mv "$f" "$d" + rmdir -p --ignore-fail-on-non-empty "$(dirname "$f")" + done } # The package function is executed in the source directory # This function is used to move the compiled files into the output directory package_llvm() { - cd build - DESTDIR="$BPM_OUTPUT" ninja install - cp bin/FileCheck "$BPM_OUTPUT"/usr/bin + DESTDIR="$BPM_OUTPUT" cmake --install build - # Move clang files to clang package - CLANG="$BPM_SOURCE"/output-clang - mkdir -p "$CLANG"/{usr/bin,usr/lib,usr/lib/cmake/,usr/include,usr/share,usr/share/man/man1} - mv "$BPM_OUTPUT"/usr/bin/{amdgpu-arch,analyze-build,c-index-test,diagtool,git-clang-format,hmaptool,intercept-build,nvptx-arch,scan-build,scan-build-py,scan-view} "$CLANG"/usr/bin - mv "$BPM_OUTPUT"/usr/bin/clang* -t "$CLANG"/usr/bin - mv "$BPM_OUTPUT"/usr/lib/libclang* -t "$CLANG"/usr/lib - mv "$BPM_OUTPUT"/usr/lib/cmake/clang -t "$CLANG"/usr/lib/cmake/ - mv "$BPM_OUTPUT"/usr/include/clang-c/ -t "$CLANG"/usr/include - mv "$BPM_OUTPUT"/usr/include/clang -t "$CLANG"/usr/include - mv "$BPM_OUTPUT"/usr/lib/clang -t "$CLANG"/usr/lib - mv "$BPM_OUTPUT"/usr/share/clang -t "$CLANG"/usr/share - mv "$BPM_OUTPUT"/usr/share/man/man1/scan-build.1 -t "$CLANG"/usr/share/man/man1 - mv "$BPM_OUTPUT"/usr/share/scan-build -t "$CLANG"/usr/share - mv "$BPM_OUTPUT"/usr/share/scan-view -t "$CLANG"/usr/share + # Install missing binary + install -Dm755 "$BPM_SOURCE"/build/bin/FileCheck "$BPM_OUTPUT"/usr/bin/FileCheck - # Move runtime libraries to llvm-libs package - LLVM_LIBS="$BPM_SOURCE"/output-llvm-libs - mkdir -p "$LLVM_LIBS"/usr/lib/ + cd "$BPM_OUTPUT" + + # Move clang files into split package + _pick clang usr/bin/{amdgpu-arch,analyze-build,c-index-test,diagtool,git-clang-format,hmaptool,intercept-build,nvptx-arch,scan-build,scan-build-py,scan-view} + _pick clang usr/bin/clang* + _pick clang usr/lib/libclang* + _pick clang usr/lib/cmake/clang + _pick clang usr/include/clang-c/ + _pick clang usr/include/clang + _pick clang usr/lib/clang + _pick clang usr/share/clang + _pick clang usr/share/man/man1/scan-build.1 + _pick clang usr/share/scan-build + _pick clang usr/share/scan-view + + # Move runtime libraries into split package for lib in libLLVM libLLVM-"${BPM_PKG_VERSION%%.*}" libLTO libRemarks; do - mv "$BPM_OUTPUT"/usr/lib/"$lib".so* -t "$LLVM_LIBS"/usr/lib/ + _pick llvm-libs "$BPM_OUTPUT"/usr/lib/"$lib".so* done # Install package license @@ -82,19 +63,11 @@ package_llvm() { } package_llvm-libs() { - # Replace 'output' directory with 'output-llvm-libs' - rmdir "$BPM_OUTPUT" - mv "$BPM_SOURCE"/output-llvm-libs "$BPM_OUTPUT" - # Install package license install -Dm644 "$BPM_SOURCE"/LICENSE.TXT "$BPM_OUTPUT"/usr/share/licenses/llvm-libs/LICENSE.TXT } package_clang() { - # Replace 'output' directory with 'output-clang' - rmdir "$BPM_OUTPUT" - mv "$BPM_SOURCE"/output-clang "$BPM_OUTPUT" - # Install package license install -Dm644 "$BPM_SOURCE"/LICENSE.TXT "$BPM_OUTPUT"/usr/share/licenses/clang/LICENSE.TXT }