[PATCH] gnu: Use gexps for gcc-boot0 and related packages.

  • Done
  • quality assurance status badge
Details
2 participants
  • Ludovic Courtès
  • Christopher Baines
Owner
unassigned
Submitted by
Christopher Baines
Severity
normal
C
C
Christopher Baines wrote on 6 May 2023 15:22
(address . guix-patches@gnu.org)
54e8a32abd9f31253787d5997dbed172d794024f.1683379349.git.mail@cbaines.net
There are currently problems with native or cross building for i586-gnu, and
one factor mixed up with this is that some of the gcc packages use sexp's for
the phases, and thus introducing gexp's has caused problems.

As part of the going in circles with this, this commit switches gcc-boot0 to
use gexp's in it's arguments, and then also modifies libstdc++-boot0,
cross-gcc-wrapper, gcc-final and make-libstdc++ to handle this change.

If done correctly, this change shouldn't affect any derivations.

* gnu/packages/commencement.scm (libstdc++-boot0, gcc-boot0,
gcc-final)[arguments]: Use gexps.
(cross-gcc-wrapper): Use gexps in the generated package.
* gnu/packages/gcc.scm (make-libstdc++): Use gexps in the generated package.
---
gnu/packages/commencement.scm | 377 +++++++++++++++++-----------------
gnu/packages/gcc.scm | 109 +++++-----
2 files changed, 245 insertions(+), 241 deletions(-)

