Subject: [PATCH] gnu: llvm: Fix misc errors for unsupported targets.
From: Christopher Baines <[email-masked]>
To: [email-masked]
Date: Thu, 1 Aug 2024 14:44:45 +0100
List-Id: <debbugs-submit.debbugs.gnu.org>

* gnu/packages/llvm.scm (system->llvm-target-arch): Return #f for unknown
targets.
(llvm-15, llvm-14): Handle system->llvm-target-arch and raise a
package-unsupported-target-error condition.

Change-Id: I647f721a64a39bb34196998b7e4adda3a25f1ab3
---
 gnu/packages/llvm.scm | 49 +++++++++++++++++++++++++++----------------
 1 file changed, 31 insertions(+), 18 deletions(-)

diff --git a/gnu/packages/llvm.scm b/gnu/packages/llvm.scm
index 2614a403c1..0c0ec1bca1 100644
--- a/gnu/packages/llvm.scm
+++ b/gnu/packages/llvm.scm
@@ -78,6 +78,8 @@ (define-module (gnu packages llvm)
   #:use-module (gnu packages vulkan)
   #:use-module (gnu packages xml)
   #:use-module (srfi srfi-1)
+  #:use-module (srfi srfi-34)
+  #:use-module (srfi srfi-35)
   #:use-module (ice-9 match)
   #:export (make-lld-wrapper
             system->llvm-target))
@@ -107,8 +109,7 @@ (define* (system->llvm-target-arch #:optional
                               (if (string-prefix? system-prefix system)
                                   target
                                   (matches rest ...)))
-                             ((_)
-                              (error "LLVM target arch for system is unknown" system)))))
+                             ((_) #f))))
     (matches ("aarch64"     => "AArch64")
              ("armhf"       => "ARM")
              ("mips64el"    => "Mips")
@@ -591,15 +592,21 @@ (define-public llvm-15
          ;; These options are required for cross-compiling LLVM according
          ;; to <https://llvm.org/docs/HowToCrossCompileLLVM.html>.
          #$@(if (%current-target-system)
-                #~((string-append "-DLLVM_TABLEGEN="
+                (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="
-                                    (system->llvm-target-arch))
-                   #$(string-append "-DLLVM_TARGETS_TO_BUILD="
-                                    (system->llvm-target)))
+                          #$(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
@@ -651,15 +658,21 @@ (define-public llvm-14
          ;; These options are required for cross-compiling LLVM according
          ;; to <https://llvm.org/docs/HowToCrossCompileLLVM.html>.
          #$@(if (%current-target-system)
-                #~((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="
-                                    (system->llvm-target-arch))
-                   #$(string-append "-DLLVM_TARGETS_TO_BUILD="
-                                    (system->llvm-target)))
+                (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))))))
                 '())
          ;; undefined reference to `__atomic_fetch_add_8' in lib/libLLVMOrcJIT.so.14
          #$@(if (target-ppc32?)

base-commit: 56d3d04a442b52097e523dcfebf60ff5bf82bcfd
-- 
2.45.2