From 50d162664a66f4aea33b895d0fd3e6b878b9a45d Mon Sep 17 00:00:00 2001 From: Dariqq Date: Wed, 21 Aug 2024 18:34:50 +0000 Subject: [PATCH] build-system: cmake: Rework cross compilation. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Move the extra configure flags for cross building out from the build side code and instead prepend them to the configure-flags. Use new procedure cmake-system-name-for-target to add support for hurd and bare-metal targets. * guix/build/cmake-build-system.scm (configure): Move cross build flags from here ... * guix/build-system/cmake.scm (cmake-cross-build): ... to here. (cmake-system-name-for-target): New procedure. Change-Id: Ic68acc246e543491ed147e53d47cec5de46b82cb Signed-off-by: Ludovic Courtès --- guix/build-system/cmake.scm | 19 ++++++++++++++++++- guix/build/cmake-build-system.scm | 11 ----------- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/guix/build-system/cmake.scm b/guix/build-system/cmake.scm index 0b8a651ee0..9d757c0d06 100644 --- a/guix/build-system/cmake.scm +++ b/guix/build-system/cmake.scm @@ -39,6 +39,15 @@ (define-module (guix build-system cmake) ;; ;; Code: +(define* (cmake-system-name-for-target + #:optional (target (or (%current-target-system) + (%current-system)))) + (cond ((target-hurd? target) "GNU") + ((target-linux? target) "Linux") + ((target-mingw? target) "Windows") + ;; For avr, or1k-elf, xtensa-ath9k-elf + (else "Generic"))) + (define %cmake-build-system-modules ;; Build-side modules imported by default. `((guix build cmake-build-system) @@ -231,7 +240,15 @@ (define %outputs search-path-specification->sexp native-search-paths) #:phases #$phases - #:configure-flags #$configure-flags + #:configure-flags `(#$(string-append "-DCMAKE_C_COMPILER=" + (cc-for-target target)) + #$(string-append "-DCMAKE_CXX_COMPILER=" + (cxx-for-target target)) + #$(string-append "-DCMAKE_SYSTEM_NAME=" + (cmake-system-name-for-target target)) + ,@#$(if (pair? configure-flags) + (sexp->gexp configure-flags) + configure-flags)) #:make-flags #$make-flags #:out-of-source? #$out-of-source? #:build-type #$build-type diff --git a/guix/build/cmake-build-system.scm b/guix/build/cmake-build-system.scm index d1ff5071be..61033061c6 100644 --- a/guix/build/cmake-build-system.scm +++ b/guix/build/cmake-build-system.scm @@ -62,17 +62,6 @@ (define* (configure #:key outputs (configure-flags '()) (out-of-source? #t) ,(string-append "-DCMAKE_INSTALL_RPATH=" out "/lib") ;; enable verbose output from builds "-DCMAKE_VERBOSE_MAKEFILE=ON" - - ;; Cross-build - ,@(if target - (list (string-append "-DCMAKE_C_COMPILER=" - target "-gcc") - (string-append "-DCMAKE_CXX_COMPILER=" - target "-g++") - (if (string-contains target "mingw") - "-DCMAKE_SYSTEM_NAME=Windows" - "-DCMAKE_SYSTEM_NAME=Linux")) - '()) ,@configure-flags))) (format #t "running 'cmake' with arguments ~s~%" args) (apply invoke "cmake" args))))