From mboxrd@z Thu Jan 1 00:00:00 1970 From: Manolis Ragkousis Subject: Re: [PATCH] gnu: cross-libc: Cross build the correct libc for GNU/Hurd systems. Date: Sun, 12 Jun 2016 14:48:29 +0300 Message-ID: <530b45d9-81f7-2415-c9ef-6c50a76a2e99@gmail.com> References: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------DF7FABB1EF7FC0254BA43742" Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:37966) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bC3sd-0006Vt-QA for guix-devel@gnu.org; Sun, 12 Jun 2016 07:48:41 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bC3sc-0003VG-2M for guix-devel@gnu.org; Sun, 12 Jun 2016 07:48:39 -0400 In-Reply-To: List-Id: "Development of GNU Guix and the GNU System distribution." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org Sender: "Guix-devel" To: guix-devel@gnu.org This is a multi-part message in MIME format. --------------DF7FABB1EF7FC0254BA43742 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Hello everyone, The previous version of my patch was not using target to correctly determine which glibc to inherit. It was using %current-target-system which caused me many problems. With this version I modified it to use cross-libc-for-target so there will not be any problems in case %current-target-system is not set. Thank you, Manolis --------------DF7FABB1EF7FC0254BA43742 Content-Type: text/x-patch; name="0001-gnu-cross-libc-Cross-build-the-correct-libc-for-GNU-.patch" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename*0="0001-gnu-cross-libc-Cross-build-the-correct-libc-for-GNU-.pa"; filename*1="tch" =46rom 92689506f1969ac67631f77024511a5c96f341e8 Mon Sep 17 00:00:00 2001 From: Manolis Ragkousis Date: Wed, 8 Jun 2016 17:15:00 +0300 Subject: [PATCH] gnu: cross-libc: Cross build the correct libc for GNU/Hu= rd systems. * gnu/packages/cross-base.scm (cross-libc): Add xgnumach-headers, xmig, xhurd-headers, xglibc/hurd-headers, xhurd-minimal, xhurd-core-headers, cross-kernel-headers and cross-libc-for-target. Use "cross-libc-for-ta= rget" to determine the correct libc to use. [arguments]: Set "CROSS_LIBRARY_PATH". [propagated-inputs]: Use "cross-kernel-headers" to determine the correc= t headers. [native-inputs]: Use "cross-mig" when target is GNU/Hurd. --- gnu/packages/cross-base.scm | 226 ++++++++++++++++++++++++++++++++++++--= ------ 1 file changed, 185 insertions(+), 41 deletions(-) diff --git a/gnu/packages/cross-base.scm b/gnu/packages/cross-base.scm index 9d0f86a..a1e02c3 100644 --- a/gnu/packages/cross-base.scm +++ b/gnu/packages/cross-base.scm @@ -2,6 +2,7 @@ ;;; Copyright =C2=A9 2013, 2014, 2015, 2016 Ludovic Court=C3=A8s ;;; Copyright =C2=A9 2014, 2015 Mark H Weaver ;;; Copyright =C2=A9 2016 Jan Nieuwenhuizen +;;; Copyright =C2=A9 2016 Manolis Fragkiskos Ragkousis ;;; ;;; This file is part of GNU Guix. ;;; @@ -25,6 +26,7 @@ #:use-module (gnu packages base) #:use-module (gnu packages commencement) #:use-module (gnu packages linux) + #:use-module (gnu packages hurd) #:use-module (guix packages) #:use-module (guix download) #:use-module (guix utils) @@ -33,6 +35,7 @@ #:use-module (srfi srfi-1) #:use-module (srfi srfi-26) #:use-module (ice-9 match) + #:use-module (ice-9 regex) #:export (cross-binutils cross-libc cross-gcc)) @@ -311,53 +314,194 @@ XBINUTILS and the cross tool chain." ("cross-binutils" ,xbinutils) ,@(package-native-inputs linux-libre-headers)))))= =20 - (package (inherit glibc) - (name (string-append "glibc-cross-" target)) - (arguments - (substitute-keyword-arguments - `(;; Disable stripping (see above.) - #:strip-binaries? #f + (define xgnumach-headers + (package (inherit gnumach-headers) + (name (string-append (package-name gnumach-headers) + "-cross-" target)) =20 - ;; This package is used as a target input, but it should not = have - ;; the usual cross-compilation inputs since that would includ= e - ;; itself. - #:implicit-cross-inputs? #f + (native-inputs `(("cross-gcc" ,xgcc) + ("cross-binutils" ,xbinutils) + ,@(package-native-inputs gnumach-headers))))) + + (define xmig + (package (inherit mig) + (name (string-append "mig-cross")) + (arguments + `(#:modules ((guix build gnu-build-system) + (guix build utils) + (srfi srfi-26)) + #:phases (alist-cons-before + 'configure 'set-cross-headers-path + (lambda* (#:key inputs #:allow-other-keys) + (let* ((mach (assoc-ref inputs "cross-gnumach-heade= rs")) + (cpath (string-append mach "/include"))) + (for-each (cut setenv <> cpath) + '("CROSS_C_INCLUDE_PATH" + "CROSS_CPLUS_INCLUDE_PATH" + "CROSS_OBJC_INCLUDE_PATH" + "CROSS_OBJCPLUS_INCLUDE_PATH")))) + %standard-phases) + #:configure-flags (list ,(string-append "--target=3D" target)) + ,@(package-arguments mig))) + + (propagated-inputs `(("cross-gnumach-headers" ,xgnumach-headers)))= + (native-inputs `(("cross-gcc" ,xgcc) + ("cross-binutils" ,xbinutils) + ,@(package-native-inputs mig))))) + + (define xhurd-headers + (package (inherit hurd-headers) + (name (string-append (package-name hurd-headers) + "-cross-" target)) + + (propagated-inputs `(("cross-mig" ,xmig))) + (native-inputs `(("cross-gcc" ,xgcc) + ("cross-binutils" ,xbinutils) + ("cross-mig" ,xmig) + ,@(alist-delete "mig"(package-native-inputs hurd-= headers)))))) =20 - ;; We need SRFI 26. - #:modules ((guix build gnu-build-system) + (define xglibc/hurd-headers + (package (inherit glibc/hurd-headers) + (name (string-append (package-name glibc/hurd-headers) + "-cross-" target)) + + (arguments + (substitute-keyword-arguments + `(#:modules ((guix build gnu-build-system) + (guix build utils) + (srfi srfi-26)) + ,@(package-arguments glibc/hurd-headers)) + ((#:phases phases) + `(alist-cons-before + 'pre-configure 'set-cross-headers-path + (lambda* (#:key inputs #:allow-other-keys) + (let* ((mach (assoc-ref inputs "gnumach-headers")) + (hurd (assoc-ref inputs "hurd-headers")) + (cpath (string-append mach "/include:" + hurd "/include"))) + (for-each (cut setenv <> cpath) + '("CROSS_C_INCLUDE_PATH" + "CROSS_CPLUS_INCLUDE_PATH" + "CROSS_OBJC_INCLUDE_PATH" + "CROSS_OBJCPLUS_INCLUDE_PATH")))) + ,phases)))) + + (propagated-inputs `(("gnumach-headers" ,xgnumach-headers) + ("hurd-headers" ,xhurd-headers))) + + (native-inputs `(("cross-gcc" ,xgcc) + ("cross-binutils" ,xbinutils) + ("cross-mig" ,xmig) + ,@(alist-delete "mig"(package-native-inputs glibc= /hurd-headers)))))) + + (define xhurd-minimal + (package (inherit hurd-minimal) + (name (string-append (package-name hurd-minimal) + "-cross-" target)) + (arguments + (substitute-keyword-arguments + `(#:modules ((guix build gnu-build-system) (guix build utils) (srfi srfi-26)) + ,@(package-arguments hurd-minimal)) + ((#:phases phases) + `(alist-cons-before + 'configure 'set-cross-headers-path + (lambda* (#:key inputs #:allow-other-keys) + (let* ((glibc-headers (assoc-ref inputs "cross-glibc-hurd-= headers")) + (cpath (string-append glibc-headers "/include"))) + (for-each (cut setenv <> cpath) + '("CROSS_C_INCLUDE_PATH" + "CROSS_CPLUS_INCLUDE_PATH" + "CROSS_OBJC_INCLUDE_PATH" + "CROSS_OBJCPLUS_INCLUDE_PATH")))) + ,phases)))) =20 - ,@(package-arguments glibc)) - ((#:configure-flags flags) - `(cons ,(string-append "--host=3D" target) - ,flags)) - ((#:phases phases) - `(alist-cons-before - 'configure 'set-cross-kernel-headers-path - (lambda* (#:key inputs #:allow-other-keys) - (let* ((kernel (assoc-ref inputs "kernel-headers")) - (cpath (string-append kernel "/include"))) - (for-each (cut setenv <> cpath) - '("CROSS_C_INCLUDE_PATH" - "CROSS_CPLUS_INCLUDE_PATH" - "CROSS_OBJC_INCLUDE_PATH" - "CROSS_OBJCPLUS_INCLUDE_PATH")) - #t)) - ,phases)))) - - ;; Shadow the native "kernel-headers" because glibc's recipe expects= the - ;; "kernel-headers" input to point to the right thing. - (propagated-inputs `(("kernel-headers" ,xlinux-headers))) - - ;; FIXME: 'static-bash' should really be an input, not a native inpu= t, but - ;; to do that will require building an intermediate cross libc. - (inputs '()) + (inputs `(("cross-glibc-hurd-headers" ,xglibc/hurd-headers))) + + (native-inputs `(("cross-gcc" ,xgcc) + ("cross-binutils" ,xbinutils) + ("cross-mig" ,xmig) + ,@(alist-delete "mig"(package-native-inputs hurd-= minimal)))))) + + (define xhurd-core-headers + (package (inherit hurd-core-headers) + (name (string-append (package-name hurd-core-headers) + "-cross-" target)) =20 - (native-inputs `(("cross-gcc" ,xgcc) - ("cross-binutils" ,xbinutils) - ,@(package-inputs glibc) ;FIXME: static-bash - ,@(package-native-inputs glibc))))) + (inputs `(("gnumach-headers" ,xgnumach-headers) + ("hurd-headers" ,xhurd-headers) + ("hurd-minimal" ,xhurd-minimal))) + + (native-inputs `(("cross-gcc" ,xgcc) + ("cross-binutils" ,xbinutils) + ,@(package-native-inputs hurd-core-headers))))) + + (define (cross-kernel-headers target) + "Return headers depending on TARGET." + (match target + ((or "i586-pc-gnu" "i586-gnu") xhurd-core-headers) + (_ xlinux-headers))) + + (define (cross-libc-for-target target) + "Return libc depending on TARGET." + (match target + ((or "i586-pc-gnu" "i586-gnu") glibc/hurd) + (_ glibc/linux))) + + (let ((libc (cross-libc-for-target target))) + (package (inherit libc) + (name (string-append "glibc-cross-" target)) + (arguments + (substitute-keyword-arguments + `(;; Disable stripping (see above.) + #:strip-binaries? #f + + ;; This package is used as a target input, but it should no= t have + ;; the usual cross-compilation inputs since that would incl= ude + ;; itself. + #:implicit-cross-inputs? #f + + ;; We need SRFI 26. + #:modules ((guix build gnu-build-system) + (guix build utils) + (srfi srfi-26)) + + ,@(package-arguments libc)) + ((#:configure-flags flags) + `(cons ,(string-append "--host=3D" target) + ,flags)) + ((#:phases phases) + `(alist-cons-before + 'configure 'set-cross-kernel-headers-path + (lambda* (#:key inputs #:allow-other-keys) + (let* ((kernel (assoc-ref inputs "kernel-headers")) + (cpath (string-append kernel "/include"))) + (for-each (cut setenv <> cpath) + '("CROSS_C_INCLUDE_PATH" + "CROSS_CPLUS_INCLUDE_PATH" + "CROSS_OBJC_INCLUDE_PATH" + "CROSS_OBJCPLUS_INCLUDE_PATH")) + ;; We need this for GNU/Hurd. + (setenv "CROSS_LIBRARY_PATH" (string-append kernel "/lib= ")) + #t)) + ,phases)))) + + ;; Shadow the native "kernel-headers" because glibc's recipe expec= ts the + ;; "kernel-headers" input to point to the right thing. + (propagated-inputs `(("kernel-headers" ,(cross-kernel-headers targ= et)))) + + ;; FIXME: 'static-bash' should really be an input, not a native in= put, but + ;; to do that will require building an intermediate cross libc. + (inputs '()) + + (native-inputs `(("cross-gcc" ,xgcc) + ("cross-binutils" ,xbinutils) + ,@(if (string-match (or "i586-pc-gnu" "i586-gnu")= target) + `(("cross-mig" ,xmig)) + '()) + ,@(package-inputs libc) ;FIXME: static-bash + ,@(package-native-inputs libc)))))) =20 =0C ;;; --=20 2.8.3 --------------DF7FABB1EF7FC0254BA43742--