~ruther/guix-local

84e6756c5734cdfbb79f3b771e8d8fc8f773a795 — Ludovic Courtès 11 years ago e0a0c84
gnu: gcc: Add a "lib" output.

* gnu/packages/gcc.scm (gcc-4.7)[configure-flags]: Add
  --with-gxx-include-dir.
  [outputs]: New field.
  [arguments] <phases>: Adjust to use the "lib" output.  Add
  'substitute*' calls for "libstdc++-v3/python/Makefile.in" and
  "gcc/config.in".
* gnu/packages/base.scm (gcc-boot0) <symlink-libgcc_eh>: Use the "lib"
  output.
  (cross-gcc-wrapper): Add 'outputs' field.
  (glibc-final)[arguments]: Adjust #:allowed-references to list
  '(GCC-BOOT0 "lib").
  (libstdc++): Add 'outputs' field.
  (gcc-final)[arguments]: Add "lib" to #:allowed-references.
* gnu/packages/make-bootstrap.scm (%gcc-static): Add 'outputs' field.
3 files changed, 42 insertions(+), 7 deletions(-)

M gnu/packages/base.scm
M gnu/packages/gcc.scm
M gnu/packages/make-bootstrap.scm
M gnu/packages/base.scm => gnu/packages/base.scm +5 -3
@@ 741,7 741,7 @@ identifier SYSTEM."
               (alist-cons-after
                'install 'symlink-libgcc_eh
                (lambda* (#:key outputs #:allow-other-keys)
                  (let ((out (assoc-ref outputs "out")))
                  (let ((out (assoc-ref outputs "lib")))
                    ;; Glibc wants to link against libgcc_eh, so provide
                    ;; it.
                    (with-directory-excursion


@@ 866,6 866,7 @@ that makes it available under the native tool names."
    (name (string-append (package-name gcc) "-wrapped"))
    (source #f)
    (build-system trivial-build-system)
    (outputs '("out"))
    (arguments
     `(#:guile ,%bootstrap-guile
       #:modules ((guix build utils))


@@ 941,7 942,7 @@ exec ~a/bin/~a-~a -B~a/lib -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%"
    ;; if 'allowed-references' were per-output.
    (arguments
     `(#:allowed-references
       ,(cons* gcc-boot0 (linux-libre-headers-boot0)
       ,(cons* `(,gcc-boot0 "lib") (linux-libre-headers-boot0)
               (package-outputs glibc-final-with-bootstrap-bash))

       ,@(package-arguments glibc-final-with-bootstrap-bash)))))


@@ 993,6 994,7 @@ exec ~a/bin/~a-~a -B~a/lib -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%"
                                            ;; "/include/c++/"
                                            ;; ,(package-version gcc-4.8)
                                            ))))
     (outputs '("out"))
     (inputs %boot2-inputs)
     (native-inputs '())
     (propagated-inputs '())


@@ 1007,7 1009,7 @@ exec ~a/bin/~a-~a -B~a/lib -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%"
     `(#:guile ,%bootstrap-guile
       #:implicit-inputs? #f

       #:allowed-references ("out" ,glibc-final)
       #:allowed-references ("out" "lib" ,glibc-final)

       ;; 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

M gnu/packages/gcc.scm => gnu/packages/gcc.scm +36 -4
@@ 79,6 79,14 @@ where the OS part is overloaded to denote a specific ABI---into GCC

                     "--with-local-prefix=/no-gcc-local-prefix"

                     ;; With a separate "lib" output, the build system
                     ;; incorrectly guesses GPLUSPLUS_INCLUDE_DIR, so force
                     ;; it.  (Don't use a versioned sub-directory, that's
                     ;; unnecessary.)
                     ,(string-append "--with-gxx-include-dir="
                                     (assoc-ref %outputs "out")
                                     "/include/c++")

                     ,(let ((libc (assoc-ref %build-inputs "libc")))
                        (if libc
                            (string-append "--with-native-system-header-dir=" libc


@@ 103,6 111,12 @@ where the OS part is overloaded to denote a specific ABI---into GCC
                (base32
                 "1hx9h64ivarlzi4hxvq42as5m9vlr5cyzaaq4gzj4i619zmkfz1g"))))
      (build-system gnu-build-system)

      ;; Separate out the run-time support libraries because all the
      ;; dynamic-linked objects depend on it.
      (outputs '("out"                     ; commands, etc. (60+ MiB)
                 "lib"))                   ; libgcc_s, libgomp, etc. (15+ MiB)

      (inputs `(("gmp" ,gmp)
                ("mpfr" ,mpfr)
                ("mpc" ,mpc)


@@ 143,8 157,9 @@ where the OS part is overloaded to denote a specific ABI---into GCC
         (alist-cons-before
          'configure 'pre-configure
          (lambda* (#:key inputs outputs #:allow-other-keys)
            (let ((out  (assoc-ref outputs "out"))
                  (libc (assoc-ref inputs "libc")))
            (let ((libdir (or (assoc-ref outputs "lib")
                              (assoc-ref outputs "out")))
                  (libc   (assoc-ref inputs "libc")))
              (when libc
                ;; The following is not performed for `--without-headers'
                ;; cross-compiler builds.


@@ 170,7 185,7 @@ where the OS part is overloaded to denote a specific ABI---into GCC
                   ;; <http://sourceware.org/ml/libc-help/2013-11/msg00023.html>.)
                   (format #f "#define GNU_USER_TARGET_LIB_SPEC \
\"-L~a/lib %{!static:-rpath=~a/lib %{!static-libgcc:-rpath=~a/lib64 -rpath=~a/lib -lgcc_s}} \" ~a"
                           libc libc out out suffix))
                           libc libc libdir libdir suffix))
                  (("#define GNU_USER_TARGET_STARTFILE_SPEC.*$" line)
                   (format #f "#define STANDARD_STARTFILE_PREFIX_1 \"~a/lib\"
#define STANDARD_STARTFILE_PREFIX_2 \"\"


@@ 180,7 195,24 @@ where the OS part is overloaded to denote a specific ABI---into GCC
              ;; Don't retain a dependency on the build-time sed.
              (substitute* "fixincludes/fixincl.x"
                (("static char const sed_cmd_z\\[\\] =.*;")
                 "static char const sed_cmd_z[] = \"sed\";"))))
                 "static char const sed_cmd_z[] = \"sed\";"))

              ;; Move libstdc++*-gdb.py to the "lib" output to avoid a
              ;; circularity between "out" and "lib".  (Note:
              ;; --with-python-dir is useless because it imposes $(prefix) as
              ;; the parent directory.)
              (substitute* "libstdc++-v3/python/Makefile.in"
                (("pythondir = .*$")
                 (string-append "pythondir = " libdir "/share"
                                "/gcc-$(gcc_version)/python\n")))

              ;; Avoid another circularity between the outputs: this #define
              ;; ends up in auto-host.h in the "lib" output, referring to
              ;; "out".  (This variable is used to augment cpp's search path,
              ;; but there's nothing useful to look for here.)
              (substitute* "gcc/config.in"
                (("PREFIX_INCLUDE_DIR")
                 "PREFIX_INCLUDE_DIR_isnt_necessary_here"))))

          (alist-cons-after
           'configure 'post-configure

M gnu/packages/make-bootstrap.scm => gnu/packages/make-bootstrap.scm +1 -0
@@ 393,6 393,7 @@ for `sh' in $PATH, and without nscd, and with static NSS modules."
  (package-with-relocatable-glibc
   (package (inherit gcc-4.8)
     (name "gcc-static")
     (outputs '("out"))                           ; all in one
     (arguments
      `(#:modules ((guix build utils)
                   (guix build gnu-build-system)