From deb3562384b94d09ca6f99f2fe5cdb377a9a6494 Mon Sep 17 00:00:00 2001 From: Efraim Flashner Date: Sun, 26 Jan 2025 16:01:30 +0200 Subject: [PATCH] gnu: Add make-llvm procedure. * gnu/packages/llvm.scm (make-llvm): New procedure. (llvm-15): Rewrite using make-llvm. Change-Id: I8f7d7bd5cf8bbe86af8f4a75bf8aec09074c07dc --- gnu/packages/llvm.scm | 130 ++++++++++++++++++++++-------------------- 1 file changed, 67 insertions(+), 63 deletions(-) diff --git a/gnu/packages/llvm.scm b/gnu/packages/llvm.scm index 5e7d9277396bc593401bd2802f59399a1a162a6a..0f06da7bd8f823a8fc4959c5e1ca7dd64d087e0e 100644 --- a/gnu/packages/llvm.scm +++ b/gnu/packages/llvm.scm @@ -594,74 +594,78 @@ output), and Binutils.") (sha256 (base32 (assoc-ref %llvm-monorepo-hashes version))) (patches (map search-patch (assoc-ref %llvm-patches version))))) -;;; TODO: Make the base llvm all other LLVM inherit from on core-updates. -(define-public llvm-15 - (package - (name "llvm") - (version "15.0.7") - (source (llvm-monorepo version)) - (build-system cmake-build-system) - (outputs '("out" "opt-viewer")) - (arguments - (list - #:configure-flags - #~(list - ;; These options are required for cross-compiling LLVM according - ;; to . - #$@(if (%current-target-system) - (or (and=> - (system->llvm-target-arch) - (lambda (llvm-target-arch) - #~((string-append "-DLLVM_TABLEGEN=" - #+(file-append this-package - "/bin/llvm-tblgen")) - #$(string-append "-DLLVM_DEFAULT_TARGET_TRIPLE=" - (%current-target-system)) - #$(string-append "-DLLVM_TARGET_ARCH=" llvm-target-arch) - #$(string-append "-DLLVM_TARGETS_TO_BUILD=" - (system->llvm-target))))) - (raise (condition - (&package-unsupported-target-error - (package this-package) - (target (%current-target-system)))))) - '()) - ;; Note: sadly, the build system refuses the use of - ;; -DBUILD_SHARED_LIBS=ON and the large static archives are needed to - ;; build clang-runtime, so we cannot delete them. - "-DLLVM_BUILD_LLVM_DYLIB=ON" - "-DLLVM_LINK_LLVM_DYLIB=ON" - "-DLLVM_ENABLE_FFI=ON" - "-DLLVM_ENABLE_RTTI=ON" ;for some third-party utilities - "-DLLVM_INSTALL_UTILS=ON" ;needed for rustc - "-DLLVM_PARALLEL_LINK_JOBS=1") ;cater to smaller build machines - ;; Don't use '-g' during the build, to save space. - #:build-type "Release" - #:phases - #~(modify-phases %standard-phases - (add-after 'unpack 'change-directory - (lambda _ - (chdir "llvm"))) - (add-after 'install 'install-opt-viewer - (lambda* (#:key outputs #:allow-other-keys) - (let* ((opt-viewer-share (string-append #$output:opt-viewer - "/share"))) - (mkdir-p opt-viewer-share) - (rename-file (string-append #$output "/share/opt-viewer") - opt-viewer-share))))))) - (native-inputs (list python-wrapper perl)) - (inputs (list libffi)) - (propagated-inputs (list zlib)) ;to use output from llvm-config - (home-page "https://www.llvm.org") - (synopsis "Optimizing compiler infrastructure") - (description - "LLVM is a compiler infrastructure designed for compile-time, link-time, +;; A base llvm package that can be used for creating other llvm packages. +(define make-llvm + (mlambda (version) + (package + (name "llvm") + (version version) + (source (llvm-monorepo version)) + (build-system cmake-build-system) + (outputs '("out" "opt-viewer")) + (arguments + (list + #:configure-flags + #~(list + ;; These options are required for cross-compiling LLVM according + ;; to . + #$@(if (%current-target-system) + (or (and=> + (system->llvm-target-arch) + (lambda (llvm-target-arch) + #~((string-append "-DLLVM_TABLEGEN=" + #+(file-append this-package + "/bin/llvm-tblgen")) + #$(string-append "-DLLVM_DEFAULT_TARGET_TRIPLE=" + (%current-target-system)) + #$(string-append "-DLLVM_TARGET_ARCH=" llvm-target-arch) + #$(string-append "-DLLVM_TARGETS_TO_BUILD=" + (system->llvm-target))))) + (raise (condition + (&package-unsupported-target-error + (package this-package) + (target (%current-target-system)))))) + '()) + ;; Note: sadly, the build system refuses the use of + ;; -DBUILD_SHARED_LIBS=ON and the large static archives are needed to + ;; build clang-runtime, so we cannot delete them. + "-DLLVM_BUILD_LLVM_DYLIB=ON" + "-DLLVM_LINK_LLVM_DYLIB=ON" + "-DLLVM_ENABLE_FFI=ON" + "-DLLVM_ENABLE_RTTI=ON" ;for some third-party utilities + "-DLLVM_INSTALL_UTILS=ON" ;needed for rustc + "-DLLVM_PARALLEL_LINK_JOBS=1") ;cater to smaller build machines + ;; Don't use '-g' during the build, to save space. + #:build-type "Release" + #:phases + #~(modify-phases %standard-phases + (add-after 'unpack 'change-directory + (lambda _ + (chdir "llvm"))) + (add-after 'install 'install-opt-viewer + (lambda* (#:key outputs #:allow-other-keys) + (let* ((opt-viewer-share (string-append #$output:opt-viewer + "/share"))) + (mkdir-p opt-viewer-share) + (rename-file (string-append #$output "/share/opt-viewer") + opt-viewer-share))))))) + (native-inputs (list python-wrapper perl)) + (inputs (list libffi)) + (propagated-inputs (list zlib)) ;to use output from llvm-config + (home-page "https://www.llvm.org") + (synopsis "Optimizing compiler infrastructure") + (description + "LLVM is a compiler infrastructure designed for compile-time, link-time, runtime, and idle-time optimization of programs from arbitrary programming languages. It currently supports compilation of C and C++ programs, using front-ends derived from GCC 4.0.1. A new front-end for the C family of languages is in development. The compiler infrastructure includes mirror sets of programming tools as well as libraries with equivalent functionality.") - (license license:asl2.0) - (properties `((release-monitoring-url . ,%llvm-release-monitoring-url))))) + (license license:asl2.0) + (properties `((release-monitoring-url . ,%llvm-release-monitoring-url)))))) + +(define-public llvm-15 + (make-llvm "15.0.7")) (define-public llvm-14 (package