From mboxrd@z Thu Jan 1 00:00:00 1970 From: Manolis Ragkousis Subject: [PATCH] gnu: cross-libc: Cross build the correct libc for GNU/Hurd systems. Date: Wed, 8 Jun 2016 17:43:25 +0300 Message-ID: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------EFCC2C144A27F6B6773F6A55" Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:58287) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bAehl-0005Np-27 for guix-devel@gnu.org; Wed, 08 Jun 2016 10:43:38 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bAehi-0008NZ-B9 for guix-devel@gnu.org; Wed, 08 Jun 2016 10:43:36 -0400 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. --------------EFCC2C144A27F6B6773F6A55 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Hello everyone, This is a simplified version of the patch from wip-hurd for core-updates. I want to point some things out. In this version we only have one cross-libc which inherits from the correct libc in base.scm through the use of the glibc-macro. This simplifies things a lot. - (propagated-inputs `(("kernel-headers" ,xlinux-headers))) + (propagated-inputs `(("kernel-headers" ,(cross-kernel-headers target)))) The correct headers are determined by (cross-kernel-headers target). (native-inputs `(("cross-gcc" ,xgcc) ("cross-binutils" ,xbinutils) + ,@(if (string-match (or "i586-pc-gnu" "i586-gnu") target) + `(("cross-mig" ,xmig)) + '()) ,@(package-inputs glibc) ;FIXME: static-bash ,@(package-native-inputs glibc))))) cross-mig is added only when target is i586-gnu or i586-pc-gnu. @@ -343,12 +483,14 @@ XBINUTILS and the cross tool chain." "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)))) When target is Hurd, we need to setup CROSS_LIBRARY_PATH for libpthread to find libihash from hurd-core-headers/lib. The way I did it works for Hurd and doesn't create any problems when targeting Linux. - ,@(package-arguments glibc)) + ;; Package-arguments does not use the correct libc, so we use + ;; (cross-libc-for-target ...) to determine the correct one. + ,@(package-arguments (cross-libc-for-target target))) ,@(package-arguments glibc)) was not detecting the correct libc so I used (cross-libc-for-target target) to fix that. Maybe there is a better solution for this. WDYT? Thank you, Manolis --------------EFCC2C144A27F6B6773F6A55 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 63749df1aabfbceeefd500208bb66fb85a013e82 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. [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 | 149 ++++++++++++++++++++++++++++++++++++++= +++++- 1 file changed, 147 insertions(+), 2 deletions(-) diff --git a/gnu/packages/cross-base.scm b/gnu/packages/cross-base.scm index 58cd38b..db2e104 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,6 +314,141 @@ XBINUTILS and the cross tool chain." ("cross-binutils" ,xbinutils) ,@(package-native-inputs linux-libre-headers)))))= =20 + (define xgnumach-headers + (package (inherit gnumach-headers) + (name (string-append (package-name gnumach-headers) + "-cross-" target)) + + (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)))))) + + (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)))) + + (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)) + + (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))) + (package (inherit glibc) (name (string-append "glibc-cross-" target)) (arguments @@ -328,7 +466,9 @@ XBINUTILS and the cross tool chain." (guix build utils) (srfi srfi-26)) =20 - ,@(package-arguments glibc)) + ;; Package-arguments does not use the correct libc, so we use= + ;; (cross-libc-for-target ...) to determine the correct one. + ,@(package-arguments (cross-libc-for-target target))) ((#:configure-flags flags) `(cons ,(string-append "--host=3D" target) ,flags)) @@ -343,12 +483,14 @@ XBINUTILS and the cross tool chain." "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)))) =20 ;; 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))) + (propagated-inputs `(("kernel-headers" ,(cross-kernel-headers target= )))) =20 ;; FIXME: 'static-bash' should really be an input, not a native inpu= t, but ;; to do that will require building an intermediate cross libc. @@ -356,6 +498,9 @@ XBINUTILS and the cross tool chain." =20 (native-inputs `(("cross-gcc" ,xgcc) ("cross-binutils" ,xbinutils) + ,@(if (string-match (or "i586-pc-gnu" "i586-gnu") t= arget) + `(("cross-mig" ,xmig)) + '()) ,@(package-inputs glibc) ;FIXME: static-bash ,@(package-native-inputs glibc))))) =20 --=20 2.8.2 --------------EFCC2C144A27F6B6773F6A55--