diff --git a/guix/transformations.scm b/guix/transformations.scm index 92d9c89c0e..0665f33178 100644 --- a/guix/transformations.scm +++ b/guix/transformations.scm @@ -441,6 +441,9 @@ (define tuning-compiler #~(begin (use-modules (ice-9 match)) + (define psabi #$(gcc-architecture->micro-architecture-level + micro-architecture)) + (define* (search-next command #:optional (path (string-split (getenv "PATH") @@ -469,10 +472,25 @@ (define tuning-compiler (match (search-next (basename command)) (#f (exit 127)) (next - (apply execl next + (if (and (search-next "go") + (string=? next (search-next "go"))) + (cond + ((string-prefix? "arm" psabi) + (setenv "GOARM" (string-take-right psabi 1))) + ((string-prefix? "powerpc" psabi) + (setenv "GOPPC64" psabi)) + ((string-prefix? "x86_64" psabi) + (setenv "GOAMD" (string-take-right psabi 2))) + (else #t)) + '()) + (apply + execl next (append (cons next arguments) + (if (and (search-next "go") + (string=? next (search-next "go"))) + '() (list (string-append "-march=" - #$micro-architecture)))))))))) + #$micro-architecture))))))))))) (define program (program-file (string-append "tuning-compiler-wrapper-" micro-architecture) @@ -489,7 +507,8 @@ (define tuning-compiler (for-each (lambda (program) (symlink #$program (string-append bin "/" program))) - '("cc" "gcc" "clang" "g++" "c++" "clang++"))))))) + '("cc" "gcc" "clang" "g++" "c++" "clang++" + "go"))))))) (define (build-system-with-tuning-compiler bs micro-architecture) "Return a variant of BS, a build system, that ensures that the compiler that @@ -564,27 +583,31 @@ (define (build-system-with-tuning-compiler bs micro-architecture) (bag (inherit lowered) - (arguments + #;(arguments (substitute-keyword-arguments (bag-arguments lowered) ;; We add the tuning parameter after the default GO flags are set. ((#:phases phases '%standard-phases) - #~(modify-phases #$phases - (add-after 'setup-go-environment 'set-microarchitecture - (lambda _ - (cond - ((string-prefix? "arm" #$psabi) - (setenv "GOARM" (string-take-right #$psabi 1)) - (format #t "Setting GOARM to ~s." - (getenv "GOARM"))) - ((string-prefix? "powerpc" #$psabi) - (setenv "GOPPC64" #$psabi) - (format #t "Setting GOPPC64 to ~s." - (getenv "GOPPC64"))) - ((string-prefix? "x86_64" #$psabi) - (setenv "GOAMD" (string-take-right #$psabi 2)) - (format #t "Setting GOAMD to ~s.\n" - (getenv "GOAMD"))) - (else #t)))))))) + ;; This phase is only in the go-build-system. + #~(if (assoc-ref #$phases 'setup-go-environment) + (modify-phases #$phases + (replace 'setup-go-environment + (lambda* args + (apply (assoc-ref #$phases 'setup-go-environment) args) + (cond + ((string-prefix? "arm" #$psabi) + (setenv "GOARM" (string-take-right #$psabi 1)) + (format #t "Setting GOARM to ~s." + (getenv "GOARM"))) + ((string-prefix? "powerpc" #$psabi) + (setenv "GOPPC64" #$psabi) + (format #t "Setting GOPPC64 to ~s." + (getenv "GOPPC64"))) + ((string-prefix? "x86_64" #$psabi) + (setenv "GOAMD" (string-take-right #$psabi 2)) + (format #t "Setting GOAMD to ~s.\n" + (getenv "GOAMD"))) + (else #t))))) + #$phases)))) (build-inputs ;; Arrange so that the compiler wrapper comes first in $PATH. `(("tuning-compiler" ,(tuning-compiler micro-architecture))