From b7a8cc315477a6b00843053c2ad183c83afca022 Mon Sep 17 00:00:00 2001 From: "Jan (janneke) Nieuwenhuizen" Date: Thu, 23 Dec 2021 09:50:05 +0100 Subject: gnu: commencement: gcc-core-mesboot0: Support ARM. * gnu/packages/patches/gcc-boot-2.95.3-arm.patch: New file. * gnu/local.mk (dist_patch_DATA): Add it. * gnu/packages/commencement.scm (gcc-core-mesboot0)[arguments]: Use it in "apply-patches" stage, renamed from "apply-boot-patch". Parameterize configure-flags' --build,--host,--target. [supported-systems]: Add aarch64-linux, armhf-linux. --- gnu/local.mk | 1 + gnu/packages/commencement.scm | 240 ++++++++++++++++++++++-------------------- 2 files changed, 127 insertions(+), 114 deletions(-) diff --git a/gnu/local.mk b/gnu/local.mk index 0297a9a380..9cb9413ca3 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1089,6 +1089,7 @@ dist_patch_DATA = \ %D%/packages/patches/gcc-arm-link-spec-fix.patch \ %D%/packages/patches/gcc-asan-missing-include.patch \ %D%/packages/patches/gcc-boot-2.95.3.patch \ + %D%/packages/patches/gcc-boot-2.95.3-arm.patch \ %D%/packages/patches/gcc-boot-4.6.4.patch \ %D%/packages/patches/gcc-cross-environment-variables.patch \ %D%/packages/patches/gcc-cross-gxx-include-dir.patch \ diff --git a/gnu/packages/commencement.scm b/gnu/packages/commencement.scm index 35c4507a97..8de6adb251 100644 --- a/gnu/packages/commencement.scm +++ b/gnu/packages/commencement.scm @@ -1024,122 +1024,134 @@ (define gcc-core-mesboot0 ;; library, such as dir.h/struct DIR/readdir, locales, signals... Also, ;; with gcc-2.95.3, binutils (2.14.0, 2.20.1a) and glibc-2.2.5 we found a ;; GNU toolchain triplet "that works". - (package - (inherit gcc) - (name "gcc-core-mesboot0") - (version "2.95.3") - (source (origin - (method url-fetch) - (uri (string-append "mirror://gnu/gcc/gcc-2.95.3/gcc-core-" - version - ".tar.gz")) - ;; `patches' needs XZ - ;; (patches (search-patches "gcc-boot-2.95.3.patch")) - (sha256 - (base32 - "1xvfy4pqhrd5v2cv8lzf63iqg92k09g6z9n2ah6ndd4h17k1x0an")))) - (supported-systems '("i686-linux" "x86_64-linux")) - (inputs '()) - (propagated-inputs '()) - (native-inputs `(("binutils" ,binutils-mesboot0) - ,@(%boot-tcc-inputs))) - (outputs '("out")) - (arguments - (list #:implicit-inputs? #f - #:guile %bootstrap-guile - #:tests? #f - #:parallel-build? #f - #:strip-binaries? #f - #:configure-flags - #~(let ((out (assoc-ref %outputs "out"))) - `("--enable-static" - "--disable-shared" - "--disable-werror" - "--build=i686-unknown-linux-gnu" - "--host=i686-unknown-linux-gnu" - ,(string-append "--prefix=" out))) - #:make-flags - #~`("CC=tcc -static -D __GLIBC_MINOR__=6" - "OLDCC=tcc -static -D __GLIBC_MINOR__=6" - "CC_FOR_BUILD=tcc -static -D __GLIBC_MINOR__=6" - "AR=ar" - "RANLIB=ranlib" - ,(string-append "LIBGCC2_INCLUDES=-I " - (assoc-ref %build-inputs "tcc") - "/include") - "LANGUAGES=c" - ,(string-append "BOOT_LDFLAGS=" - " -B" (assoc-ref %build-inputs "tcc") - "/lib/")) - #:modules '((guix build gnu-build-system) - (guix build utils) - (srfi srfi-1)) - #:phases - #~(modify-phases %standard-phases - (add-after 'unpack 'apply-boot-patch - (lambda* (#:key inputs #:allow-other-keys) - (let ((patch-file - #$(local-file - (search-patch "gcc-boot-2.95.3.patch")))) - (invoke "patch" "--force" "-p1" "-i" patch-file)))) - (add-before 'configure 'setenv - (lambda* (#:key outputs #:allow-other-keys) - (let* ((out (assoc-ref outputs "out")) - (bash (assoc-ref %build-inputs "bash")) - (shell (string-append bash "/bin/bash")) - (tcc (assoc-ref %build-inputs "tcc")) - (cppflags " -D __GLIBC_MINOR__=6")) - (setenv "CONFIG_SHELL" shell) - (setenv "CPPFLAGS" cppflags) - (setenv "CC" (string-append "tcc" cppflags)) - (setenv "CC_FOR_BUILD" (string-append "tcc" cppflags)) - (setenv "CPP" (string-append "tcc -E" cppflags)) - (with-output-to-file "config.cache" - (lambda _ - (display " + (let ((triplet (match (%current-system) + ((or "armhf-linux" "aarch64-linux") + "arm-unknown-linux-gnu") + ((or "i686-linux" "x86_64-linux") + "i686-unknown-linux-gnu")))) + (package + (inherit gcc) + (name "gcc-core-mesboot0") + (version "2.95.3") + (source (origin + (method url-fetch) + (uri (string-append "mirror://gnu/gcc/gcc-2.95.3/gcc-core-" + version + ".tar.gz")) + ;; `patches' needs XZ + ;; (patches (search-patches "gcc-boot-2.95.3.patch")) + (sha256 + (base32 + "1xvfy4pqhrd5v2cv8lzf63iqg92k09g6z9n2ah6ndd4h17k1x0an")))) + (supported-systems '("armhf-linux" "aarch64-linux" + "i686-linux" "x86_64-linux")) + (inputs '()) + (propagated-inputs '()) + (native-inputs `(("binutils" ,binutils-mesboot0) + ,@(%boot-tcc-inputs))) + (outputs '("out")) + (arguments + (list #:implicit-inputs? #f + #:guile %bootstrap-guile + #:tests? #f + #:parallel-build? #f + #:strip-binaries? #f + #:configure-flags + #~(let ((out (assoc-ref %outputs "out"))) + `("--enable-static" + "--disable-shared" + "--disable-werror" + ,(string-append "--build=" #$triplet) + ,(string-append "--host=" #$triplet) + ;; ,(string-append "--target=" triplet) + ,(string-append "--prefix=" out))) + #:make-flags + #~`("CC=tcc -static -D __GLIBC_MINOR__=6" + "OLDCC=tcc -static -D __GLIBC_MINOR__=6" + "CC_FOR_BUILD=tcc -static -D __GLIBC_MINOR__=6" + "AR=ar" + "RANLIB=ranlib" + ,(string-append "LIBGCC2_INCLUDES=-I " + (assoc-ref %build-inputs "tcc") + "/include") + "LANGUAGES=c" + ,(string-append "BOOT_LDFLAGS=" + " -B" (assoc-ref %build-inputs "tcc") + "/lib/")) + #:modules '((guix build gnu-build-system) + (guix build utils) + (srfi srfi-1)) + #:phases + #~(modify-phases %standard-phases + (add-after 'unpack 'apply-boot-patch + (lambda* (#:key inputs #:allow-other-keys) + (let ((patch-file + #$(local-file + (search-patch "gcc-boot-2.95.3.patch")))) + (invoke "patch" "--force" "-p1" "-i" patch-file)) + (let ((patch-file + #$(local-file + (search-patch "gcc-boot-2.95.3-arm.patch")))) + (invoke "patch" "--force" "-p1" "-i" patch-file)))) + (add-before 'configure 'setenv + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (bash (assoc-ref %build-inputs "bash")) + (shell (string-append bash "/bin/bash")) + (tcc (assoc-ref %build-inputs "tcc")) + (cppflags " -D __GLIBC_MINOR__=6")) + (setenv "CONFIG_SHELL" shell) + (setenv "CPPFLAGS" cppflags) + (setenv "CC" (string-append "tcc" cppflags)) + (setenv "CC_FOR_BUILD" (string-append "tcc" cppflags)) + (setenv "CPP" (string-append "tcc -E" cppflags)) + (setenv "enable_threads" "single") + (with-output-to-file "config.cache" + (lambda _ + (display " ac_cv_c_float_format='IEEE (little-endian)' ")))))) - ;; gcc-2.95.3 - (replace 'configure ; needs classic invocation of configure - (lambda* (#:key configure-flags #:allow-other-keys) - (format (current-error-port) - "running ./configure ~a\n" (string-join configure-flags)) - (apply invoke "./configure" configure-flags))) - (add-after 'configure 'remove-info - (lambda _ - ;; no info at this stage - (delete-file-recursively "texinfo") - (invoke "touch" "gcc/cpp.info" "gcc/gcc.info"))) - (add-after 'install 'install2 - (lambda* (#:key outputs #:allow-other-keys) - (let* ((tcc (assoc-ref %build-inputs "tcc")) - (tcc-lib (string-append tcc "/lib/x86-mes-gcc")) - (out (assoc-ref outputs "out")) - (gcc-dir (string-append - out "/lib/gcc-lib/i686-unknown-linux-gnu/2.95.3"))) - (mkdir-p "tmp") - (with-directory-excursion "tmp" - (invoke "ar" "x" (string-append "../gcc/libgcc2.a")) - (invoke "ar" "x" (string-append tcc "/lib/libtcc1.a")) - (apply invoke "ar" "r" (string-append gcc-dir "/libgcc.a") - (find-files "." "\\.o"))) - (copy-file "gcc/libgcc2.a" (string-append out "/lib/libgcc2.a")) - (copy-file (string-append tcc "/lib/libtcc1.a") - (string-append out "/lib/libtcc1.a")) - (invoke "ar" "x" (string-append tcc "/lib/libtcc1.a")) - (invoke "ar" "x" (string-append tcc "/lib/libc.a")) - (invoke "ar" "r" (string-append gcc-dir "/libc.a") - "libc.o" "libtcc1.o"))))))) - (native-search-paths - (list (search-path-specification - (variable "C_INCLUDE_PATH") - (files '("include" - - ;; Needed to get things like GCC's . - "lib/gcc-lib/i686-unknown-linux-gnu/2.95.3/include"))) - (search-path-specification - (variable "LIBRARY_PATH") - (files '("lib"))))))) + ;; gcc-2.95.3 + (replace 'configure ; needs classic invocation of configure + (lambda* (#:key configure-flags #:allow-other-keys) + (format (current-error-port) + "running ./configure ~a\n" (string-join configure-flags)) + (apply invoke "./configure" configure-flags))) + (add-after 'configure 'remove-info + (lambda _ + ;; no info at this stage + (delete-file-recursively "texinfo") + (invoke "touch" "gcc/cpp.info" "gcc/gcc.info"))) + (add-after 'install 'install2 + (lambda* (#:key outputs #:allow-other-keys) + (let* ((tcc (assoc-ref %build-inputs "tcc")) + (out (assoc-ref outputs "out")) + (gcc-dir (string-append + out "/lib/gcc-lib/" #$triplet "/2.95.3"))) + (mkdir-p "tmp") + (with-directory-excursion "tmp" + (invoke "ar" "x" (string-append "../gcc/libgcc2.a")) + (invoke "ar" "x" (string-append tcc "/lib/tcc/libtcc1.a")) + (copy-file "../gcc/libgcc.a" "libgcc.a") + (apply invoke "ar" "r" "libgcc.a" (find-files "." "\\.o")) + (copy-file "libgcc.a" (string-append gcc-dir "/libgcc.a"))) + (copy-file "gcc/libgcc2.a" + (string-append out "/lib/libgcc2.a")) + (copy-file (string-append tcc "/lib/tcc/libtcc1.a") + (string-append out "/lib/libtcc1.a")) + (invoke "ar" "x" (string-append tcc "/lib/tcc/libtcc1.a")) + (invoke "ar" "x" (string-append tcc "/lib/libc.a")) + (invoke "ar" "r" (string-append gcc-dir "/libc.a") + "libc.o" "libtcc1.o"))))))) + (native-search-paths + (list (search-path-specification + (variable "C_INCLUDE_PATH") + (files `("include" + ;; Needed to get things like GCC's . + ,(string-append "lib/gcc-lib/" triplet "/2.95.3/include")))) + (search-path-specification + (variable "LIBRARY_PATH") + (files '("lib")))))))) (define (%boot-mesboot-core-inputs) `(("binutils" ,binutils-mesboot0) -- cgit v1.2.3