mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2024-11-07 07:26:13 -05:00
gnu: cross-gcc: Add a "lib" output.
Add a "lib" output to cross-gcc. This requires an upstream GCC patch adding support for --with-toolexeclibdir configure option. This option allows to install cross-built GCC libraries in a specific location. This also fixes the computation of TOOLDIR_BASE_PREFIX, that fails when /gnu/store/... directories are involved. * gnu/packages/patches/gcc-7-cross-toolexeclibdir.patch: New file. * gnu/local.mk (dist_patch_DATA): Add it. * gnu/packages/cross-base.scm (cross-gcc)[source]: Apply it, [outputs]: add a "lib" output, (cross-gcc-snippet): fix TOOLDIR_BASE_PREFIX.
This commit is contained in:
parent
2e9c43aa9a
commit
53de3e74fa
3 changed files with 1083 additions and 22 deletions
|
@ -14,7 +14,7 @@
|
||||||
# Copyright © 2016, 2017, 2018, 2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
|
# Copyright © 2016, 2017, 2018, 2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
|
||||||
# Copyright © 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
|
# Copyright © 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
|
||||||
# Copyright © 2017, 2018 Clément Lassieur <clement@lassieur.org>
|
# Copyright © 2017, 2018 Clément Lassieur <clement@lassieur.org>
|
||||||
# Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
|
# Copyright © 2017, 2020 Mathieu Othacehe <m.othacehe@gmail.com>
|
||||||
# Copyright © 2017, 2018, 2019 Gábor Boskovits <boskovits@gmail.com>
|
# Copyright © 2017, 2018, 2019 Gábor Boskovits <boskovits@gmail.com>
|
||||||
# Copyright © 2018 Amirouche Boubekki <amirouche@hypermove.net>
|
# Copyright © 2018 Amirouche Boubekki <amirouche@hypermove.net>
|
||||||
# Copyright © 2018, 2019, 2020 Oleg Pykhalov <go.wigust@gmail.com>
|
# Copyright © 2018, 2019, 2020 Oleg Pykhalov <go.wigust@gmail.com>
|
||||||
|
@ -918,6 +918,7 @@ dist_patch_DATA = \
|
||||||
%D%/packages/patches/gcc-6-source-date-epoch-2.patch \
|
%D%/packages/patches/gcc-6-source-date-epoch-2.patch \
|
||||||
%D%/packages/patches/gcc-7-cross-mingw.patch \
|
%D%/packages/patches/gcc-7-cross-mingw.patch \
|
||||||
%D%/packages/patches/gcc-7-cross-environment-variables.patch \
|
%D%/packages/patches/gcc-7-cross-environment-variables.patch \
|
||||||
|
%D%/packages/patches/gcc-7-cross-toolexeclibdir.patch \
|
||||||
%D%/packages/patches/gcc-8-cross-environment-variables.patch \
|
%D%/packages/patches/gcc-8-cross-environment-variables.patch \
|
||||||
%D%/packages/patches/gcc-8-strmov-store-file-names.patch \
|
%D%/packages/patches/gcc-8-strmov-store-file-names.patch \
|
||||||
%D%/packages/patches/gcc-9-asan-fix-limits-include.patch \
|
%D%/packages/patches/gcc-9-asan-fix-limits-include.patch \
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
|
;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
|
||||||
;;; Copyright © 2019, 2020 Marius Bakke <mbakke@fastmail.com>
|
;;; Copyright © 2019, 2020 Marius Bakke <mbakke@fastmail.com>
|
||||||
;;; Copyright © 2019 Carl Dong <contact@carldong.me>
|
;;; Copyright © 2019 Carl Dong <contact@carldong.me>
|
||||||
|
;;; Copyright © 2020 Mathieu Othacehe <m.othacehe@gmail.com>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of GNU Guix.
|
;;; This file is part of GNU Guix.
|
||||||
;;;
|
;;;
|
||||||
|
@ -162,6 +163,13 @@ (define (cross-gcc-arguments target xgcc libc)
|
||||||
"--disable-libsanitizer"
|
"--disable-libsanitizer"
|
||||||
))
|
))
|
||||||
|
|
||||||
|
;; Install cross-built libraries such as libgcc_s.so in
|
||||||
|
;; the "lib" output.
|
||||||
|
,@(if libc
|
||||||
|
`((string-append "--with-toolexeclibdir="
|
||||||
|
(assoc-ref %outputs "lib")
|
||||||
|
"/" ,target "/lib"))
|
||||||
|
'())
|
||||||
;; For a newlib (non-glibc) target
|
;; For a newlib (non-glibc) target
|
||||||
,@(if (cross-newlib? target)
|
,@(if (cross-newlib? target)
|
||||||
'("--with-newlib")
|
'("--with-newlib")
|
||||||
|
@ -196,12 +204,19 @@ (define (cross-gcc-patches xgcc target)
|
||||||
|
|
||||||
(define (cross-gcc-snippet target)
|
(define (cross-gcc-snippet target)
|
||||||
"Return GCC snippet needed for TARGET."
|
"Return GCC snippet needed for TARGET."
|
||||||
(cond ((target-mingw? target)
|
`(begin
|
||||||
'(begin
|
,@(if (target-mingw? target)
|
||||||
(copy-recursively "libstdc++-v3/config/os/mingw32-w64"
|
'((copy-recursively "libstdc++-v3/config/os/mingw32-w64"
|
||||||
"libstdc++-v3/config/os/newlib")
|
"libstdc++-v3/config/os/newlib"))
|
||||||
#t))
|
'())
|
||||||
(else #f)))
|
;; TOOLDIR_BASE_PREFIX is erroneous when using a separate "lib"
|
||||||
|
;; output. Specify it correctly, otherwise GCC won't find its shared
|
||||||
|
;; libraries installed in the "lib" output. See:
|
||||||
|
;; https://lists.gnu.org/archive/html/bug-guix/2020-03/msg00196.html.
|
||||||
|
(substitute* "gcc/Makefile.in"
|
||||||
|
(("-DTOOLDIR_BASE_PREFIX=[^ ]*")
|
||||||
|
"-DTOOLDIR_BASE_PREFIX=\\\"../../../../\\\""))
|
||||||
|
#t))
|
||||||
|
|
||||||
(define* (cross-gcc target
|
(define* (cross-gcc target
|
||||||
#:key
|
#:key
|
||||||
|
@ -216,22 +231,26 @@ (define* (cross-gcc target
|
||||||
(name (string-append "gcc-cross-"
|
(name (string-append "gcc-cross-"
|
||||||
(if libc "" "sans-libc-")
|
(if libc "" "sans-libc-")
|
||||||
target))
|
target))
|
||||||
(source (origin (inherit (package-source xgcc))
|
(source
|
||||||
(patches
|
(origin
|
||||||
(append
|
(inherit (package-source xgcc))
|
||||||
(origin-patches (package-source xgcc))
|
(patches
|
||||||
(cons (cond
|
(append
|
||||||
((version>=? (package-version xgcc) "8.0") (search-patch "gcc-8-cross-environment-variables.patch"))
|
(origin-patches (package-source xgcc))
|
||||||
((version>=? (package-version xgcc) "6.0") (search-patch "gcc-6-cross-environment-variables.patch"))
|
(append (cond
|
||||||
(else (search-patch "gcc-cross-environment-variables.patch")))
|
((version>=? (package-version xgcc) "8.0")
|
||||||
(cross-gcc-patches xgcc target))))
|
(search-patches "gcc-8-cross-environment-variables.patch"))
|
||||||
(modules '((guix build utils)))
|
((version>=? (package-version xgcc) "6.0")
|
||||||
(snippet
|
(search-patches "gcc-7-cross-toolexeclibdir.patch"
|
||||||
(cross-gcc-snippet target))))
|
"gcc-6-cross-environment-variables.patch"))
|
||||||
|
(else
|
||||||
|
(search-patches "gcc-cross-environment-variables.patch")))
|
||||||
|
(cross-gcc-patches xgcc target))))
|
||||||
|
(modules '((guix build utils)))
|
||||||
|
(snippet
|
||||||
|
(cross-gcc-snippet target))))
|
||||||
|
|
||||||
;; For simplicity, use a single output. Otherwise libgcc_s & co. are not
|
(outputs '("out" "lib"))
|
||||||
;; found by default, etc.
|
|
||||||
(outputs '("out"))
|
|
||||||
|
|
||||||
(arguments
|
(arguments
|
||||||
`(#:implicit-inputs? #f
|
`(#:implicit-inputs? #f
|
||||||
|
|
1041
gnu/packages/patches/gcc-7-cross-toolexeclibdir.patch
Normal file
1041
gnu/packages/patches/gcc-7-cross-toolexeclibdir.patch
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue