[PATCH 0/2] Introduce 'cc-for-target'.

  • Done
  • quality assurance status badge
Details
3 participants
  • Marius Bakke
  • Tobias Geerinckx-Rice
  • Mathieu Othacehe
Owner
unassigned
Submitted by
Marius Bakke
Severity
normal
M
M
Marius Bakke wrote on 28 May 2020 19:11
(address . guix-patches@gnu.org)
20200528171137.29146-1-marius@gnu.org
Many packages specify a compiler "manually", which leads to this stanza
in order to work when cross-compiling:

(string-append "CC="
(let ((target ,(%current-target-system)))
(if target
(string-append target "-gcc")
"gcc")))

To reduce duplication, the following patch introduces a 'cc-for-target'
procedure, so one can instead do:

(string-append "CC=" ,(cc-for-target))

...and it will DTRT.

Thoughts?

Marius Bakke (2):
utils: Add 'cc-for-target'.
gnu: Use 'cc-for-target' instead of custom implementations.

gnu/packages/compression.scm | 7 +-
gnu/packages/linux.scm | 22 ++----
gnu/packages/mail.scm | 5 +-
gnu/packages/music.scm | 6 +-
gnu/packages/radio.scm | 7 +-
gnu/packages/suckless.scm | 134 +++++++++++------------------------
guix/utils.scm | 9 ++-
7 files changed, 60 insertions(+), 130 deletions(-)

--
2.26.2
M
M
Marius Bakke wrote on 28 May 2020 19:13
[PATCH 1/2] utils: Add 'cc-for-target'.
(address . 41579@debbugs.gnu.org)
20200528171309.29346-1-marius@gnu.org
* guix/utils.scm (cc-for-target): New procedure.
---
guix/utils.scm | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)

