gnu: cross-base: Use gexps for 'cross-gcc-arguments'.

* gnu/packages/cross-base.scm (cross-gcc-arguments): Switch to gexps.
This commit is contained in:
Ludovic Courtès 2023-03-26 21:35:03 +02:00
parent 065d766f09
commit bbb849f11f
No known key found for this signature in database
GPG key ID: 090B11993D9AEBB5

View file

@ -147,69 +147,69 @@ (define (cross-gcc-arguments target xgcc libc)
,@(package-arguments xgcc)))) ,@(package-arguments xgcc))))
(substitute-keyword-arguments args (substitute-keyword-arguments args
((#:configure-flags flags) ((#:configure-flags flags)
`(append (list ,(string-append "--target=" target) #~(append (list #$(string-append "--target=" target)
,@(if libc #$@(if libc
`( ;; Disable libcilkrts because it is not #~( ;; Disable libcilkrts because it is not
;; ported to GNU/Hurd. ;; ported to GNU/Hurd.
"--disable-libcilkrts" "--disable-libcilkrts"
;; When building a cross compiler, --with-sysroot is ;; When building a cross compiler, --with-sysroot is
;; implicitly set to "$gcc_tooldir/sys-root". This does ;; implicitly set to "$gcc_tooldir/sys-root". This does
;; not work for us, because --with-native-system-header-dir ;; not work for us, because --with-native-system-header-dir
;; is searched for relative to this location. Thus, we set ;; is searched for relative to this location. Thus, we set
;; it to "/" so GCC is able to find the target libc headers. ;; it to "/" so GCC is able to find the target libc headers.
;; This is safe because in practice GCC uses CROSS_CPATH ;; This is safe because in practice GCC uses CROSS_CPATH
;; & co to separate target and host libraries. ;; & co to separate target and host libraries.
"--with-sysroot=/") "--with-sysroot=/")
`( ;; Disable features not needed at this stage. #~( ;; Disable features not needed at this stage.
"--disable-shared" "--enable-static" "--disable-shared" "--enable-static"
"--enable-languages=c,c++" "--enable-languages=c,c++"
;; libstdc++ cannot be built at this stage ;; libstdc++ cannot be built at this stage
;; ("Link tests are not allowed after ;; ("Link tests are not allowed after
;; GCC_NO_EXECUTABLES."). ;; GCC_NO_EXECUTABLES.").
"--disable-libstdc++-v3" "--disable-libstdc++-v3"
"--disable-threads" ;libgcc, would need libc "--disable-threads" ;libgcc, would need libc
"--disable-libatomic" "--disable-libatomic"
"--disable-libmudflap" "--disable-libmudflap"
"--disable-libgomp" "--disable-libgomp"
"--disable-libmpx" "--disable-libmpx"
"--disable-libssp" "--disable-libssp"
"--disable-libquadmath" "--disable-libquadmath"
"--disable-decimal-float" ;would need libc "--disable-decimal-float" ;would need libc
"--disable-libcilkrts" "--disable-libcilkrts"
;; When target is any OS other than 'none' these ;; When target is any OS other than 'none' these
;; libraries will fail if there is no libc ;; libraries will fail if there is no libc
;; present. See ;; present. See
;; <https://lists.gnu.org/archive/html/guix-devel/2016-02/msg01311.html> ;; <https://lists.gnu.org/archive/html/guix-devel/2016-02/msg01311.html>
"--disable-libitm" "--disable-libitm"
"--disable-libvtv" "--disable-libvtv"
"--disable-libsanitizer" "--disable-libsanitizer"
)) ))
;; Install cross-built libraries such as libgcc_s.so in ;; Install cross-built libraries such as libgcc_s.so in
;; the "lib" output. ;; the "lib" output.
,@(if libc #$@(if libc
`((string-append "--with-toolexeclibdir=" #~((string-append "--with-toolexeclibdir="
(assoc-ref %outputs "lib") (assoc-ref %outputs "lib")
"/" ,target "/lib")) "/" #$target "/lib"))
'())) #~()))
,(if libc #$(if libc
flags flags
`(remove (cut string-match "--enable-languages.*" <>) #~(remove (cut string-match "--enable-languages.*" <>)
,flags)))) #$flags))))
((#:make-flags flags) ((#:make-flags flags)
(if libc (if libc
`(let ((libc (assoc-ref %build-inputs "libc"))) #~(let ((libc (assoc-ref %build-inputs "libc")))
;; FLAGS_FOR_TARGET are needed for the target libraries to receive ;; FLAGS_FOR_TARGET are needed for the target libraries to receive
;; the -Bxxx for the startfiles. ;; the -Bxxx for the startfiles.
(cons (string-append "FLAGS_FOR_TARGET=-B" libc "/lib") (cons (string-append "FLAGS_FOR_TARGET=-B" libc "/lib")
,flags)) #$flags))
flags)) flags))
((#:phases phases) ((#:phases phases)
`(cross-gcc-build-phases ,target ,phases)))))) #~(cross-gcc-build-phases #$target #$phases))))))
(define (cross-gcc-patches xgcc target) (define (cross-gcc-patches xgcc target)
"Return GCC patches needed for XGCC and TARGET." "Return GCC patches needed for XGCC and TARGET."