[PATCH] gnu: Fix make-gcc-libc

  • Done
  • quality assurance status badge
Details
2 participants
  • Carl Dong
  • Ludovic Courtès
Owner
unassigned
Submitted by
Carl Dong
Severity
normal
C
C
Carl Dong wrote on 25 Oct 2019 17:40
(name . guix-patches@gnu.org)(address . guix-patches@gnu.org)
hSjH-FjbLGYW5vPHJ-VSp_Wgss1FA56r1qXDALf_s6GqNauS0PQJ3qoSA6rLju7GTKhozjqHAxZaXRXd1RnHGYnD6Bsl8O40OEJpWkYRJDs=@carldong.me
Reviewers, would like some insight into whether it's okay to remove the
FLAGS_FOR_TARGET. From what I can tell it comes from CROSS-GCC-ARGUMENTS in (gnu
packages cross-base) which might not be needed here since we're not
cross-building. I've tested this toolchain built without FLAGS_FOR_TARGET and it
_seems_ to work fine.

-----

Until now the following wouldn't build:
Toggle snippet (7 lines)
(use-modules (gnu packages commencement)
(gnu packages gcc)
(gnu packages base))

(make-gcc-libc gcc-9 glibc-2.27)

* gnu/packages/base.scm (make-gcc-libc)[phases]: Add environment
variables to place the target libc on the system header search path.
[make-flags]: Remove unncessary FLAGS_FOR_TARGET.
[native-inputs]: Construct in a way that doesn't require emptying
inputs.
---
gnu/packages/base.scm | 27 ++++++++++++++++-----------
1 file changed, 16 insertions(+), 11 deletions(-)