Toggle diff (36 lines)
diff --git a/guix/utils.scm b/guix/utils.scm
index d7b197fa44..69e3f0a934 100644
--- a/guix/utils.scm
+++ b/guix/utils.scm
@@ -6,7 +6,7 @@
;;; Copyright © 2016 Mathieu Lirzin <mthl@gnu.org>
;;; Copyright © 2015 David Thompson <davet@gnu.org>
;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
-;;; Copyright © 2018 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2018, 2020 Marius Bakke <marius@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -78,6 +78,8 @@
target-aarch64?
target-arm?
target-64bit?
+ cc-for-target
+
version-compare
version>?
version>=?
@@ -506,6 +508,11 @@ a character other than '@'."
(%current-system))))
(any (cut string-prefix? <> system) '("x86_64" "aarch64" "mips64" "ppc64")))
+(define* (cc-for-target #:optional (target (%current-target-system)))
+ (if target
+ (string-append target "-gcc")
+ "gcc"))
+
(define version-compare
(let ((strverscmp
(let ((sym (or (dynamic-func "strverscmp" (dynamic-link))
--
2.26.2
M
M
Marius Bakke wrote on 28 May 2020 19:13
[PATCH 2/2] gnu: Use 'cc-for-target' instead of custom implementations.
(address . 41579@debbugs.gnu.org)
20200528171309.29346-2-marius@gnu.org
* gnu/packages/compression.scm (ecm)[arguments]: In #:make-flags, remove
TARGET binding and use CC-FOR-TARGET instead.
* gnu/packages/linux.scm (powerstat, crda, cachefilesd)[arguments]: Likewise.
* gnu/packages/mail.scm (alpine)[arguments]: Likewise.
* gnu/packages/music.scm (lsp-plugins)[arguments]: Likewise.
* gnu/packages/radio.scm (dump1090)[arguments]: Likewise.
* gnu/packages/suckless.scm (blind, dmenu, spoon, slock, st, surf, sent,
wificurse, sbm, prout, noice, human, fortify-headers, colors, libutf,
scron)[arguments]: Likewise.
---
gnu/packages/compression.scm | 7 +-
gnu/packages/linux.scm | 22 ++----
gnu/packages/mail.scm | 5 +-
gnu/packages/music.scm | 6 +-
gnu/packages/radio.scm | 7 +-
gnu/packages/suckless.scm | 134 +++++++++++------------------------
6 files changed, 52 insertions(+), 129 deletions(-)

Toggle diff (393 lines)
diff --git a/gnu/packages/compression.scm b/gnu/packages/compression.scm
index 38adf35e33..cdab7408ed 100644
--- a/gnu/packages/compression.scm
+++ b/gnu/packages/compression.scm
@@ -2207,11 +2207,8 @@ computations.")
(arguments
`(#:tests? #f ; no check target
#:make-flags
- (let ((target ,(%current-target-system)))
- (list (string-append "CC=" (if target
- (string-append target "-gcc")
- "gcc"))
- (string-append "DESTDIR=" (assoc-ref %outputs "out"))))
+ (list (string-append "CC=" ,(cc-for-target))
+ (string-append "DESTDIR=" (assoc-ref %outputs "out")))
#:phases
(modify-phases %standard-phases
(replace 'configure
diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index dad7b6e992..225f20caf6 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -1222,11 +1222,8 @@ at login. Local and dynamic reconfiguration are its key features.")
(build-system gnu-build-system)
(arguments
`(#:make-flags
- (let* ((target ,(%current-target-system)))
- (list (string-append "CC=" (if target
- (string-append target "-gcc")
- "gcc"))
- (string-append "prefix=" (assoc-ref %outputs "out"))))
+ (list (string-append "CC=" ,(cc-for-target))
+ (string-append "prefix=" (assoc-ref %outputs "out")))
#:tests? #f ; no test suite
#:phases
(modify-phases %standard-phases
@@ -3377,12 +3374,9 @@ interface.")
#t))))
#:test-target "verify"
#:make-flags (let ((out (assoc-ref %outputs "out"))
- (regdb (assoc-ref %build-inputs "wireless-regdb"))
- (target ,(%current-target-system)))
+ (regdb (assoc-ref %build-inputs "wireless-regdb")))
(list
- (string-append
- "CC=" (if target
- (string-append target "-gcc") "gcc"))
+ (string-append "CC=" ,(cc-for-target))
"V=1"
;; Disable signature-checking on 'regulatory.bin'.
@@ -7040,12 +7034,8 @@ system boot process.")
`(#:tests? #f ; there are no tests
#:make-flags
(let ((prefix-dir (lambda (var dir)
- (string-append var "=" %output "/" dir)))
- (target ,(%current-target-system)))
- (list (string-append "CC="
- (if target
- (string-append target "-gcc")
- "gcc"))
+ (string-append var "=" %output "/" dir))))
+ (list (string-append "CC=" ,(cc-for-target))
(prefix-dir "SBINDIR" "sbin/")
(prefix-dir "ETCDIR" "etc/")
(prefix-dir "MANDIR" "share/man/")))
diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm
index fa0b22cd9c..a19ec44026 100644
--- a/gnu/packages/mail.scm
+++ b/gnu/packages/mail.scm
@@ -2697,10 +2697,7 @@ operators and scripters.")
(build-system gnu-build-system)
(arguments
`(#:make-flags
- (let ((target ,(%current-target-system)))
- (list (string-append "CC=" (if target
- (string-append target "-gcc")
- "gcc"))))
+ (list (string-append "CC=" ,(cc-for-target)))
#:configure-flags (list (string-append "--with-ssl-include-dir="
(assoc-ref %build-inputs "openssl")
"/include/openssl")
diff --git a/gnu/packages/music.scm b/gnu/packages/music.scm
index 89edcae43e..9f75d32fa6 100644
--- a/gnu/packages/music.scm
+++ b/gnu/packages/music.scm
@@ -4886,11 +4886,7 @@ and reverb.")
(arguments
`(#:make-flags
(list
- (string-append "CC="
- (if ,(%current-target-system)
- (string-append (assoc-ref %build-inputs "cross-gcc")
- "/bin/" ,(%current-target-system) "-gcc")
- "gcc"))
+ (string-append "CC=" ,(cc-for-target))
"BUILD_MODULES=\"lv2 ladspa jack\"" "VST_UI=0"
(string-append "PREFIX=" (assoc-ref %outputs "out"))
(string-append "ETC_PATH=" (assoc-ref %outputs "out") "/etc"))
diff --git a/gnu/packages/radio.scm b/gnu/packages/radio.scm
index f5dbbf7838..2b27d03cb4 100644
--- a/gnu/packages/radio.scm
+++ b/gnu/packages/radio.scm
@@ -1017,11 +1017,8 @@ gain and standing wave ratio.")
(arguments
`(#:test-target "test"
#:make-flags
- (let ((target ,(%current-target-system)))
- (list (string-append "CC=" (if target
- (string-append target "-gcc")
- "gcc"))
- "BLADERF=no"))
+ (list (string-append "CC=" ,(cc-for-target))
+ "BLADERF=no")
#:phases
(modify-phases %standard-phases
(delete 'configure)
diff --git a/gnu/packages/suckless.scm b/gnu/packages/suckless.scm
index 5cabb40eb0..bb21c13ad0 100644
--- a/gnu/packages/suckless.scm
+++ b/gnu/packages/suckless.scm
@@ -46,6 +46,7 @@
#:use-module (guix download)
#:use-module (guix git-download)
#:use-module ((guix licenses) #:prefix license:)
+ #:use-module (guix utils)
#:use-module (guix packages))
(define-public blind
@@ -62,12 +63,8 @@
(build-system gnu-build-system)
(arguments
`(#:tests? #f ; no check target
- #:make-flags
- (let ((target ,(%current-target-system)))
- (list (string-append "CC=" (if target
- (string-append target "-gcc")
- "gcc"))
- (string-append "PREFIX=" %output)))
+ #:make-flags (list (string-append "CC=" ,(cc-for-target))
+ (string-append "PREFIX=" %output))
#:phases
(modify-phases %standard-phases
(delete 'configure)))) ; no configure script
@@ -152,14 +149,11 @@ optimising the environment for the application in use and the task performed.")
(arguments
`(#:tests? #f ; no tests
#:make-flags
- (let ((target ,(%current-target-system)))
- (list (string-append "CC=" (if target
- (string-append target "-gcc")
- "gcc"))
- (string-append "PREFIX=" %output)
- (string-append "FREETYPEINC="
- (assoc-ref %build-inputs "freetype")
- "/include/freetype2")))
+ (list (string-append "CC=" ,(cc-for-target))
+ (string-append "PREFIX=" %output)
+ (string-append "FREETYPEINC="
+ (assoc-ref %build-inputs "freetype")
+ "/include/freetype2"))
#:phases
(modify-phases %standard-phases (delete 'configure))))
(inputs
@@ -190,11 +184,8 @@ numbers of user-defined menu items efficiently.")
(arguments
`(#:tests? #f ; no tests
#:make-flags
- (let ((target ,(%current-target-system)))
- (list (string-append "CC=" (if target
- (string-append target "-gcc")
- "gcc"))
- (string-append "PREFIX=" %output)))))
+ (list (string-append "CC=" ,(cc-for-target))
+ (string-append "PREFIX=" %output))))
(inputs
`(("libx11" ,libx11)
("libxkbfile" ,libxkbfile)
@@ -221,11 +212,8 @@ numbers of user-defined menu items efficiently.")
(arguments
`(#:tests? #f ; no tests
#:make-flags
- (let ((target ,(%current-target-system)))
- (list (string-append "CC=" (if target
- (string-append target "-gcc")
- "gcc"))
- (string-append "PREFIX=" %output)))
+ (list (string-append "CC=" ,(cc-for-target)
+ (string-append "PREFIX=" %output)))
#:phases (modify-phases %standard-phases (delete 'configure))))
(inputs
`(("libx11" ,libx11)
@@ -253,11 +241,8 @@ numbers of user-defined menu items efficiently.")
(arguments
`(#:tests? #f ; no tests
#:make-flags
- (let ((target ,(%current-target-system)))
- (list (string-append "CC=" (if target
- (string-append target "-gcc")
- "gcc"))
- (string-append "PREFIX=" %output)))
+ (list (string-append "CC=" ,(cc-for-target))
+ (string-append "PREFIX=" %output))
#:phases
(modify-phases %standard-phases
(delete 'configure)
@@ -298,11 +283,8 @@ drawing.")
(arguments
`(#:tests? #f ; no tests
#:make-flags
- (let ((target ,(%current-target-system)))
- (list (string-append "CC=" (if target
- (string-append target "-gcc")
- "gcc"))
- (string-append "PREFIX=" %output)))
+ (list (string-append "CC=" ,(cc-for-target))
+ (string-append "PREFIX=" %output))
#:phases
(modify-phases %standard-phases
(delete 'configure)
@@ -347,14 +329,11 @@ point surf to another URI by setting its XProperties.")
(delete 'configure)) ; no configuration
#:tests? #f ; no test suite
#:make-flags
- (let ((target ,(%current-target-system))
- (pkg-config (lambda (flag)
+ (let ((pkg-config (lambda (flag)
(string-append
"$(shell pkg-config " flag " "
"xft fontconfig x11 libpng)"))))
- (list (string-append "CC=" (if target
- (string-append target "-gcc")
- "gcc"))
+ (list (string-append "CC=" ,(cc-for-target))
(string-append "PREFIX=" %output)
(string-append "INCS=-I. " (pkg-config "--cflags"))
(string-append "LIBS=" (pkg-config "--libs") " -lm")))))
@@ -390,11 +369,8 @@ few minutes.")
(arguments
`(#:tests? #f ; no tests
#:make-flags
- (let ((target ,(%current-target-system)))
- (list (string-append "CC=" (if target
- (string-append target "-gcc")
- "gcc"))
- (string-append "PREFIX=" %output)))))
+ (list (string-append "CC=" ,(cc-for-target))
+ (string-append "PREFIX=" %output))))
(inputs
`(("libx11" ,libx11)))
(home-page "https://git.2f30.org/xbattmon/")
@@ -452,11 +428,8 @@ drivers capable of injecting packets in wireless networks.")
(arguments
`(#:tests? #f ; no tests
#:make-flags
- (let ((target ,(%current-target-system)))
- (list (string-append "CC=" (if target
- (string-append target "-gcc")
- "gcc"))
- (string-append "PREFIX=" %output)))
+ (list (string-append "CC=" ,(cc-for-target)
+ (string-append "PREFIX=" %output)))
#:phases
(modify-phases %standard-phases
(delete 'configure)))) ; no configure script
@@ -484,11 +457,8 @@ left.")
(arguments
`(#:tests? #f ; no tests
#:make-flags
- (let ((target ,(%current-target-system)))
- (list (string-append "CC=" (if target
- (string-append target "-gcc")
- "gcc"))
- (string-append "PREFIX=" %output)))
+ (list (string-append "CC=" ,(cc-for-target))
+ (string-append "PREFIX=" %output))
#:phases
(modify-phases %standard-phases
(delete 'configure)))) ; no configure script
@@ -514,11 +484,8 @@ left.")
(arguments
`(#:tests? #f ; no tests
#:make-flags
- (let ((target ,(%current-target-system)))
- (list (string-append "CC=" (if target
- (string-append target "-gcc")
- "gcc"))
- (string-append "PREFIX=" %output)))
+ (list (string-append "CC=" ,(cc-for-target))
+ (string-append "PREFIX=" %output))
#:phases
(modify-phases %standard-phases
(delete 'configure)))) ; no configure script
@@ -550,11 +517,8 @@ cups server to be installed.")
(arguments
`(#:tests? #f ; no tests
#:make-flags
- (let ((target ,(%current-target-system)))
- (list (string-append "CC=" (if target
- (string-append target "-gcc")
- "gcc"))
- (string-append "PREFIX=" %output)))
+ (list (string-append "CC=" ,(cc-for-target))
+ (string-append "PREFIX=" %output))
#:phases
(modify-phases %standard-phases
(delete 'configure) ; no configure script
@@ -588,11 +552,8 @@ cups server to be installed.")
(arguments
`(#:tests? #f ; no tests
#:make-flags
- (let ((target ,(%current-target-system)))
- (list (string-append "CC=" (if target
- (string-append target "-gcc")
- "gcc"))
- (string-append "PREFIX=" %output)))
+ (list (string-append "CC=" ,(cc-for-target))
+ (string-append "PREFIX=" %output))
#:phases
(modify-phases %standard-phases
(delete 'configure)))) ; no configure script
@@ -621,11 +582,8 @@ environment variable.")
(arguments
`(#:tests? #f ; no tests
#:make-flags
- (let ((target ,(%current-target-system)))
- (list (string-append "CC=" (if target
- (string-append target "-gcc")
- "gcc"))
- (string-append "PREFIX=" %output)))
+ (list (string-append "CC=" ,(cc-for-target))
+ (string-append "PREFIX=" %output))
#:phases
(modify-phases %standard-phases
(delete 'configure)))) ; no configure script
@@ -666,11 +624,8 @@ initially intended to be used on musl-based Linux distributions.
(arguments
`(#:tests? #f ; no tests
#:make-flags
- (let ((target ,(%current-target-system)))
- (list (string-append "CC=" (if target
- (string-append target "-gcc")
- "gcc"))
- (string-append "PREFIX=" %output)))
+ (list (string-append "CC=" ,(cc-for-target))
+ (string-append "PREFIX=" %output))
#:phases
(modify-phases %standard-phases
(delete 'configure)))) ; no configure script
@@ -707,11 +662,8 @@ colormap to stdout.")
(arguments
`(#:tests? #f ; no tests
#:make-flags
- (let ((target ,(%current-target-system)))
- (list (string-append "CC=" (if target
- (string-append target "-gcc")
- "gcc"))
- (string-append "PREFIX=" %output)))
+ (list (string-append "CC=" ,(cc-for-target))
+ (string-append "PREFIX=" %output))
#:phases
(modify-phases %standard-phases
(delete 'configure)))) ; no configure script
@@ -756,11 +708,8 @@ as -1, to be used instead of U+FFFD.
(arguments
`(#:test-target "test"
#:make-flags
- (let ((target ,(%current-target-system)))
- (list (string-append "CC=" (if target
- (string-append target "-gcc")
- "gcc"))
- (string-append "PREFIX=" %output)))
+ (list (string-append "CC=" ,(cc-for-target))
+ (string-append "PREFIX=" %output))
#:phases
(modify-phases %standard-phases
(delete 'configure) ; no configure script
@@ -805,11 +754,8 @@ chat output in the background.")
(arguments
`(#:tests? #f ; no tests
#:make-flags
- (let ((target ,(%current-target-system)))
- (list (string-append "CC=" (if target
- (string-append target "-gcc")
- "gcc"))
- (string-append "PREFIX=" %output)))
+ (list (string-append "CC=" ,(cc-for-target))
+ (string-append "PREFIX=" %output))
#:phases
(modify-phases %standard-phases
(delete 'configure)))) ; no configure script
--
2.26.2
T
T
Tobias Geerinckx-Rice wrote on 28 May 2020 20:04
Re: [bug#41579] [PATCH 1/2] utils: Add 'cc-for-target'.
(name . Marius Bakke)(address . marius@gnu.org)(address . 41579@debbugs.gnu.org)
87367k3phu.fsf@nckx
Marius,

Marius Bakke ???
Toggle quote (2 lines)
> * guix/utils.scm (cc-for-target): New procedure.

Yes please!

I didn't review the package changes but know in my heart that
you've tested them all.

Kind regards,

T G-R
-----BEGIN PGP SIGNATURE-----

iHUEARYKAB0WIQT12iAyS4c9C3o4dnINsP+IT1VteQUCXs/9LQAKCRANsP+IT1Vt
eTktAP9AqVczZBKx2MVGTWfNOAEHLaecIFRrxEl3Djp8dHSJqgEAsra42kw2ZoNF
8lHSZ4lvXFg46B6IPMBS2VHRQnCSwQY=
=g8TS
-----END PGP SIGNATURE-----

M
M
Mathieu Othacehe wrote on 28 May 2020 20:43
Re: [bug#41579] [PATCH 0/2] Introduce 'cc-for-target'.
(name . Marius Bakke)(address . marius@gnu.org)(address . 41579@debbugs.gnu.org)
87eer3zyqn.fsf@gnu.org
Hello Marius,

Toggle quote (7 lines)
> To reduce duplication, the following patch introduces a 'cc-for-target'
> procedure, so one can instead do:
>
> (string-append "CC=" ,(cc-for-target))
>
> ...and it will DTRT.

This is definitely a nice improvement! Sometimes the issue also extends
to AR and LD for instance.

This has been discussed here[1]. Maybe we should deal with that directly
in the build system, and provide suitable default values for CC, AR, LD
& friends, when cross-compiling.

Anyway, your patch is already a big improvement and it LGTM.

Thanks,

Mathieu

M
M
Marius Bakke wrote on 29 May 2020 15:58
(name . Mathieu Othacehe)(address . othacehe@gnu.org)(address . 41579-done@debbugs.gnu.org)
87o8q64zcx.fsf@gnu.org
Mathieu Othacehe <othacehe@gnu.org> writes:

Toggle quote (16 lines)
> Hello Marius,
>
>> To reduce duplication, the following patch introduces a 'cc-for-target'
>> procedure, so one can instead do:
>>
>> (string-append "CC=" ,(cc-for-target))
>>
>> ...and it will DTRT.
>
> This is definitely a nice improvement! Sometimes the issue also extends
> to AR and LD for instance.
>
> This has been discussed here[1]. Maybe we should deal with that directly
> in the build system, and provide suitable default values for CC, AR, LD
> & friends, when cross-compiling.

That makes sense. Can't think of any cases where setting these would
have an adverse effect, though I'm sure plenty of stuff will break. ;-)

Toggle quote (2 lines)
> Anyway, your patch is already a big improvement and it LGTM.

Thanks for checking, pushed!
-----BEGIN PGP SIGNATURE-----

iQEzBAEBCgAdFiEEu7At3yzq9qgNHeZDoqBt8qM6VPoFAl7RFP4ACgkQoqBt8qM6
VPqudQf/ayvm/6A+MAbs9SJ5+dBWyi8G4m5ddGQ/lhZMY/l0n8J54x6Yz1LxEIzg
/EMu4XpSgxIyhmNZsow8k+4jK7d0LBq8zkefmxj3/t6+oNu2tKiqYBnsip46GZ5M
V3vNYGGrDCiHjw442jih7HQDNGtibXYnnTA9QJ5chiMwG+gWasCPomoQJDPuFK8H
LWEb74ZgvLKv7pXj53HTtqYRnvj1oa7leZN7gXaKez11MYexxpIS9B+Sg4V3fBAi
U9xmrD2x8u6lfYQU1YhdzC7KiuNviQozaSy//pg+goWd3PnEhD/POVm0bCbwVNoc
/zaiHR/3UC3wYqu1idbOX0Az+Ft+0A==
=Usjt
-----END PGP SIGNATURE-----

Closed
?
Your comment

This issue is archived.

To comment on this conversation send an email to 41579@debbugs.gnu.org

To respond to this issue using the mumi CLI, first switch to it
mumi current 41579
Then, you may apply the latest patchset in this issue (with sign off)
mumi am -- -s
Or, compose a reply to this issue
mumi compose
Or, send patches to this issue
mumi send-email *.patch