From bdaf38a6e04052a22b62ae41c72f32cf16356314 Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Mon, 20 Dec 2021 14:37:40 +0100 Subject: build-system/meson: Define build variables when cross-compiling. Fixes . Reported by L p R n d n . * guix/build-system/meson.scm (meson-cross-build)[builder]: Define '%build-host-inputs', '%build-target-inputs', '%build-inputs', and '%outputs'. --- guix/build-system/meson.scm | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'guix/build-system') diff --git a/guix/build-system/meson.scm b/guix/build-system/meson.scm index ba7441a3eb..ad604f8871 100644 --- a/guix/build-system/meson.scm +++ b/guix/build-system/meson.scm @@ -287,6 +287,19 @@ SOURCE has a 'meson.build' file." #~(begin (use-modules #$@(sexp->gexp modules)) + (define %build-host-inputs + #+(input-tuples->gexp build-inputs)) + + (define %build-target-inputs + (append #$(input-tuples->gexp host-inputs) + #+(input-tuples->gexp target-inputs))) + + (define %build-inputs + (append %build-host-inputs %build-target-inputs)) + + (define %outputs + #$(outputs->gexp outputs)) + (define build-phases #$(let ((phases (if (pair? phases) (sexp->gexp phases) phases))) (if glib-or-gtk? -- cgit v1.2.3 From d0050ea8ad1c32d94cf5ba6725a0fc961bb23f38 Mon Sep 17 00:00:00 2001 From: Sarah Morgensen Date: Mon, 13 Dec 2021 20:11:47 -0500 Subject: build-system/go: Add #:substitutable? argument. * guix/build-system/go.scm (go-build): Add 'substitutable?' argument. (go-cross-build): Likewise. Signed-off-by: Leo Famulari --- guix/build-system/go.scm | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'guix/build-system') diff --git a/guix/build-system/go.scm b/guix/build-system/go.scm index 18824c79d9..0b2bf1c11b 100644 --- a/guix/build-system/go.scm +++ b/guix/build-system/go.scm @@ -172,7 +172,8 @@ commit hash and its date rather than a proper release tag." (imported-modules %go-build-system-modules) (modules '((guix build go-build-system) (guix build union) - (guix build utils)))) + (guix build utils))) + (substitutable? #t)) (define builder (with-imported-modules imported-modules #~(begin @@ -182,6 +183,7 @@ commit hash and its date rather than a proper release tag." #:system #$system #:phases #$phases #:outputs #$(outputs->gexp outputs) + #:substitutable? #$substitutable? #:goarch #$goarch #:goos #$goos #:search-paths '#$(sexp->gexp @@ -222,7 +224,8 @@ commit hash and its date rather than a proper release tag." (imported-modules %go-build-system-modules) (modules '((guix build go-build-system) (guix build union) - (guix build utils)))) + (guix build utils))) + (substitutable? #t)) "Cross-build NAME using GO, where TARGET is a GNU triplet and with INPUTS." (define builder #~(begin -- cgit v1.2.3 From d6121d7dd6998118de2c9327291cc942fff54e31 Mon Sep 17 00:00:00 2001 From: Sarah Morgensen Date: Sun, 19 Sep 2021 22:20:50 -0700 Subject: build-system/go: Add pre-built standard library as implicit input. * gnu/packages/golang.scm (make-go-std): New procedure. * guix/build-system/go.scm (make-go-std): New procedure. (lower): Use it. Add pre-built standard library to inputs. Signed-off-by: Leo Famulari --- gnu/packages/golang.scm | 30 ++++++++++++++++++++++++++++++ guix/build-system/go.scm | 16 ++++++++++++++-- 2 files changed, 44 insertions(+), 2 deletions(-) (limited to 'guix/build-system') diff --git a/gnu/packages/golang.scm b/gnu/packages/golang.scm index 87e4d5d3d0..d7770724d2 100644 --- a/gnu/packages/golang.scm +++ b/gnu/packages/golang.scm @@ -831,6 +831,36 @@ in the style of communicating sequential processes (@dfn{CSP}).") (define-public go go-1.14) +(define-public (make-go-std go) + "Return a package which builds the standard library for Go compiler GO." + (package + (name (string-append (package-name go) "-std")) + (version (package-version go)) + (source #f) + (build-system go-build-system) + (arguments + `(#:import-path "std" + #:build-flags `("-pkgdir" "pkg") ; "Install" to build directory. + #:allow-go-reference? #t + #:substitutable? #f ; Faster to build than download. + #:tests? #f ; Already tested in the main Go build. + #:go ,go + #:phases + (modify-phases %standard-phases + (delete 'unpack) + (replace 'install + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (out-cache (string-append out "/var/cache/go/build"))) + (copy-recursively (getenv "GOCACHE") out-cache) + (delete-file (string-append out-cache "/trim.txt")) + (delete-file (string-append out-cache "/README"))))) + (delete 'install-license-files)))) + (home-page (package-home-page go)) + (synopsis "Cached standard library build for Go") + (description (package-description go)) + (license (package-license go)))) + (define-public go-0xacab-org-leap-shapeshifter (let ((commit "0aa6226582efb8e563540ec1d3c5cfcd19200474") (revision "12")) diff --git a/guix/build-system/go.scm b/guix/build-system/go.scm index 0b2bf1c11b..09148f8730 100644 --- a/guix/build-system/go.scm +++ b/guix/build-system/go.scm @@ -4,6 +4,7 @@ ;;; Copyright © 2020 Jakub Kądziołka ;;; Copyright © 2021 Ludovic Courtès ;;; Copyright © 2021 Efraim Flashner +;;; Copyright © 2021 Sarah Morgensen ;;; ;;; This file is part of GNU Guix. ;;; @@ -112,6 +113,9 @@ commit hash and its date rather than a proper release tag." (let ((go (resolve-interface '(gnu packages golang)))) (module-ref go 'go))) +(define (make-go-std) + (module-ref (resolve-interface '(gnu packages golang)) 'make-go-std)) + (define* (lower name #:key source inputs native-inputs outputs system target (go (default-go)) @@ -121,6 +125,14 @@ commit hash and its date rather than a proper release tag." (define private-keywords '(#:target #:go #:inputs #:native-inputs)) + (define inputs-with-cache + ;; XXX: Avoid a circular dependency. This should be rewritten with + ;; 'package-mapping' or similar. + (let ((go-std-name (string-append (package-name go) "-std"))) + (if (string-prefix? go-std-name name) + inputs + (cons `(,go-std-name ,((make-go-std) go)) inputs)))) + (bag (name name) (system system) @@ -130,7 +142,7 @@ commit hash and its date rather than a proper release tag." '()) ,@`(("go" ,go)) ,@native-inputs - ,@(if target '() inputs) + ,@(if target '() inputs-with-cache) ,@(if target ;; Use the standard cross inputs of ;; 'gnu-build-system'. @@ -138,7 +150,7 @@ commit hash and its date rather than a proper release tag." '()) ;; Keep the standard inputs of 'gnu-build-system'. ,@(standard-packages))) - (host-inputs (if target inputs '())) + (host-inputs (if target inputs-with-cache '())) ;; The cross-libc is really a target package, but for bootstrapping ;; reasons, we can't put it in 'host-inputs'. Namely, 'cross-gcc' is a -- cgit v1.2.3 From 75416be16bf8df97ca31de6aa0a8b8cc731aec78 Mon Sep 17 00:00:00 2001 From: Philip McGrath Date: Sat, 8 Jan 2022 03:41:50 -0500 Subject: guix: node-build-system: Add implicit libuv input. * guix/build-system/node.scm (lower): Add the version of libuv used as an input to the #:node package as an additional implicit input, so that packages needing libuv always get the correct version. Signed-off-by: Liliana Marie Prikler --- guix/build-system/node.scm | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'guix/build-system') diff --git a/guix/build-system/node.scm b/guix/build-system/node.scm index 735f8dd06e..24bd677bfc 100644 --- a/guix/build-system/node.scm +++ b/guix/build-system/node.scm @@ -2,6 +2,8 @@ ;;; Copyright © 2016 Jelle Licht ;;; Copyright © 2019 Timothy Sample ;;; Copyright © 2021 Ludovic Courtès +;;; Copyright © 2021 Pierre Langlois +;;; Copyright © 2021 Philip McGrath ;;; ;;; This file is part of GNU Guix. ;;; @@ -61,10 +63,15 @@ `(("source" ,source)) '()) ,@inputs - ;; Keep the standard inputs of 'gnu-build-system'. ,@(standard-packages))) (build-inputs `(("node" ,node) + ;; Many packages with native addons need + ;; libuv headers. The libuv version must + ;; be exactly the same as for the node + ;; package we are adding implicitly, + ;; so we take care of adding libuv, too. + ("libuv" ,@(assoc-ref (package-inputs node) "libuv")) ,@native-inputs)) (outputs outputs) (build node-build) -- cgit v1.2.3 From 6128c274786fc0c109c0c4ce257e5d8b01ac86c3 Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Tue, 11 Jan 2022 11:31:39 +0100 Subject: build-system: Pass #:make-dynamic-linker-cache? #f when cross-compiling. Fixes . Reported by Maxime Devos . This is a followup to 1209447ad3f471d12e9408dd478b3cfcd7b7a07e. * guix/build-system/cmake.scm (cmake-cross-build)[builder]: Pass #:make-dynamic-linker-cache? #f. * guix/build-system/go.scm (go-cross-build)[builder]: Ditto. * guix/build-system/guile.scm (guile-cross-build)[builder]: Ditto. * guix/build-system/qt.scm (qt-cross-build)[builder]: Ditto. --- guix/build-system/cmake.scm | 3 ++- guix/build-system/go.scm | 3 ++- guix/build-system/guile.scm | 3 ++- guix/build-system/qt.scm | 3 ++- 4 files changed, 8 insertions(+), 4 deletions(-) (limited to 'guix/build-system') diff --git a/guix/build-system/cmake.scm b/guix/build-system/cmake.scm index 2056c04153..0aabc95b90 100644 --- a/guix/build-system/cmake.scm +++ b/guix/build-system/cmake.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2013, 2014, 2015, 2020, 2021 Ludovic Courtès +;;; Copyright © 2013-2015, 2020-2022 Ludovic Courtès ;;; Copyright © 2013 Cyril Roelandt ;;; Copyright © 2017 Ricardo Wurmus ;;; Copyright © 2020 Efraim Flashner @@ -240,6 +240,7 @@ build system." #:parallel-tests? #$parallel-tests? #:validate-runpath? #$validate-runpath? #:patch-shebangs? #$patch-shebangs? + #:make-dynamic-linker-cache? #f ;cross-compiling #:strip-binaries? #$strip-binaries? #:strip-flags #$strip-flags #:strip-directories #$strip-directories)))) diff --git a/guix/build-system/go.scm b/guix/build-system/go.scm index 09148f8730..5e0e5bbad3 100644 --- a/guix/build-system/go.scm +++ b/guix/build-system/go.scm @@ -2,7 +2,7 @@ ;;; Copyright © 2016 Petter ;;; Copyright © 2017 Leo Famulari ;;; Copyright © 2020 Jakub Kądziołka -;;; Copyright © 2021 Ludovic Courtès +;;; Copyright © 2021-2022 Ludovic Courtès ;;; Copyright © 2021 Efraim Flashner ;;; Copyright © 2021 Sarah Morgensen ;;; @@ -276,6 +276,7 @@ commit hash and its date rather than a proper release tag." #:unpack-path #$unpack-path #:build-flags #$build-flags #:tests? #$tests? + #:make-dynamic-linker-cache? #f ;cross-compiling #:allow-go-reference? #$allow-go-reference? #:inputs %build-inputs))) diff --git a/guix/build-system/guile.scm b/guix/build-system/guile.scm index f64f214675..36a88e181a 100644 --- a/guix/build-system/guile.scm +++ b/guix/build-system/guile.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2018, 2019, 2021 Ludovic Courtès +;;; Copyright © 2018-2019, 2021-2022 Ludovic Courtès ;;; ;;; This file is part of GNU Guix. ;;; @@ -162,6 +162,7 @@ #:native-search-paths '#$(map search-path-specification->sexp native-search-paths) + #:make-dynamic-linker-cache? #f ;cross-compiling #:phases #$phases)))) (mlet %store-monad ((guile (package->derivation (or guile (default-guile)) diff --git a/guix/build-system/qt.scm b/guix/build-system/qt.scm index 003a065aa6..a0b968cef3 100644 --- a/guix/build-system/qt.scm +++ b/guix/build-system/qt.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2013, 2014, 2015, 2021 Ludovic Courtès +;;; Copyright © 2013-2015, 2021-2022 Ludovic Courtès ;;; Copyright © 2013 Cyril Roelandt ;;; Copyright © 2017 Ricardo Wurmus ;;; Copyright © 2019 Hartmut Goebel @@ -247,6 +247,7 @@ build system." #:parallel-tests? #$parallel-tests? #:validate-runpath? #$validate-runpath? #:patch-shebangs? #$patch-shebangs? + #:make-dynamic-linker-cache? #f ;cross-compiling #:strip-binaries? #$strip-binaries? #:strip-flags #$strip-flags #:strip-directories #$strip-directories)))) -- cgit v1.2.3 From ee6c43f8cd46897bbe1a5a16c68049d7237ea806 Mon Sep 17 00:00:00 2001 From: Reily Siegel Date: Thu, 23 Dec 2021 14:29:02 -0500 Subject: build-system: clojure: Allow clojure-build-system to pass source to ant. Fixes . * guix/build-system/clojure.scm (lower): Remove #:source from private keywords, preventing an error in ant-build-system. Signed-off-by: Ricardo Wurmus --- guix/build-system/clojure.scm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'guix/build-system') diff --git a/guix/build-system/clojure.scm b/guix/build-system/clojure.scm index 39b7f44e89..634854cf1b 100644 --- a/guix/build-system/clojure.scm +++ b/guix/build-system/clojure.scm @@ -81,8 +81,7 @@ #:allow-other-keys #:rest arguments) "Return a bag for NAME." - (let ((private-keywords '(#:source #:target - #:inputs #:native-inputs + (let ((private-keywords '(#:target #:inputs #:native-inputs #:clojure #:jdk #:zip))) (if target -- cgit v1.2.3 From 2e86059172d901dcb24d29f7a477d2229b02cd6b Mon Sep 17 00:00:00 2001 From: Tobias Geerinckx-Rice Date: Thu, 23 Dec 2021 22:18:22 +0100 Subject: build-system/linux-module: Use G-expressions. * guix/build-system/linux-module.scm (make-linux-module-builder) [arguments]: Rewrite as G-expressions. --- guix/build-system/linux-module.scm | 93 +++++++++++++++++++------------------- 1 file changed, 46 insertions(+), 47 deletions(-) (limited to 'guix/build-system') diff --git a/guix/build-system/linux-module.scm b/guix/build-system/linux-module.scm index 57fce8e96e..e82a9ca65c 100644 --- a/guix/build-system/linux-module.scm +++ b/guix/build-system/linux-module.scm @@ -61,53 +61,52 @@ `(("linux" ,linux))) (arguments (substitute-keyword-arguments (package-arguments linux) - ((#:phases phases) - `(modify-phases ,phases - (replace 'build - (lambda _ - (invoke "make" "modules_prepare"))) - (delete 'strip) ; faster. - (replace 'install - (lambda* (#:key inputs outputs #:allow-other-keys) - (let* ((out (assoc-ref outputs "out")) - (out-lib-build (string-append out "/lib/modules/build"))) - ;; Delete some huge items that we probably don't need. - ;; TODO: Only preserve the minimum, i.e. [Kbuild], Kconfig, - ;; scripts, include, ".config". - (copy-recursively "." out-lib-build) - (for-each (lambda (name) - (when (file-exists? name) - (delete-file-recursively name))) - (map (lambda (name) - (string-append out-lib-build "/" name)) - '("arch" ; 137 MB - ;"tools" ; 44 MB ; Note: is built by our 'build phase. - "tools/testing" ; 14 MB - "tools/perf" ; 17 MB - "drivers" ; 600 MB - "Documentation" ; 52 MB - "fs" ; 43 MB - "net" ; 33 MB - "samples" ; 2 MB - "sound"))) ; 40 MB - ;; Reinstate arch/**/dts since "scripts/dtc" depends on it. - ;; Reinstate arch/**/include directories. - ;; Reinstate arch/**/Makefile. - ;; Reinstate arch/**/module.lds. - (for-each - (lambda (name) - (mkdir-p (dirname (string-append out-lib-build "/" name))) - (copy-recursively name - (string-append out-lib-build "/" name))) - (append (find-files "arch" "^(dts|include)$" #:directories? #t) - (find-files "arch" "^(Makefile|module.lds)$"))) - (let* ((linux (assoc-ref inputs "linux"))) - (install-file (string-append linux "/System.map") - out-lib-build) - (let ((source (string-append linux "/Module.symvers"))) - (when (file-exists? source) - (install-file source out-lib-build)))) - #t))))))))) + ((#:phases phases) + #~(modify-phases #$phases + (replace 'build + (lambda _ + (invoke "make" "modules_prepare"))) + (delete 'strip) ; faster + (replace 'install + (lambda* (#:key inputs #:allow-other-keys) + (let ((out-lib-build (string-append #$output "/lib/modules/build"))) + ;; Delete some huge items that we probably don't need. + ;; TODO: Only preserve the minimum, i.e. [Kbuild], Kconfig, + ;; scripts, include, ".config". + (copy-recursively "." out-lib-build) + (for-each (lambda (name) + (when (file-exists? name) + (delete-file-recursively name))) + (map (lambda (name) + (string-append out-lib-build "/" name)) + '("arch" ; 137 MB + ;;"tools" ; 44 MB built by our 'build phase + "tools/testing" ; 14 MB + "tools/perf" ; 17 MB + "drivers" ; 600 MB + "Documentation" ; 52 MB + "fs" ; 43 MB + "net" ; 33 MB + "samples" ; 2 MB + "sound"))) ; 40 MB + ;; Reinstate arch/**/dts since "scripts/dtc" depends on it. + ;; Reinstate arch/**/include directories. + ;; Reinstate arch/**/Makefile. + ;; Reinstate arch/**/module.lds. + (for-each + (lambda (name) + (mkdir-p (dirname (string-append out-lib-build "/" name))) + (copy-recursively name + (string-append out-lib-build "/" name))) + (append (find-files "arch" "^(dts|include)$" + #:directories? #t) + (find-files "arch" "^(Makefile|module.lds)$"))) + (let* ((linux #$(this-package-input "linux"))) + (install-file (string-append linux "/System.map") + out-lib-build) + (let ((source (string-append linux "/Module.symvers"))) + (when (file-exists? source) + (install-file source out-lib-build))))))))))))) (define* (lower name #:key source inputs native-inputs outputs -- cgit v1.2.3 From 0f2df54f8397560e6e8473e2982c66af01d9cd0a Mon Sep 17 00:00:00 2001 From: Reily Siegel Date: Tue, 18 Jan 2022 13:17:24 -0500 Subject: build-system/clojure: Support compiling Java. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * guix/build/clojure-build-system.scm (compile-java): New variable. (build): Copy classes compiled from Java and optionally Java sources to the final jar. (%standard-phases): Add compile-java phase before build. * guix/build/clojure-utils.scm (%java-source-dirs): New variable. (%java-compile-dir): New variable. * guix/build-system/clojure.scm (clojure-build): Include %java-source-dirs and %java-compile-dir. (builder): Include %java-source-dirs and %java-compile-dir. Signed-off-by: Ludovic Courtès --- guix/build-system/clojure.scm | 6 +++++- guix/build/clojure-build-system.scm | 36 +++++++++++++++++++++++++++++------- guix/build/clojure-utils.scm | 10 ++++++++++ 3 files changed, 44 insertions(+), 8 deletions(-) (limited to 'guix/build-system') diff --git a/guix/build-system/clojure.scm b/guix/build-system/clojure.scm index 634854cf1b..2a0713d297 100644 --- a/guix/build-system/clojure.scm +++ b/guix/build-system/clojure.scm @@ -107,8 +107,10 @@ #:key source (source-dirs `',%source-dirs) + (java-source-dirs `',%java-source-dirs) (test-dirs `',%test-dirs) (compile-dir %compile-dir) + (java-compile-dir %java-compile-dir) (jar-names `',(package-name->jar-names name)) (main-class %main-class) @@ -142,9 +144,11 @@ #:source #+source #:source-dirs #$source-dirs + #:java-source-dirs #$java-source-dirs #:test-dirs #$test-dirs #:compile-dir #$compile-dir - + #:java-compile-dir #$java-compile-dir + #:jar-names #$jar-names #:main-class #$main-class #:omit-source? #$omit-source? diff --git a/guix/build/clojure-build-system.scm b/guix/build/clojure-build-system.scm index dd01f95de8..7d494078ea 100644 --- a/guix/build/clojure-build-system.scm +++ b/guix/build/clojure-build-system.scm @@ -34,8 +34,24 @@ ;; ;; Code: +(define* (compile-java #:key + java-source-dirs java-compile-dir + #:allow-other-keys) + "Compile java sources for use in clojure-build-system." + (let ((java-files (append-map (lambda (dir) + (find-files dir "\\.java$")) + java-source-dirs))) + (mkdir-p java-compile-dir) + (when (not (null? java-files)) + (apply invoke + "javac" + "-verbose" + "-d" java-compile-dir + java-files)))) + (define* (build #:key - source-dirs compile-dir + source-dirs java-source-dirs + compile-dir java-compile-dir jar-names main-class omit-source? aot-include aot-exclude #:allow-other-keys) @@ -46,19 +62,24 @@ #:all-list libs))) (mkdir-p compile-dir) (eval-with-clojure `(run! compile ',libs*) - source-dirs) + (cons* compile-dir + java-compile-dir + source-dirs)) (let ((source-dir-files-alist (map (lambda (dir) (cons dir (find-files* dir))) - source-dirs)) + (append source-dirs + java-source-dirs))) ;; workaround transitive compilation in Clojure (classes (filter (lambda (class) (any (cut compiled-from? class <>) libs*)) (find-files* compile-dir)))) - (for-each (cut create-jar <> (cons (cons compile-dir classes) - (if omit-source? - '() - source-dir-files-alist)) + (for-each (cut create-jar <> (cons* (cons compile-dir classes) + (cons java-compile-dir + (find-files* java-compile-dir)) + (if omit-source? + '() + source-dir-files-alist)) #:main-class main-class) jar-names) #t))) @@ -94,6 +115,7 @@ priority over TEST-INCLUDE." (define-with-docs %standard-phases "Standard build phases for clojure-build-system." (modify-phases %standard-phases@ant + (add-before 'build 'compile-java compile-java) (replace 'build build) (replace 'check check) (replace 'install install) diff --git a/guix/build/clojure-utils.scm b/guix/build/clojure-utils.scm index 8817cab52a..c5322141d3 100644 --- a/guix/build/clojure-utils.scm +++ b/guix/build/clojure-utils.scm @@ -32,8 +32,10 @@ install-doc %source-dirs + %java-source-dirs %test-dirs %compile-dir + %java-compile-dir package-name->jar-names %main-class %omit-source? @@ -101,6 +103,10 @@ DOC-REGEX can be compiled or uncompiled." "A default list of source directories." '("src/")) +(define-with-docs %java-source-dirs + "A default list of java source directories." + '()) + (define-with-docs %test-dirs "A default list of test directories." '("test/")) @@ -109,6 +115,10 @@ DOC-REGEX can be compiled or uncompiled." "Default directory for holding class files." "classes/") +(define-with-docs %java-compile-dir + "Default directory for holding java class files." + "java-classes/") + (define (package-name->jar-names name) "Given NAME, a package name like \"foo-0.9.1b\", return the list of default jar names: (\"foo-0.9.1b.jar\" \"foo.jar\")." -- cgit v1.2.3