gnu: Use gexps for gcc-boot0 and related packages.
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.
This commit is contained in:
parent
211ea54122
commit
a795a02a9d
2 changed files with 253 additions and 249 deletions
|
@ -2259,13 +2259,13 @@ exec " gcc "/bin/" program
|
||||||
((or "i686-linux" "x86_64-linux")
|
((or "i686-linux" "x86_64-linux")
|
||||||
(substitute-keyword-arguments (package-arguments lib)
|
(substitute-keyword-arguments (package-arguments lib)
|
||||||
((#:phases phases)
|
((#:phases phases)
|
||||||
`(modify-phases ,phases
|
#~(modify-phases #$phases
|
||||||
(add-after 'unpack 'workaround-wrapper-bug
|
(add-after 'unpack 'workaround-wrapper-bug
|
||||||
;; XXX: The crude gcc-cross-wrapper causes "g++ -v" to
|
;; XXX: The crude gcc-cross-wrapper causes "g++ -v" to
|
||||||
;; fail, which in turn confuses the configure script.
|
;; fail, which in turn confuses the configure script.
|
||||||
(lambda _
|
(lambda _
|
||||||
(substitute* "libstdc++-v3/configure"
|
(substitute* "libstdc++-v3/configure"
|
||||||
(("g\\+\\+ -v") "true"))))))))
|
(("g\\+\\+ -v") "true"))))))))
|
||||||
(_ (package-arguments lib)))
|
(_ (package-arguments lib)))
|
||||||
|
|
||||||
;; Explicitly add #:modules so MAKE-LIBSTDC++ can be changed
|
;; Explicitly add #:modules so MAKE-LIBSTDC++ can be changed
|
||||||
|
@ -2292,28 +2292,28 @@ exec " gcc "/bin/" program
|
||||||
|
|
||||||
,@(substitute-keyword-arguments (package-arguments lib)
|
,@(substitute-keyword-arguments (package-arguments lib)
|
||||||
((#:phases phases)
|
((#:phases phases)
|
||||||
`(modify-phases ,phases
|
#~(modify-phases #$phases
|
||||||
(add-after 'unpack 'unpack-gmp&co
|
(add-after 'unpack 'unpack-gmp&co
|
||||||
(lambda* (#:key inputs #:allow-other-keys)
|
(lambda* (#:key inputs #:allow-other-keys)
|
||||||
(let ((gmp (assoc-ref %build-inputs "gmp-source"))
|
(let ((gmp (assoc-ref %build-inputs "gmp-source"))
|
||||||
(mpfr (assoc-ref %build-inputs "mpfr-source"))
|
(mpfr (assoc-ref %build-inputs "mpfr-source"))
|
||||||
(mpc (assoc-ref %build-inputs "mpc-source")))
|
(mpc (assoc-ref %build-inputs "mpc-source")))
|
||||||
|
|
||||||
;; To reduce the set of pre-built bootstrap inputs, build
|
;; To reduce the set of pre-built bootstrap inputs, build
|
||||||
;; GMP & co. from GCC.
|
;; GMP & co. from GCC.
|
||||||
(for-each (lambda (source)
|
(for-each (lambda (source)
|
||||||
(invoke "tar" "xvf" source))
|
(invoke "tar" "xvf" source))
|
||||||
(list gmp mpfr mpc))
|
(list gmp mpfr mpc))
|
||||||
|
|
||||||
;; Create symlinks like `gmp' -> `gmp-x.y.z'.
|
;; Create symlinks like `gmp' -> `gmp-x.y.z'.
|
||||||
,@(map (lambda (lib)
|
#$@(map (lambda (lib)
|
||||||
;; Drop trailing letters, as gmp-6.0.0a unpacks
|
;; Drop trailing letters, as gmp-6.0.0a unpacks
|
||||||
;; into gmp-6.0.0.
|
;; into gmp-6.0.0.
|
||||||
`(symlink ,(string-trim-right
|
#~(symlink #$(string-trim-right
|
||||||
(package-full-name lib "-")
|
(package-full-name lib "-")
|
||||||
char-set:letter)
|
char-set:letter)
|
||||||
,(package-name lib)))
|
#$(package-name lib)))
|
||||||
(list gmp-6.0 mpfr mpc))))))))))
|
(list gmp-6.0 mpfr mpc))))))))))
|
||||||
(inputs `(("gmp-source" ,(bootstrap-origin (package-source gmp-6.0)))
|
(inputs `(("gmp-source" ,(bootstrap-origin (package-source gmp-6.0)))
|
||||||
("mpfr-source" ,(bootstrap-origin (package-source mpfr)))
|
("mpfr-source" ,(bootstrap-origin (package-source mpfr)))
|
||||||
("mpc-source" ,(bootstrap-origin (package-source mpc)))
|
("mpc-source" ,(bootstrap-origin (package-source mpc)))
|
||||||
|
@ -2338,81 +2338,82 @@ exec " gcc "/bin/" program
|
||||||
(system* #$(file-append coreutils-boot0 "/bin/rm") "-rf"
|
(system* #$(file-append coreutils-boot0 "/bin/rm") "-rf"
|
||||||
"gcc/testsuite/go.test/test/fixedbugs/issue27836.dir"))))))
|
"gcc/testsuite/go.test/test/fixedbugs/issue27836.dir"))))))
|
||||||
(arguments
|
(arguments
|
||||||
`(#:guile ,%bootstrap-guile
|
(cons*
|
||||||
#:implicit-inputs? #f
|
#:guile %bootstrap-guile
|
||||||
#:modules ((guix build gnu-build-system)
|
#:implicit-inputs? #f
|
||||||
|
#:modules '((guix build gnu-build-system)
|
||||||
(guix build utils)
|
(guix build utils)
|
||||||
(ice-9 regex)
|
(ice-9 regex)
|
||||||
(srfi srfi-1)
|
(srfi srfi-1)
|
||||||
(srfi srfi-26))
|
(srfi srfi-26))
|
||||||
,@(substitute-keyword-arguments (package-arguments gcc)
|
(substitute-keyword-arguments (package-arguments gcc)
|
||||||
((#:configure-flags flags)
|
((#:configure-flags flags)
|
||||||
`(append (list ,(string-append "--target=" (boot-triplet))
|
#~(append (list #$(string-append "--target=" (boot-triplet))
|
||||||
|
|
||||||
;; No libc yet.
|
;; No libc yet.
|
||||||
"--without-headers"
|
"--without-headers"
|
||||||
|
|
||||||
;; Disable features not needed at this stage.
|
;; Disable features not needed at this stage.
|
||||||
"--disable-shared"
|
"--disable-shared"
|
||||||
"--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"
|
"--disable-threads"
|
||||||
"--disable-libmudflap"
|
"--disable-libmudflap"
|
||||||
"--disable-libatomic"
|
"--disable-libatomic"
|
||||||
"--disable-libsanitizer"
|
"--disable-libsanitizer"
|
||||||
"--disable-libitm"
|
"--disable-libitm"
|
||||||
"--disable-libgomp"
|
"--disable-libgomp"
|
||||||
"--disable-libmpx"
|
"--disable-libmpx"
|
||||||
"--disable-libcilkrts"
|
"--disable-libcilkrts"
|
||||||
"--disable-libvtv"
|
"--disable-libvtv"
|
||||||
"--disable-libssp"
|
"--disable-libssp"
|
||||||
"--disable-libquadmath"
|
"--disable-libquadmath"
|
||||||
"--disable-decimal-float")
|
"--disable-decimal-float")
|
||||||
(remove (cut string-match
|
(remove (cut string-match
|
||||||
"--(with-system-zlib|enable-languages.*)" <>)
|
"--(with-system-zlib|enable-languages.*)" <>)
|
||||||
,flags)))
|
#$flags)))
|
||||||
((#:make-flags flags)
|
((#:make-flags flags)
|
||||||
`(let* ((libc (assoc-ref %build-inputs "libc"))
|
`(let* ((libc (assoc-ref %build-inputs "libc"))
|
||||||
(libc-native (or (assoc-ref %build-inputs "libc-native")
|
(libc-native (or (assoc-ref %build-inputs "libc-native")
|
||||||
libc)))
|
libc)))
|
||||||
`(,(string-append "LDFLAGS="
|
`(,(string-append "LDFLAGS="
|
||||||
"-Wl,-rpath=" libc-native "/lib "
|
"-Wl,-rpath=" libc-native "/lib "
|
||||||
"-Wl,-dynamic-linker "
|
"-Wl,-dynamic-linker "
|
||||||
"-Wl," libc-native ,(glibc-dynamic-linker
|
"-Wl," libc-native ,(glibc-dynamic-linker
|
||||||
(match (%current-system)
|
(match (%current-system)
|
||||||
("x86_64-linux" "i686-linux")
|
("x86_64-linux" "i686-linux")
|
||||||
(_ (%current-system))))))))
|
(_ (%current-system))))))))
|
||||||
((#:phases phases)
|
((#:phases phases)
|
||||||
`(modify-phases ,phases
|
#~(modify-phases #$phases
|
||||||
(add-after 'unpack 'unpack-gmp&co
|
(add-after 'unpack 'unpack-gmp&co
|
||||||
(lambda* (#:key inputs #:allow-other-keys)
|
(lambda* (#:key inputs #:allow-other-keys)
|
||||||
(let ((gmp (assoc-ref %build-inputs "gmp-source"))
|
(let ((gmp (assoc-ref %build-inputs "gmp-source"))
|
||||||
(mpfr (assoc-ref %build-inputs "mpfr-source"))
|
(mpfr (assoc-ref %build-inputs "mpfr-source"))
|
||||||
(mpc (assoc-ref %build-inputs "mpc-source")))
|
(mpc (assoc-ref %build-inputs "mpc-source")))
|
||||||
|
|
||||||
;; To reduce the set of pre-built bootstrap inputs, build
|
;; To reduce the set of pre-built bootstrap inputs, build
|
||||||
;; GMP & co. from GCC.
|
;; GMP & co. from GCC.
|
||||||
(for-each (lambda (source)
|
(for-each (lambda (source)
|
||||||
(invoke "tar" "xvf" source))
|
(invoke "tar" "xvf" source))
|
||||||
(list gmp mpfr mpc))
|
(list gmp mpfr mpc))
|
||||||
|
|
||||||
;; Create symlinks like `gmp' -> `gmp-x.y.z'.
|
;; Create symlinks like `gmp' -> `gmp-x.y.z'.
|
||||||
,@(map (lambda (lib)
|
#$@(map (lambda (lib)
|
||||||
;; Drop trailing letters, as gmp-6.0.0a unpacks
|
;; Drop trailing letters, as gmp-6.0.0a unpacks
|
||||||
;; into gmp-6.0.0.
|
;; into gmp-6.0.0.
|
||||||
`(symlink ,(string-trim-right
|
#~(symlink #$(string-trim-right
|
||||||
(package-full-name lib "-")
|
(package-full-name lib "-")
|
||||||
char-set:letter)
|
char-set:letter)
|
||||||
,(package-name lib)))
|
#$(package-name lib)))
|
||||||
(list gmp-6.0 mpfr mpc)))))
|
(list gmp-6.0 mpfr mpc)))))
|
||||||
,(match (%current-system)
|
#$(match (%current-system)
|
||||||
((or "i686-linux" "x86_64-linux")
|
((or "i686-linux" "x86_64-linux")
|
||||||
'(add-before 'configure 'fix-libcc1
|
#~(add-before 'configure 'fix-libcc1
|
||||||
(lambda* (#:key inputs #:allow-other-keys)
|
(lambda* (#:key inputs #:allow-other-keys)
|
||||||
;; libcc1.so NEEDs libgcc_s.so, so provide one here
|
;; libcc1.so NEEDs libgcc_s.so, so provide one here
|
||||||
;; to placate the 'validate-runpath' phase.
|
;; to placate the 'validate-runpath' phase.
|
||||||
|
@ -2423,18 +2424,18 @@ exec " gcc "/bin/" program
|
||||||
;; XXX: "g++ -v" is broken (see also libstdc++ above).
|
;; XXX: "g++ -v" is broken (see also libstdc++ above).
|
||||||
(substitute* "libcc1/configure"
|
(substitute* "libcc1/configure"
|
||||||
(("g\\+\\+ -v") "true")))))
|
(("g\\+\\+ -v") "true")))))
|
||||||
(_ '(add-before 'configure 'return-true
|
(_ #~(add-before 'configure 'return-true
|
||||||
(lambda _ #t))))
|
(lambda _ #t))))
|
||||||
(add-after 'install 'symlink-libgcc_eh
|
(add-after 'install 'symlink-libgcc_eh
|
||||||
(lambda* (#:key outputs #:allow-other-keys)
|
(lambda* (#:key outputs #:allow-other-keys)
|
||||||
(let ((out (assoc-ref outputs "lib")))
|
(let ((out (assoc-ref outputs "lib")))
|
||||||
;; Glibc wants to link against libgcc_eh, so provide
|
;; Glibc wants to link against libgcc_eh, so provide
|
||||||
;; it.
|
;; it.
|
||||||
(with-directory-excursion
|
(with-directory-excursion
|
||||||
(string-append out "/lib/gcc/"
|
(string-append out "/lib/gcc/"
|
||||||
,(boot-triplet)
|
#$(boot-triplet)
|
||||||
"/" ,(package-version gcc))
|
"/" #$(package-version gcc))
|
||||||
(symlink "libgcc.a" "libgcc_eh.a"))))))))))
|
(symlink "libgcc.a" "libgcc_eh.a"))))))))))
|
||||||
|
|
||||||
(inputs `(("gmp-source" ,(bootstrap-origin (package-source gmp-6.0)))
|
(inputs `(("gmp-source" ,(bootstrap-origin (package-source gmp-6.0)))
|
||||||
("mpfr-source" ,(bootstrap-origin (package-source mpfr)))
|
("mpfr-source" ,(bootstrap-origin (package-source mpfr)))
|
||||||
|
@ -2888,41 +2889,42 @@ that makes it available under the native tool names."
|
||||||
(build-system trivial-build-system)
|
(build-system trivial-build-system)
|
||||||
(outputs '("out"))
|
(outputs '("out"))
|
||||||
(arguments
|
(arguments
|
||||||
`(#:guile ,%bootstrap-guile
|
(list
|
||||||
#:modules ((guix build utils))
|
#:guile %bootstrap-guile
|
||||||
#:builder (begin
|
#:modules '((guix build utils))
|
||||||
(use-modules (guix build utils))
|
#:builder #~(begin
|
||||||
|
(use-modules (guix build utils))
|
||||||
|
|
||||||
(let* ((binutils (assoc-ref %build-inputs "binutils"))
|
(let* ((binutils (assoc-ref %build-inputs "binutils"))
|
||||||
(gcc (assoc-ref %build-inputs "gcc"))
|
(gcc (assoc-ref %build-inputs "gcc"))
|
||||||
(libc (assoc-ref %build-inputs "libc"))
|
(libc (assoc-ref %build-inputs "libc"))
|
||||||
(bash (assoc-ref %build-inputs "bash"))
|
(bash (assoc-ref %build-inputs "bash"))
|
||||||
(out (assoc-ref %outputs "out"))
|
(out (assoc-ref %outputs "out"))
|
||||||
(bindir (string-append out "/bin"))
|
(bindir (string-append out "/bin"))
|
||||||
(triplet ,(boot-triplet)))
|
(triplet #$(boot-triplet)))
|
||||||
(define (wrap-program program)
|
(define (wrap-program program)
|
||||||
;; GCC-BOOT0 is a libc-less cross-compiler, so it
|
;; GCC-BOOT0 is a libc-less cross-compiler, so it
|
||||||
;; needs to be told where to find the crt files and
|
;; needs to be told where to find the crt files and
|
||||||
;; the dynamic linker.
|
;; the dynamic linker.
|
||||||
(call-with-output-file program
|
(call-with-output-file program
|
||||||
(lambda (p)
|
(lambda (p)
|
||||||
(format p "#!~a/bin/bash
|
(format p "#!~a/bin/bash
|
||||||
exec ~a/bin/~a-~a -B~a/lib -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%"
|
exec ~a/bin/~a-~a -B~a/lib -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%"
|
||||||
bash
|
bash
|
||||||
gcc triplet program
|
gcc triplet program
|
||||||
libc libc
|
libc libc
|
||||||
,(glibc-dynamic-linker))))
|
#$(glibc-dynamic-linker))))
|
||||||
|
|
||||||
(chmod program #o555))
|
(chmod program #o555))
|
||||||
|
|
||||||
(mkdir-p bindir)
|
(mkdir-p bindir)
|
||||||
(with-directory-excursion bindir
|
(with-directory-excursion bindir
|
||||||
(for-each (lambda (tool)
|
(for-each (lambda (tool)
|
||||||
(symlink (string-append binutils "/bin/"
|
(symlink (string-append binutils "/bin/"
|
||||||
triplet "-" tool)
|
triplet "-" tool)
|
||||||
tool))
|
tool))
|
||||||
'("ar" "ranlib"))
|
'("ar" "ranlib"))
|
||||||
(for-each wrap-program '("gcc" "g++")))))))
|
(for-each wrap-program '("gcc" "g++")))))))
|
||||||
(native-inputs
|
(native-inputs
|
||||||
`(("binutils" ,binutils)
|
`(("binutils" ,binutils)
|
||||||
("gcc" ,gcc)
|
("gcc" ,gcc)
|
||||||
|
@ -3122,79 +3124,80 @@ exec ~a/bin/~a-~a -B~a/lib -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%"
|
||||||
(outputs (delete "debug" (package-outputs gcc-boot0)))
|
(outputs (delete "debug" (package-outputs gcc-boot0)))
|
||||||
|
|
||||||
(arguments
|
(arguments
|
||||||
`(#:guile ,%bootstrap-guile
|
(cons*
|
||||||
#:implicit-inputs? #f
|
#:guile %bootstrap-guile
|
||||||
|
#:implicit-inputs? #f
|
||||||
|
|
||||||
#:allowed-references ("out" "lib" ,zlib-final
|
#:allowed-references `("out" "lib" ,zlib-final
|
||||||
,glibc-final ,static-bash-for-glibc)
|
,glibc-final ,static-bash-for-glibc)
|
||||||
|
|
||||||
;; Things like libasan.so and libstdc++.so NEED ld.so for some
|
;; Things like libasan.so and libstdc++.so NEED ld.so for some
|
||||||
;; reason, but it is not in their RUNPATH. This is a false
|
;; reason, but it is not in their RUNPATH. This is a false
|
||||||
;; positive, so turn it off.
|
;; positive, so turn it off.
|
||||||
#:validate-runpath? #f
|
#:validate-runpath? #f
|
||||||
|
|
||||||
;; Additional modules for the libstdc++ phase below.
|
;; Additional modules for the libstdc++ phase below.
|
||||||
#:modules ((srfi srfi-1)
|
#:modules `((srfi srfi-1)
|
||||||
(srfi srfi-26)
|
(srfi srfi-26)
|
||||||
,@%gnu-build-system-modules)
|
,@%gnu-build-system-modules)
|
||||||
|
|
||||||
,@(substitute-keyword-arguments (package-arguments gcc)
|
(substitute-keyword-arguments (package-arguments gcc)
|
||||||
((#:make-flags flags)
|
((#:make-flags flags)
|
||||||
;; Since $LIBRARY_PATH is not honored, add the relevant flags.
|
;; Since $LIBRARY_PATH is not honored, add the relevant flags.
|
||||||
`(let ((zlib (assoc-ref %build-inputs "zlib")))
|
#~(let ((zlib (assoc-ref %build-inputs "zlib")))
|
||||||
(map (lambda (flag)
|
(map (lambda (flag)
|
||||||
(if (string-prefix? "LDFLAGS=" flag)
|
(if (string-prefix? "LDFLAGS=" flag)
|
||||||
(string-append flag " -L"
|
(string-append flag " -L"
|
||||||
(assoc-ref %build-inputs "libstdc++")
|
(assoc-ref %build-inputs "libstdc++")
|
||||||
"/lib -L" zlib "/lib -Wl,-rpath="
|
"/lib -L" zlib "/lib -Wl,-rpath="
|
||||||
zlib "/lib")
|
zlib "/lib")
|
||||||
flag))
|
flag))
|
||||||
,flags)))
|
#$flags)))
|
||||||
;; Build again GMP & co. within GCC's build process, because it's hard
|
;; 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
|
;; to do outside (because GCC-BOOT0 is a cross-compiler, and thus
|
||||||
;; doesn't honor $LIBRARY_PATH, which breaks `gnu-build-system'.)
|
;; doesn't honor $LIBRARY_PATH, which breaks `gnu-build-system'.)
|
||||||
((#:phases phases)
|
((#:phases phases)
|
||||||
`(modify-phases ,phases
|
#~(modify-phases #$phases
|
||||||
(add-after 'unpack 'unpack-gmp&co
|
(add-after 'unpack 'unpack-gmp&co
|
||||||
(lambda* (#:key inputs #:allow-other-keys)
|
(lambda* (#:key inputs #:allow-other-keys)
|
||||||
(let ((gmp (assoc-ref %build-inputs "gmp-source"))
|
(let ((gmp (assoc-ref %build-inputs "gmp-source"))
|
||||||
(mpfr (assoc-ref %build-inputs "mpfr-source"))
|
(mpfr (assoc-ref %build-inputs "mpfr-source"))
|
||||||
(mpc (assoc-ref %build-inputs "mpc-source")))
|
(mpc (assoc-ref %build-inputs "mpc-source")))
|
||||||
|
|
||||||
;; To reduce the set of pre-built bootstrap inputs, build
|
;; To reduce the set of pre-built bootstrap inputs, build
|
||||||
;; GMP & co. from GCC.
|
;; GMP & co. from GCC.
|
||||||
(for-each (lambda (source)
|
(for-each (lambda (source)
|
||||||
(invoke "tar" "xvf" source))
|
(invoke "tar" "xvf" source))
|
||||||
(list gmp mpfr mpc))
|
(list gmp mpfr mpc))
|
||||||
|
|
||||||
;; Create symlinks like `gmp' -> `gmp-x.y.z'.
|
;; Create symlinks like `gmp' -> `gmp-x.y.z'.
|
||||||
,@(map (lambda (lib)
|
#$@(map (lambda (lib)
|
||||||
;; Drop trailing letters, as gmp-6.0.0a unpacks
|
;; Drop trailing letters, as gmp-6.0.0a unpacks
|
||||||
;; into gmp-6.0.0.
|
;; into gmp-6.0.0.
|
||||||
`(symlink ,(string-trim-right
|
#~(symlink #$(string-trim-right
|
||||||
(package-full-name lib "-")
|
(package-full-name lib "-")
|
||||||
char-set:letter)
|
char-set:letter)
|
||||||
,(package-name lib)))
|
#$(package-name lib)))
|
||||||
(list gmp-6.0 mpfr mpc)))))
|
(list gmp-6.0 mpfr mpc)))))
|
||||||
(add-after 'unpack 'fix-build-with-external-libstdc++
|
(add-after 'unpack 'fix-build-with-external-libstdc++
|
||||||
(lambda* (#:key inputs #:allow-other-keys)
|
(lambda* (#:key inputs #:allow-other-keys)
|
||||||
(let ((libstdc++ (assoc-ref inputs "libstdc++")))
|
(let ((libstdc++ (assoc-ref inputs "libstdc++")))
|
||||||
;; Fix a regression in GCC 11 where the libstc++ input
|
;; Fix a regression in GCC 11 where the libstc++ input
|
||||||
;; shadows glibc headers when building libstdc++. An
|
;; shadows glibc headers when building libstdc++. An
|
||||||
;; upstream fix was added in GCC 11.3.0, but it only
|
;; upstream fix was added in GCC 11.3.0, but it only
|
||||||
;; hides system include directories, not those on
|
;; hides system include directories, not those on
|
||||||
;; CPLUS_INCLUDE_PATH. See discussion at
|
;; CPLUS_INCLUDE_PATH. See discussion at
|
||||||
;; <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100017>.
|
;; <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100017>.
|
||||||
(substitute* "libstdc++-v3/src/c++17/Makefile.in"
|
(substitute* "libstdc++-v3/src/c++17/Makefile.in"
|
||||||
(("AM_CXXFLAGS = ")
|
(("AM_CXXFLAGS = ")
|
||||||
(string-append "CPLUS_INCLUDE_PATH = "
|
(string-append "CPLUS_INCLUDE_PATH = "
|
||||||
(string-join
|
(string-join
|
||||||
(remove (cut string-prefix? libstdc++ <>)
|
(remove (cut string-prefix? libstdc++ <>)
|
||||||
(string-split
|
(string-split
|
||||||
(getenv "CPLUS_INCLUDE_PATH")
|
(getenv "CPLUS_INCLUDE_PATH")
|
||||||
#\:))
|
#\:))
|
||||||
":")
|
":")
|
||||||
"\nAM_CXXFLAGS = ")))))))))))
|
"\nAM_CXXFLAGS = ")))))))))))
|
||||||
|
|
||||||
;; This time we want Texinfo, so we get the manual. Add
|
;; This time we want Texinfo, so we get the manual. Add
|
||||||
;; STATIC-BASH-FOR-GLIBC so that it's used in the final shebangs of
|
;; STATIC-BASH-FOR-GLIBC so that it's used in the final shebangs of
|
||||||
|
|
|
@ -864,62 +864,63 @@ using compilers other than GCC."
|
||||||
(inherit gcc)
|
(inherit gcc)
|
||||||
(name "libstdc++")
|
(name "libstdc++")
|
||||||
(arguments
|
(arguments
|
||||||
`(#:out-of-source? #t
|
(list
|
||||||
#:modules ((srfi srfi-1)
|
#:out-of-source? #t
|
||||||
|
#:modules `((srfi srfi-1)
|
||||||
(srfi srfi-26)
|
(srfi srfi-26)
|
||||||
,@%gnu-build-system-modules)
|
,@%gnu-build-system-modules)
|
||||||
#:phases
|
#:phases
|
||||||
(modify-phases %standard-phases
|
#~(modify-phases %standard-phases
|
||||||
,@(if (version>=? (package-version gcc) "11")
|
#$@(if (version>=? (package-version gcc) "11")
|
||||||
`((add-after 'unpack 'hide-gcc-headers
|
#~((add-after 'unpack 'hide-gcc-headers
|
||||||
(lambda* (#:key native-inputs inputs #:allow-other-keys)
|
(lambda* (#:key native-inputs inputs #:allow-other-keys)
|
||||||
(let ((gcc (assoc-ref (or native-inputs inputs)
|
(let ((gcc (assoc-ref (or native-inputs inputs)
|
||||||
,(if (%current-target-system)
|
#$(if (%current-target-system)
|
||||||
"cross-gcc"
|
"cross-gcc"
|
||||||
"gcc"))))
|
"gcc"))))
|
||||||
;; Fix a regression in GCC 11 where the GCC headers
|
;; Fix a regression in GCC 11 where the GCC headers
|
||||||
;; shadows glibc headers when building libstdc++. An
|
;; shadows glibc headers when building libstdc++. An
|
||||||
;; upstream fix was added in GCC 11.3.0, but it only
|
;; upstream fix was added in GCC 11.3.0, but it only
|
||||||
;; hides system include directories, not those on
|
;; hides system include directories, not those on
|
||||||
;; CPLUS_INCLUDE_PATH. See discussion at
|
;; CPLUS_INCLUDE_PATH. See discussion at
|
||||||
;; <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100017>
|
;; <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100017>
|
||||||
;; and the similar adjustment in GCC-FINAL.
|
;; and the similar adjustment in GCC-FINAL.
|
||||||
(substitute* "libstdc++-v3/src/c++17/Makefile.in"
|
(substitute* "libstdc++-v3/src/c++17/Makefile.in"
|
||||||
(("AM_CXXFLAGS = ")
|
(("AM_CXXFLAGS = ")
|
||||||
(string-append ,(if (%current-target-system)
|
(string-append #$(if (%current-target-system)
|
||||||
"CROSS_CPLUS_INCLUDE_PATH = "
|
"CROSS_CPLUS_INCLUDE_PATH = "
|
||||||
"CPLUS_INCLUDE_PATH = ")
|
"CPLUS_INCLUDE_PATH = ")
|
||||||
(string-join
|
(string-join
|
||||||
(remove (cut string-prefix? gcc <>)
|
(remove (cut string-prefix? gcc <>)
|
||||||
(string-split
|
(string-split
|
||||||
(getenv
|
(getenv
|
||||||
,(if (%current-target-system)
|
#$(if (%current-target-system)
|
||||||
"CROSS_CPLUS_INCLUDE_PATH"
|
"CROSS_CPLUS_INCLUDE_PATH"
|
||||||
"CPLUS_INCLUDE_PATH"))
|
"CPLUS_INCLUDE_PATH"))
|
||||||
#\:))
|
#\:))
|
||||||
":")
|
":")
|
||||||
"\nAM_CXXFLAGS = ")))))))
|
"\nAM_CXXFLAGS = ")))))))
|
||||||
'())
|
'())
|
||||||
,@(let ((version (package-version gcc)))
|
#$@(let ((version (package-version gcc)))
|
||||||
(if (and (target-ppc64le?)
|
(if (and (target-ppc64le?)
|
||||||
(version>=? version "11")
|
(version>=? version "11")
|
||||||
(not (version>=? version "12")))
|
(not (version>=? version "12")))
|
||||||
`((add-after 'unpack 'patch-powerpc
|
#~((add-after 'unpack 'patch-powerpc
|
||||||
(lambda* (#:key inputs #:allow-other-keys)
|
(lambda* (#:key inputs #:allow-other-keys)
|
||||||
(invoke "patch" "--force" "-p1" "-i"
|
(invoke "patch" "--force" "-p1" "-i"
|
||||||
(assoc-ref inputs "powerpc64le-patch")))))
|
(assoc-ref inputs "powerpc64le-patch")))))
|
||||||
'()))
|
'()))
|
||||||
;; Force rs6000 (i.e., powerpc) libdir to be /lib and not /lib64.
|
;; Force rs6000 (i.e., powerpc) libdir to be /lib and not /lib64.
|
||||||
(add-before 'chdir 'fix-rs6000-libdir
|
(add-before 'chdir 'fix-rs6000-libdir
|
||||||
(lambda _
|
(lambda _
|
||||||
(when (file-exists? "gcc/config/rs6000")
|
(when (file-exists? "gcc/config/rs6000")
|
||||||
(substitute* (find-files "gcc/config/rs6000")
|
(substitute* (find-files "gcc/config/rs6000")
|
||||||
(("/lib64") "/lib")))))
|
(("/lib64") "/lib")))))
|
||||||
(add-before 'configure 'chdir
|
(add-before 'configure 'chdir
|
||||||
(lambda _
|
(lambda _
|
||||||
(chdir "libstdc++-v3"))))
|
(chdir "libstdc++-v3"))))
|
||||||
|
|
||||||
#:configure-flags `("--disable-libstdcxx-pch"
|
#:configure-flags '`("--disable-libstdcxx-pch"
|
||||||
,(string-append "--with-gxx-include-dir="
|
,(string-append "--with-gxx-include-dir="
|
||||||
(assoc-ref %outputs "out")
|
(assoc-ref %outputs "out")
|
||||||
"/include"))))
|
"/include"))))
|
||||||
|
|
Reference in a new issue