Toggle diff (39 lines)
diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm
index 4e80a2fadb..3a3360dc7a 100644
--- a/gnu/packages/base.scm
+++ b/gnu/packages/base.scm
@@ -981,18 +981,23 @@ with the Linux kernel.")
(substitute-keyword-arguments
(ensure-keyword-arguments (package-arguments base-gcc)
'(#:implicit-inputs? #f))
- ((#:make-flags flags)
- `(let ((libc (assoc-ref %build-inputs "libc")))
- ;; FLAGS_FOR_TARGET are needed for the target libraries to receive
- ;; the -Bxxx for the startfiles.
- (cons (string-append "FLAGS_FOR_TARGET=-B" libc "/lib")
- ,flags)))))
+ ((#:phases phases)
+ `(modify-phases ,phases
+ (add-before 'configure 'treat-glibc-as-system-header
+ (lambda _
+ (let ((libc (assoc-ref %build-inputs "libc")))
+ ;; GCCs build processes requires that the libc
+ ;; we're building against is on the system header
+ ;; search path.
+ (for-each (lambda (var)
+ (setenv var (string-append libc "/include")))
+ '("C_INCLUDE_PATH" "CPLUS_INCLUDE_PATH"))
+ #t)))))))
(native-inputs
- `(("libc" ,libc)
- ("libc:static" ,libc "static")
- ,@(append (package-inputs base-gcc)
- (fold alist-delete (%final-inputs) '("libc" "libc:static")))))
- (inputs '())))
+ `(,@(package-native-inputs base-gcc)
+ ,@(append (fold alist-delete (%final-inputs) '("libc" "libc:static")))
+ ("libc" ,libc)
+ ("libc:static" ,libc "static")))))

(define-public (make-glibc-locales glibc)
(package
--
2.23.0
C
C
Carl Dong wrote on 25 Oct 2019 18:21
[PATCH 2/2] ci: Add 'make-gcc-toolchain' packages
(name . 37924@debbugs.gnu.org)(address . 37924@debbugs.gnu.org)
rnS1pu4_DHD_IOqgX3DNBHPRyPiBzy6LCTsgOcvZaT4Nkk8N1UfyHAteBHrA5ABj5ZR1K_VzBQy7wL6XAOoQEh27GD8PF37fvjDeD3do9eI=@carldong.me
* gnu/ci.scm (%core-packages): Add 'glibc-2.28', a toolchain with
default 'gcc', and a toolchain targeting 'glibc-2.28'.
---
gnu/ci.scm | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)

Toggle diff (17 lines)
diff --git a/gnu/ci.scm b/gnu/ci.scm
index 5d5a826647..74df3c34ab 100644
--- a/gnu/ci.scm
+++ b/gnu/ci.scm
@@ -110,9 +110,11 @@ SYSTEM."
;; Note: Don't put the '-final' package variants because (1) that's
;; implicit, and (2) they cannot be cross-built (due to the explicit input
;; chain.)
- (list gcc-4.8 gcc-4.9 gcc-5 glibc binutils
+ (list gcc-4.8 gcc-4.9 gcc-5 glibc glibc-2.28 binutils
gmp mpfr mpc coreutils findutils diffutils patch sed grep
gawk gnu-gettext hello guile-2.0 guile-2.2 zlib gzip xz
+ (make-gcc-toolchain gcc)
+ (make-gcc-toolchain gcc glibc-2.28)
%bootstrap-binaries-tarball
%binutils-bootstrap-tarball
(%glibc-bootstrap-tarball)
--
2.23.0
L
L
Ludovic Courtès wrote on 4 Nov 2019 23:18
Re: [bug#37924] [PATCH] gnu: Fix make-gcc-libc
(name . Carl Dong)(address . contact@carldong.me)(address . 37924@debbugs.gnu.org)
87y2wv4763.fsf@gnu.org
Hi Carl,

Carl Dong <contact@carldong.me> skribis:

Toggle quote (6 lines)
> Reviewers, would like some insight into whether it's okay to remove the
> FLAGS_FOR_TARGET. From what I can tell it comes from CROSS-GCC-ARGUMENTS in (gnu
> packages cross-base) which might not be needed here since we're not
> cross-building. I've tested this toolchain built without FLAGS_FOR_TARGET and it
> _seems_ to work fine.

I think it wouldn’t hurt to keep FLAGS_FOR_TARGET, but like you write,
it seems to be for cross-compilation only, so I guess it’s OK to remove
it here since ‘make-gcc-libc’ is meant to build native toolchains
anyway.

Toggle quote (14 lines)
> Until now the following wouldn't build:
>
> (use-modules (gnu packages commencement)
> (gnu packages gcc)
> (gnu packages base))
>
> (make-gcc-libc gcc-9 glibc-2.27)
>
> * gnu/packages/base.scm (make-gcc-libc)[phases]: Add environment
> variables to place the target libc on the system header search path.
> [make-flags]: Remove unncessary FLAGS_FOR_TARGET.
> [native-inputs]: Construct in a way that doesn't require emptying
> inputs.

LGTM, thank you!

Ludo’.
L
L
Ludovic Courtès wrote on 4 Nov 2019 23:22
Re: [bug#37924] [PATCH 2/2] ci: Add 'make-gcc-toolchain' packages
(name . Carl Dong)(address . contact@carldong.me)(name . 37924@debbugs.gnu.org)(address . 37924@debbugs.gnu.org)
87sgn34703.fsf@gnu.org
Hi,

Carl Dong <contact@carldong.me> skribis:

Toggle quote (3 lines)
> * gnu/ci.scm (%core-packages): Add 'glibc-2.28', a toolchain with
> default 'gcc', and a toolchain targeting 'glibc-2.28'.

The problem is ‘%core-packages’ is only built when we explicitly choose
the “core” subset in CI (which we do only when experimenting with
‘core-updates’ early on); in other cases, all the public packages get
built and ‘%core-packages’ does not matter.

Would it be an option to have:

(define-public gcc/glibc-2.28
(make-gcc-libc gcc glibc-2.28))

in (gnu packages base), or does that create circular dependency issues
(I don’t think so, but better be safe)?

If we did that, that package would automatically picked up in CI.

Thanks,
Ludo’.
L
L
Ludovic Courtès wrote on 16 Nov 2019 17:36
Re: [bug#37924] [PATCH] gnu: Fix make-gcc-libc
(name . Carl Dong)(address . contact@carldong.me)(address . 37924-done@debbugs.gnu.org)
87k17zwzgr.fsf@gnu.org
Carl Dong <contact@carldong.me> skribis:

Toggle quote (17 lines)
> Until now the following wouldn't build:
>
> (use-modules (gnu packages commencement)
> (gnu packages gcc)
> (gnu packages base))
>
> (make-gcc-libc gcc-9 glibc-2.27)
>
> * gnu/packages/base.scm (make-gcc-libc)[phases]: Add environment
> variables to place the target libc on the system header search path.
> [make-flags]: Remove unncessary FLAGS_FOR_TARGET.
> [native-inputs]: Construct in a way that doesn't require emptying
> inputs.
> ---
> gnu/packages/base.scm | 27 ++++++++++++++++-----------
> 1 file changed, 16 insertions(+), 11 deletions(-)

This was pushed as 2b1d708294f0aced5c991baed146e0ae4e7d63dd, closing!

Ludo’.
Closed
?