Toggle diff (376 lines)
diff --git a/gnu/packages/commencement.scm b/gnu/packages/commencement.scm
index fc1c508b38..5e47b272e4 100644
--- a/gnu/packages/commencement.scm
+++ b/gnu/packages/commencement.scm
@@ -2259,13 +2259,13 @@ (define libstdc++-boot0
((or "i686-linux" "x86_64-linux")
(substitute-keyword-arguments (package-arguments lib)
((#:phases phases)
- `(modify-phases ,phases
- (add-after 'unpack 'workaround-wrapper-bug
- ;; XXX: The crude gcc-cross-wrapper causes "g++ -v" to
- ;; fail, which in turn confuses the configure script.
- (lambda _
- (substitute* "libstdc++-v3/configure"
- (("g\\+\\+ -v") "true"))))))))
+ #~(modify-phases #$phases
+ (add-after 'unpack 'workaround-wrapper-bug
+ ;; XXX: The crude gcc-cross-wrapper causes "g++ -v" to
+ ;; fail, which in turn confuses the configure script.
+ (lambda _
+ (substitute* "libstdc++-v3/configure"
+ (("g\\+\\+ -v") "true"))))))))
(_ (package-arguments lib)))
;; Explicitly add #:modules so MAKE-LIBSTDC++ can be changed
@@ -2338,81 +2338,82 @@ (define gcc-boot0
(system* #$(file-append coreutils-boot0 "/bin/rm") "-rf"
"gcc/testsuite/go.test/test/fixedbugs/issue27836.dir"))))))
(arguments
- `(#:guile ,%bootstrap-guile
- #:implicit-inputs? #f
- #:modules ((guix build gnu-build-system)
+ (cons*
+ #:guile %bootstrap-guile
+ #:implicit-inputs? #f
+ #:modules '((guix build gnu-build-system)
(guix build utils)
(ice-9 regex)
(srfi srfi-1)
(srfi srfi-26))
- ,@(substitute-keyword-arguments (package-arguments gcc)
- ((#:configure-flags flags)
- `(append (list ,(string-append "--target=" (boot-triplet))
-
- ;; No libc yet.
- "--without-headers"
-
- ;; Disable features not needed at this stage.
- "--disable-shared"
- "--enable-languages=c,c++"
-
- ;; libstdc++ cannot be built at this stage
- ;; ("Link tests are not allowed after
- ;; GCC_NO_EXECUTABLES.").
- "--disable-libstdc++-v3"
-
- "--disable-threads"
- "--disable-libmudflap"
- "--disable-libatomic"
- "--disable-libsanitizer"
- "--disable-libitm"
- "--disable-libgomp"
- "--disable-libmpx"
- "--disable-libcilkrts"
- "--disable-libvtv"
- "--disable-libssp"
- "--disable-libquadmath"
- "--disable-decimal-float")
- (remove (cut string-match
- "--(with-system-zlib|enable-languages.*)" <>)
- ,flags)))
- ((#:make-flags flags)
- `(let* ((libc (assoc-ref %build-inputs "libc"))
- (libc-native (or (assoc-ref %build-inputs "libc-native")
- libc)))
- `(,(string-append "LDFLAGS="
- "-Wl,-rpath=" libc-native "/lib "
- "-Wl,-dynamic-linker "
- "-Wl," libc-native ,(glibc-dynamic-linker
- (match (%current-system)
- ("x86_64-linux" "i686-linux")
- (_ (%current-system))))))))
- ((#:phases phases)
- `(modify-phases ,phases
- (add-after 'unpack 'unpack-gmp&co
- (lambda* (#:key inputs #:allow-other-keys)
- (let ((gmp (assoc-ref %build-inputs "gmp-source"))
- (mpfr (assoc-ref %build-inputs "mpfr-source"))
- (mpc (assoc-ref %build-inputs "mpc-source")))
-
- ;; To reduce the set of pre-built bootstrap inputs, build
- ;; GMP & co. from GCC.
- (for-each (lambda (source)
- (invoke "tar" "xvf" source))
- (list gmp mpfr mpc))
-
- ;; Create symlinks like `gmp' -> `gmp-x.y.z'.
- ,@(map (lambda (lib)
- ;; Drop trailing letters, as gmp-6.0.0a unpacks
- ;; into gmp-6.0.0.
- `(symlink ,(string-trim-right
- (package-full-name lib "-")
- char-set:letter)
- ,(package-name lib)))
- (list gmp-6.0 mpfr mpc)))))
- ,(match (%current-system)
- ((or "i686-linux" "x86_64-linux")
- '(add-before 'configure 'fix-libcc1
+ (substitute-keyword-arguments (package-arguments gcc)
+ ((#:configure-flags flags)
+ #~(append (list #$(string-append "--target=" (boot-triplet))
+
+ ;; No libc yet.
+ "--without-headers"
+
+ ;; Disable features not needed at this stage.
+ "--disable-shared"
+ "--enable-languages=c,c++"
+
+ ;; libstdc++ cannot be built at this stage
+ ;; ("Link tests are not allowed after
+ ;; GCC_NO_EXECUTABLES.").
+ "--disable-libstdc++-v3"
+
+ "--disable-threads"
+ "--disable-libmudflap"
+ "--disable-libatomic"
+ "--disable-libsanitizer"
+ "--disable-libitm"
+ "--disable-libgomp"
+ "--disable-libmpx"
+ "--disable-libcilkrts"
+ "--disable-libvtv"
+ "--disable-libssp"
+ "--disable-libquadmath"
+ "--disable-decimal-float")
+ (remove (cut string-match
+ "--(with-system-zlib|enable-languages.*)" <>)
+ #$flags)))
+ ((#:make-flags flags)
+ `(let* ((libc (assoc-ref %build-inputs "libc"))
+ (libc-native (or (assoc-ref %build-inputs "libc-native")
+ libc)))
+ `(,(string-append "LDFLAGS="
+ "-Wl,-rpath=" libc-native "/lib "
+ "-Wl,-dynamic-linker "
+ "-Wl," libc-native ,(glibc-dynamic-linker
+ (match (%current-system)
+ ("x86_64-linux" "i686-linux")
+ (_ (%current-system))))))))
+ ((#:phases phases)
+ #~(modify-phases #$phases
+ (add-after 'unpack 'unpack-gmp&co
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let ((gmp (assoc-ref %build-inputs "gmp-source"))
+ (mpfr (assoc-ref %build-inputs "mpfr-source"))
+ (mpc (assoc-ref %build-inputs "mpc-source")))
+
+ ;; To reduce the set of pre-built bootstrap inputs, build
+ ;; GMP & co. from GCC.
+ (for-each (lambda (source)
+ (invoke "tar" "xvf" source))
+ (list gmp mpfr mpc))
+
+ ;; Create symlinks like `gmp' -> `gmp-x.y.z'.
+ #$@(map (lambda (lib)
+ ;; Drop trailing letters, as gmp-6.0.0a unpacks
+ ;; into gmp-6.0.0.
+ #~(symlink #$(string-trim-right
+ (package-full-name lib "-")
+ char-set:letter)
+ #$(package-name lib)))
+ (list gmp-6.0 mpfr mpc)))))
+ #$(match (%current-system)
+ ((or "i686-linux" "x86_64-linux")
+ #~(add-before 'configure 'fix-libcc1
(lambda* (#:key inputs #:allow-other-keys)
;; libcc1.so NEEDs libgcc_s.so, so provide one here
;; to placate the 'validate-runpath' phase.
@@ -2423,18 +2424,18 @@ (define gcc-boot0
;; XXX: "g++ -v" is broken (see also libstdc++ above).
(substitute* "libcc1/configure"
(("g\\+\\+ -v") "true")))))
- (_ '(add-before 'configure 'return-true
+ (_ #~(add-before 'configure 'return-true
(lambda _ #t))))
- (add-after 'install 'symlink-libgcc_eh
- (lambda* (#:key outputs #:allow-other-keys)
- (let ((out (assoc-ref outputs "lib")))
- ;; Glibc wants to link against libgcc_eh, so provide
- ;; it.
- (with-directory-excursion
- (string-append out "/lib/gcc/"
- ,(boot-triplet)
- "/" ,(package-version gcc))
- (symlink "libgcc.a" "libgcc_eh.a"))))))))))
+ (add-after 'install 'symlink-libgcc_eh
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let ((out (assoc-ref outputs "lib")))
+ ;; Glibc wants to link against libgcc_eh, so provide
+ ;; it.
+ (with-directory-excursion
+ (string-append out "/lib/gcc/"
+ #$(boot-triplet)
+ "/" #$(package-version gcc))
+ (symlink "libgcc.a" "libgcc_eh.a"))))))))))
(inputs `(("gmp-source" ,(bootstrap-origin (package-source gmp-6.0)))
("mpfr-source" ,(bootstrap-origin (package-source mpfr)))
@@ -2888,41 +2889,42 @@ (define (cross-gcc-wrapper gcc binutils glibc bash)
(build-system trivial-build-system)
(outputs '("out"))
(arguments
- `(#:guile ,%bootstrap-guile
- #:modules ((guix build utils))
- #:builder (begin
- (use-modules (guix build utils))
-
- (let* ((binutils (assoc-ref %build-inputs "binutils"))
- (gcc (assoc-ref %build-inputs "gcc"))
- (libc (assoc-ref %build-inputs "libc"))
- (bash (assoc-ref %build-inputs "bash"))
- (out (assoc-ref %outputs "out"))
- (bindir (string-append out "/bin"))
- (triplet ,(boot-triplet)))
- (define (wrap-program program)
- ;; GCC-BOOT0 is a libc-less cross-compiler, so it
- ;; needs to be told where to find the crt files and
- ;; the dynamic linker.
- (call-with-output-file program
- (lambda (p)
- (format p "#!~a/bin/bash
+ (list
+ #:guile %bootstrap-guile
+ #:modules '((guix build utils))
+ #:builder #~(begin
+ (use-modules (guix build utils))
+
+ (let* ((binutils (assoc-ref %build-inputs "binutils"))
+ (gcc (assoc-ref %build-inputs "gcc"))
+ (libc (assoc-ref %build-inputs "libc"))
+ (bash (assoc-ref %build-inputs "bash"))
+ (out (assoc-ref %outputs "out"))
+ (bindir (string-append out "/bin"))
+ (triplet #$(boot-triplet)))
+ (define (wrap-program program)
+ ;; GCC-BOOT0 is a libc-less cross-compiler, so it
+ ;; needs to be told where to find the crt files and
+ ;; the dynamic linker.
+ (call-with-output-file program
+ (lambda (p)
+ (format p "#!~a/bin/bash
exec ~a/bin/~a-~a -B~a/lib -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%"
- bash
- gcc triplet program
- libc libc
- ,(glibc-dynamic-linker))))
-
- (chmod program #o555))
-
- (mkdir-p bindir)
- (with-directory-excursion bindir
- (for-each (lambda (tool)
- (symlink (string-append binutils "/bin/"
- triplet "-" tool)
- tool))
- '("ar" "ranlib"))
- (for-each wrap-program '("gcc" "g++")))))))
+ bash
+ gcc triplet program
+ libc libc
+ #$(glibc-dynamic-linker))))
+
+ (chmod program #o555))
+
+ (mkdir-p bindir)
+ (with-directory-excursion bindir
+ (for-each (lambda (tool)
+ (symlink (string-append binutils "/bin/"
+ triplet "-" tool)
+ tool))
+ '("ar" "ranlib"))
+ (for-each wrap-program '("gcc" "g++")))))))
(native-inputs
`(("binutils" ,binutils)
("gcc" ,gcc)
@@ -3122,79 +3124,80 @@ (define gcc-final
(outputs (delete "debug" (package-outputs gcc-boot0)))
(arguments
- `(#:guile ,%bootstrap-guile
- #:implicit-inputs? #f
+ (cons*
+ #:guile %bootstrap-guile
+ #:implicit-inputs? #f
- #:allowed-references ("out" "lib" ,zlib-final
+ #:allowed-references `("out" "lib" ,zlib-final
,glibc-final ,static-bash-for-glibc)
- ;; Things like libasan.so and libstdc++.so NEED ld.so for some
- ;; reason, but it is not in their RUNPATH. This is a false
- ;; positive, so turn it off.
- #:validate-runpath? #f
+ ;; Things like libasan.so and libstdc++.so NEED ld.so for some
+ ;; reason, but it is not in their RUNPATH. This is a false
+ ;; positive, so turn it off.
+ #:validate-runpath? #f
- ;; Additional modules for the libstdc++ phase below.
- #:modules ((srfi srfi-1)
+ ;; Additional modules for the libstdc++ phase below.
+ #:modules `((srfi srfi-1)
(srfi srfi-26)
,@%gnu-build-system-modules)
- ,@(substitute-keyword-arguments (package-arguments gcc)
- ((#:make-flags flags)
- ;; Since $LIBRARY_PATH is not honored, add the relevant flags.
- `(let ((zlib (assoc-ref %build-inputs "zlib")))
- (map (lambda (flag)
- (if (string-prefix? "LDFLAGS=" flag)
- (string-append flag " -L"
- (assoc-ref %build-inputs "libstdc++")
- "/lib -L" zlib "/lib -Wl,-rpath="
- zlib "/lib")
- flag))
- ,flags)))
- ;; Build again GMP & co. within GCC's build process, because it's hard
- ;; to do outside (because GCC-BOOT0 is a cross-compiler, and thus
- ;; doesn't honor $LIBRARY_PATH, which breaks `gnu-build-system'.)
- ((#:phases phases)
- `(modify-phases ,phases
- (add-after 'unpack 'unpack-gmp&co
- (lambda* (#:key inputs #:allow-other-keys)
- (let ((gmp (assoc-ref %build-inputs "gmp-source"))
- (mpfr (assoc-ref %build-inputs "mpfr-source"))
- (mpc (assoc-ref %build-inputs "mpc-source")))
-
- ;; To reduce the set of pre-built bootstrap inputs, build
- ;; GMP & co. from GCC.
- (for-each (lambda (source)
- (invoke "tar" "xvf" source))
- (list gmp mpfr mpc))
-
- ;; Create symlinks like `gmp' -> `gmp-x.y.z'.
- ,@(map (lambda (lib)
- ;; Drop trailing letters, as gmp-6.0.0a unpacks
- ;; into gmp-6.0.0.
- `(symlink ,(string-trim-right
+ (substitute-keyword-arguments (package-arguments gcc)
+ ((#:make-flags flags)
+ ;; Since $LIBRARY_PATH is not honored, add the relevant flags.
+ #~(let ((zlib (assoc-ref %build-inputs "zlib")))
+ (map (lambda (flag)
+ (if (string-prefix? "LDFLAGS=" flag)
+ (string-append flag " -L"
+ (assoc-ref %build-inputs "libstdc++")
+ "/lib -L" zlib "/lib -Wl,-rpath="
+ zlib "/lib")
+ flag))
+ #$flags)))
+ ;; Build again GMP & co. within GCC's build process, because it's hard
+ ;; to do outside (because GCC-BOOT0 is a cross-compiler, and thus
+ ;; doesn't honor $LIBRARY_PATH, which breaks `gnu-build-system'.)
+ ((#:phases phases)
+ #~(modify-phases #$phases
+ (add-after 'unpack 'unpack-gmp&co
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let ((gmp (assoc-ref %build-inputs "gmp-source"))
+ (mpfr (assoc-ref %build-inputs "mpfr-source"))
+ (mpc (assoc-ref %build-inputs "mpc-source")))
+
+ ;; To reduce the set of pre-built bootstrap inputs, build
+ ;; GMP & co. from GCC.
+
This message was truncated. Download the full message here.
C
C
Christopher Baines wrote on 6 May 2023 23:32
[PATCH v2] gnu: Use gexps for gcc-boot0 and related packages.
(address . 63329@debbugs.gnu.org)
7c5922aed25834bcc4cfd248a5107960f3700ae2.1683408750.git.mail@cbaines.net
There are currently problems with native or cross building for i586-gnu, and
one factor mixed up with this is that some of the gcc packages use sexp's for
the phases, and thus introducing gexp's has caused problems.

As part of the going in circles with this, this commit switches gcc-boot0 to
use gexp's in it's arguments, and then also modifies libstdc++-boot0,
libstdc++-boot0-gcc7, cross-gcc-wrapper, gcc-final and make-libstdc++ to
handle this change.

If done correctly, this change shouldn't affect any derivations.

* gnu/packages/commencement.scm (libstdc++-boot0, libstdc++-boot0-gcc7,
gcc-boot0, gcc-final)[arguments]: Use gexps.
(cross-gcc-wrapper): Use gexps in the generated package.
* gnu/packages/gcc.scm (make-libstdc++): Use gexps in the generated package.
---
gnu/packages/commencement.scm | 421 +++++++++++++++++-----------------
gnu/packages/gcc.scm | 109 ++++-----
2 files changed, 267 insertions(+), 263 deletions(-)

Toggle diff (373 lines)
diff --git a/gnu/packages/commencement.scm b/gnu/packages/commencement.scm
index fc1c508b38..c4b50ec2c4 100644
--- a/gnu/packages/commencement.scm
+++ b/gnu/packages/commencement.scm
@@ -2259,13 +2259,13 @@ (define libstdc++-boot0
((or "i686-linux" "x86_64-linux")
(substitute-keyword-arguments (package-arguments lib)
((#:phases phases)
- `(modify-phases ,phases
- (add-after 'unpack 'workaround-wrapper-bug
- ;; XXX: The crude gcc-cross-wrapper causes "g++ -v" to
- ;; fail, which in turn confuses the configure script.
- (lambda _
- (substitute* "libstdc++-v3/configure"
- (("g\\+\\+ -v") "true"))))))))
+ #~(modify-phases #$phases
+ (add-after 'unpack 'workaround-wrapper-bug
+ ;; XXX: The crude gcc-cross-wrapper causes "g++ -v" to
+ ;; fail, which in turn confuses the configure script.
+ (lambda _
+ (substitute* "libstdc++-v3/configure"
+ (("g\\+\\+ -v") "true"))))))))
(_ (package-arguments lib)))
;; Explicitly add #:modules so MAKE-LIBSTDC++ can be changed
@@ -2292,28 +2292,28 @@ (define libstdc++-boot0-gcc7
,@(substitute-keyword-arguments (package-arguments lib)
((#:phases phases)
- `(modify-phases ,phases
- (add-after 'unpack 'unpack-gmp&co
- (lambda* (#:key inputs #:allow-other-keys)
- (let ((gmp (assoc-ref %build-inputs "gmp-source"))
- (mpfr (assoc-ref %build-inputs "mpfr-source"))
- (mpc (assoc-ref %build-inputs "mpc-source")))
-
- ;; To reduce the set of pre-built bootstrap inputs, build
- ;; GMP & co. from GCC.
- (for-each (lambda (source)
- (invoke "tar" "xvf" source))
- (list gmp mpfr mpc))
-
- ;; Create symlinks like `gmp' -> `gmp-x.y.z'.
- ,@(map (lambda (lib)
- ;; Drop trailing letters, as gmp-6.0.0a unpacks
- ;; into gmp-6.0.0.
- `(symlink ,(string-trim-right
- (package-full-name lib "-")
- char-set:letter)
- ,(package-name lib)))
- (list gmp-6.0 mpfr mpc))))))))))
+ #~(modify-phases #$phases
+ (add-after 'unpack 'unpack-gmp&co
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let ((gmp (assoc-ref %build-inputs "gmp-source"))
+ (mpfr (assoc-ref %build-inputs "mpfr-source"))
+ (mpc (assoc-ref %build-inputs "mpc-source")))
+
+ ;; To reduce the set of pre-built bootstrap inputs, build
+ ;; GMP & co. from GCC.
+ (for-each (lambda (source)
+ (invoke "tar" "xvf" source))
+ (list gmp mpfr mpc))
+
+ ;; Create symlinks like `gmp' -> `gmp-x.y.z'.
+ #$@(map (lambda (lib)
+ ;; Drop trailing letters, as gmp-6.0.0a unpacks
+ ;; into gmp-6.0.0.
+ #~(symlink #$(string-trim-right
+ (package-full-name lib "-")
+ char-set:letter)
+ #$(package-name lib)))
+ (list gmp-6.0 mpfr mpc))))))))))
(inputs `(("gmp-source" ,(bootstrap-origin (package-source gmp-6.0)))
("mpfr-source" ,(bootstrap-origin (package-source mpfr)))
("mpc-source" ,(bootstrap-origin (package-source mpc)))
@@ -2338,81 +2338,82 @@ (define gcc-boot0
(system* #$(file-append coreutils-boot0 "/bin/rm") "-rf"
"gcc/testsuite/go.test/test/fixedbugs/issue27836.dir"))))))
(arguments
- `(#:guile ,%bootstrap-guile
- #:implicit-inputs? #f
- #:modules ((guix build gnu-build-system)
+ (cons*
+ #:guile %bootstrap-guile
+ #:implicit-inputs? #f
+ #:modules '((guix build gnu-build-system)
(guix build utils)
(ice-9 regex)
(srfi srfi-1)
(srfi srfi-26))
- ,@(substitute-keyword-arguments (package-arguments gcc)
- ((#:configure-flags flags)
- `(append (list ,(string-append "--target=" (boot-triplet))
-
- ;; No libc yet.
- "--without-headers"
-
- ;; Disable features not needed at this stage.
- "--disable-shared"
- "--enable-languages=c,c++"
-
- ;; libstdc++ cannot be built at this stage
- ;; ("Link tests are not allowed after
- ;; GCC_NO_EXECUTABLES.").
- "--disable-libstdc++-v3"
-
- "--disable-threads"
- "--disable-libmudflap"
- "--disable-libatomic"
- "--disable-libsanitizer"
- "--disable-libitm"
- "--disable-libgomp"
- "--disable-libmpx"
- "--disable-libcilkrts"
- "--disable-libvtv"
- "--disable-libssp"
- "--disable-libquadmath"
- "--disable-decimal-float")
- (remove (cut string-match
- "--(with-system-zlib|enable-languages.*)" <>)
- ,flags)))
- ((#:make-flags flags)
- `(let* ((libc (assoc-ref %build-inputs "libc"))
- (libc-native (or (assoc-ref %build-inputs "libc-native")
- libc)))
- `(,(string-append "LDFLAGS="
- "-Wl,-rpath=" libc-native "/lib "
- "-Wl,-dynamic-linker "
- "-Wl," libc-native ,(glibc-dynamic-linker
- (match (%current-system)
- ("x86_64-linux" "i686-linux")
- (_ (%current-system))))))))
- ((#:phases phases)
- `(modify-phases ,phases
- (add-after 'unpack 'unpack-gmp&co
- (lambda* (#:key inputs #:allow-other-keys)
- (let ((gmp (assoc-ref %build-inputs "gmp-source"))
- (mpfr (assoc-ref %build-inputs "mpfr-source"))
- (mpc (assoc-ref %build-inputs "mpc-source")))
-
- ;; To reduce the set of pre-built bootstrap inputs, build
- ;; GMP & co. from GCC.
- (for-each (lambda (source)
- (invoke "tar" "xvf" source))
- (list gmp mpfr mpc))
-
- ;; Create symlinks like `gmp' -> `gmp-x.y.z'.
- ,@(map (lambda (lib)
- ;; Drop trailing letters, as gmp-6.0.0a unpacks
- ;; into gmp-6.0.0.
- `(symlink ,(string-trim-right
- (package-full-name lib "-")
- char-set:letter)
- ,(package-name lib)))
- (list gmp-6.0 mpfr mpc)))))
- ,(match (%current-system)
- ((or "i686-linux" "x86_64-linux")
- '(add-before 'configure 'fix-libcc1
+ (substitute-keyword-arguments (package-arguments gcc)
+ ((#:configure-flags flags)
+ #~(append (list #$(string-append "--target=" (boot-triplet))
+
+ ;; No libc yet.
+ "--without-headers"
+
+ ;; Disable features not needed at this stage.
+ "--disable-shared"
+ "--enable-languages=c,c++"
+
+ ;; libstdc++ cannot be built at this stage
+ ;; ("Link tests are not allowed after
+ ;; GCC_NO_EXECUTABLES.").
+ "--disable-libstdc++-v3"
+
+ "--disable-threads"
+ "--disable-libmudflap"
+ "--disable-libatomic"
+ "--disable-libsanitizer"
+ "--disable-libitm"
+ "--disable-libgomp"
+ "--disable-libmpx"
+ "--disable-libcilkrts"
+ "--disable-libvtv"
+ "--disable-libssp"
+ "--disable-libquadmath"
+ "--disable-decimal-float")
+ (remove (cut string-match
+ "--(with-system-zlib|enable-languages.*)" <>)
+ #$flags)))
+ ((#:make-flags flags)
+ `(let* ((libc (assoc-ref %build-inputs "libc"))
+ (libc-native (or (assoc-ref %build-inputs "libc-native")
+ libc)))
+ `(,(string-append "LDFLAGS="
+ "-Wl,-rpath=" libc-native "/lib "
+ "-Wl,-dynamic-linker "
+ "-Wl," libc-native ,(glibc-dynamic-linker
+ (match (%current-system)
+ ("x86_64-linux" "i686-linux")
+ (_ (%current-system))))))))
+ ((#:phases phases)
+ #~(modify-phases #$phases
+ (add-after 'unpack 'unpack-gmp&co
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let ((gmp (assoc-ref %build-inputs "gmp-source"))
+ (mpfr (assoc-ref %build-inputs "mpfr-source"))
+ (mpc (assoc-ref %build-inputs "mpc-source")))
+
+ ;; To reduce the set of pre-built bootstrap inputs, build
+ ;; GMP & co. from GCC.
+ (for-each (lambda (source)
+ (invoke "tar" "xvf" source))
+ (list gmp mpfr mpc))
+
+ ;; Create symlinks like `gmp' -> `gmp-x.y.z'.
+ #$@(map (lambda (lib)
+ ;; Drop trailing letters, as gmp-6.0.0a unpacks
+ ;; into gmp-6.0.0.
+ #~(symlink #$(string-trim-right
+ (package-full-name lib "-")
+ char-set:letter)
+ #$(package-name lib)))
+ (list gmp-6.0 mpfr mpc)))))
+ #$(match (%current-system)
+ ((or "i686-linux" "x86_64-linux")
+ #~(add-before 'configure 'fix-libcc1
(lambda* (#:key inputs #:allow-other-keys)
;; libcc1.so NEEDs libgcc_s.so, so provide one here
;; to placate the 'validate-runpath' phase.
@@ -2423,18 +2424,18 @@ (define gcc-boot0
;; XXX: "g++ -v" is broken (see also libstdc++ above).
(substitute* "libcc1/configure"
(("g\\+\\+ -v") "true")))))
- (_ '(add-before 'configure 'return-true
+ (_ #~(add-before 'configure 'return-true
(lambda _ #t))))
- (add-after 'install 'symlink-libgcc_eh
- (lambda* (#:key outputs #:allow-other-keys)
- (let ((out (assoc-ref outputs "lib")))
- ;; Glibc wants to link against libgcc_eh, so provide
- ;; it.
- (with-directory-excursion
- (string-append out "/lib/gcc/"
- ,(boot-triplet)
- "/" ,(package-version gcc))
- (symlink "libgcc.a" "libgcc_eh.a"))))))))))
+ (add-after 'install 'symlink-libgcc_eh
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let ((out (assoc-ref outputs "lib")))
+ ;; Glibc wants to link against libgcc_eh, so provide
+ ;; it.
+ (with-directory-excursion
+ (string-append out "/lib/gcc/"
+ #$(boot-triplet)
+ "/" #$(package-version gcc))
+ (symlink "libgcc.a" "libgcc_eh.a"))))))))))
(inputs `(("gmp-source" ,(bootstrap-origin (package-source gmp-6.0)))
("mpfr-source" ,(bootstrap-origin (package-source mpfr)))
@@ -2888,41 +2889,42 @@ (define (cross-gcc-wrapper gcc binutils glibc bash)
(build-system trivial-build-system)
(outputs '("out"))
(arguments
- `(#:guile ,%bootstrap-guile
- #:modules ((guix build utils))
- #:builder (begin
- (use-modules (guix build utils))
-
- (let* ((binutils (assoc-ref %build-inputs "binutils"))
- (gcc (assoc-ref %build-inputs "gcc"))
- (libc (assoc-ref %build-inputs "libc"))
- (bash (assoc-ref %build-inputs "bash"))
- (out (assoc-ref %outputs "out"))
- (bindir (string-append out "/bin"))
- (triplet ,(boot-triplet)))
- (define (wrap-program program)
- ;; GCC-BOOT0 is a libc-less cross-compiler, so it
- ;; needs to be told where to find the crt files and
- ;; the dynamic linker.
- (call-with-output-file program
- (lambda (p)
- (format p "#!~a/bin/bash
+ (list
+ #:guile %bootstrap-guile
+ #:modules '((guix build utils))
+ #:builder #~(begin
+ (use-modules (guix build utils))
+
+ (let* ((binutils (assoc-ref %build-inputs "binutils"))
+ (gcc (assoc-ref %build-inputs "gcc"))
+ (libc (assoc-ref %build-inputs "libc"))
+ (bash (assoc-ref %build-inputs "bash"))
+ (out (assoc-ref %outputs "out"))
+ (bindir (string-append out "/bin"))
+ (triplet #$(boot-triplet)))
+ (define (wrap-program program)
+ ;; GCC-BOOT0 is a libc-less cross-compiler, so it
+ ;; needs to be told where to find the crt files and
+ ;; the dynamic linker.
+ (call-with-output-file program
+ (lambda (p)
+ (format p "#!~a/bin/bash
exec ~a/bin/~a-~a -B~a/lib -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%"
- bash
- gcc triplet program
- libc libc
- ,(glibc-dynamic-linker))))
-
- (chmod program #o555))
-
- (mkdir-p bindir)
- (with-directory-excursion bindir
- (for-each (lambda (tool)
- (symlink (string-append binutils "/bin/"
- triplet "-" tool)
- tool))
- '("ar" "ranlib"))
- (for-each wrap-program '("gcc" "g++")))))))
+ bash
+ gcc triplet program
+ libc libc
+ #$(glibc-dynamic-linker))))
+
+ (chmod program #o555))
+
+ (mkdir-p bindir)
+ (with-directory-excursion bindir
+ (for-each (lambda (tool)
+ (symlink (string-append binutils "/bin/"
+ triplet "-" tool)
+ tool))
+ '("ar" "ranlib"))
+ (for-each wrap-program '("gcc" "g++")))))))
(native-inputs
`(("binutils" ,binutils)
("gcc" ,gcc)
@@ -3122,79 +3124,80 @@ (define gcc-final
(outputs (delete "debug" (package-outputs gcc-boot0)))
(arguments
- `(#:guile ,%bootstrap-guile
- #:implicit-inputs? #f
+ (cons*
+ #:guile %bootstrap-guile
+ #:implicit-inputs? #f
- #:allowed-references ("out" "lib" ,zlib-final
+ #:allowed-references `("out" "lib" ,zlib-final
,glibc-final ,static-bash-for-glibc)
- ;; Things like libasan.so and libstdc++.so NEED ld.so for some
- ;; reason, but it is not in their RUNPATH. This is a false
- ;; positive, so turn it off.
- #:validate-runpath? #f
+ ;; Things like libasan.so and libstdc++.so NEED ld.so for some
+ ;; reason, but it is not in their RUNPATH. This is a false
+ ;; positive, so turn it off.
+ #:validate-runpath? #f
- ;; Additional modules for the libstdc++ phase below.
- #:modules ((srfi srfi-1)
+ ;; Additional modules for the libstdc++ phase below.
+ #:modules `((srfi srfi-1)
(srfi srfi-26)
,@%gnu-build-system-modules)
- ,@(substitute-keyword-arguments (package-arguments gcc)
- ((#:make-flags flags)
- ;; Since $LIBRARY_PATH is not honored, add the relevant flags.
- `(let ((zlib (assoc-ref %build-inputs "zlib")))
- (map (lambda (flag)
- (if (strin
This message was truncated. Download the full message here.
C
C
Christopher Baines wrote on 7 May 2023 10:39
(address . 63329-done@debbugs.gnu.org)
878re01qk1.fsf@cbaines.net
Christopher Baines <mail@cbaines.net> writes:

Toggle quote (20 lines)
> There are currently problems with native or cross building for i586-gnu, and
> one factor mixed up with this is that some of the gcc packages use sexp's for
> the phases, and thus introducing gexp's has caused problems.
>
> As part of the going in circles with this, this commit switches gcc-boot0 to
> use gexp's in it's arguments, and then also modifies libstdc++-boot0,
> libstdc++-boot0-gcc7, cross-gcc-wrapper, gcc-final and make-libstdc++ to
> handle this change.
>
> If done correctly, this change shouldn't affect any derivations.
>
> * gnu/packages/commencement.scm (libstdc++-boot0, libstdc++-boot0-gcc7,
> gcc-boot0, gcc-final)[arguments]: Use gexps.
> (cross-gcc-wrapper): Use gexps in the generated package.
> * gnu/packages/gcc.scm (make-libstdc++): Use gexps in the generated package.
> ---
> gnu/packages/commencement.scm | 421 +++++++++++++++++-----------------
> gnu/packages/gcc.scm | 109 ++++-----
> 2 files changed, 267 insertions(+), 263 deletions(-)

The data service didn't show any changes in derivations associated with
this change, so I've gone ahead and pushed it to master as
a795a02a9d988be5a762886620f7bb6a95e7ffdb.

It did show some changes, but they related to gexp's in the builder
script for icu4c-70 when built for riscv64. I fixed that in
b1e9ae7f0e72bc3c8c7ab28362315fac5dfb65fe.
-----BEGIN PGP SIGNATURE-----

iQKlBAEBCgCPFiEEPonu50WOcg2XVOCyXiijOwuE9XcFAmRXZE5fFIAAAAAALgAo
aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldDNF
ODlFRUU3NDU4RTcyMEQ5NzU0RTBCMjVFMjhBMzNCMEI4NEY1NzcRHG1haWxAY2Jh
aW5lcy5uZXQACgkQXiijOwuE9Xc0eA//eRaKz1cdrwgqHGaMovSGReEToiaW2+1q
9JermCv86rC/UFxh00thnqVUGmhoey+WxplPHUa86Mtj6J/1ZShIQ5SE/7Znebh3
IbwypGF35tg4t7Gu4M+hcWh23/IAqI0Qe9BK8jURA0xJC1eJU/5a3JS7LSFwY5Nt
IrdRqbN2ldVn7i34XtDRYUSBxfBFghugjtwWX+bDDZ/XRyh4jIHFdMlTB3Ku8c7l
SKh8eniyDgjz6xic1rgNB1tWCdtKwDkNIWDJabXssLnv0/ofumL5WFSUpSuTfGMX
npLC18V2foogEeEIu1c4KlmAQbpHw4btA5bcvdCX/pfFIVZ/g8acyv6aXpDnAo7G
ZZVpM9zPBC5ua5qHIPkQVJbhJQRfeCLeVqTEiQI9ri+KY0h9ZfecVh9dxyFN0tsp
yaaGOCbcsYtn3uthbgZpuYBbvo2esoWqFgmXmsRtIMCEzIwFEAAkKhF3+3PxbkiC
Ve2Q98//WHJepXfcA1fAzaZDl5Gc6wFof+yqoEFiJceLXHP+ky8MO46zHtA2N4KL
g3MvYvkABepu/JzRMpuDiwzcO2b0NKR6CSTTxxxI7JPjMkPzx9ga0YhKzyy7RUkT
Hy6tnRotK5JYy2EtmR+vUHOQAg/k5oRRQ4k8LEz+OKBz931G8LHTtGzi+oU7nyrw
PcVNAyQmALM=
=qQG3
-----END PGP SIGNATURE-----

Closed
L
L
Ludovic Courtès wrote on 7 May 2023 23:27
Re: bug#63329: [PATCH] gnu: Use gexps for gcc-boot0 and related packages.
(name . Christopher Baines)(address . mail@cbaines.net)(address . 63329@debbugs.gnu.org)
87y1lzg7cq.fsf_-_@gnu.org
Hi,

Christopher Baines <mail@cbaines.net> skribis:

Toggle quote (16 lines)
> There are currently problems with native or cross building for i586-gnu, and
> one factor mixed up with this is that some of the gcc packages use sexp's for
> the phases, and thus introducing gexp's has caused problems.
>
> As part of the going in circles with this, this commit switches gcc-boot0 to
> use gexp's in it's arguments, and then also modifies libstdc++-boot0,
> libstdc++-boot0-gcc7, cross-gcc-wrapper, gcc-final and make-libstdc++ to
> handle this change.
>
> If done correctly, this change shouldn't affect any derivations.
>
> * gnu/packages/commencement.scm (libstdc++-boot0, libstdc++-boot0-gcc7,
> gcc-boot0, gcc-final)[arguments]: Use gexps.
> (cross-gcc-wrapper): Use gexps in the generated package.
> * gnu/packages/gcc.scm (make-libstdc++): Use gexps in the generated package.

I’m late to the party, but I think it goes in the right direction.
Thank you!

Ludo’.
?
Your comment

This issue is archived.

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

To respond to this issue using the mumi CLI, first switch to it
mumi current 63329
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