From patchwork Sat Nov 18 22:54:03 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ekaitz Zarraga X-Patchwork-Id: 19669 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id 37C7627BBE9; Sat, 18 Nov 2023 22:57:24 +0000 (GMT) X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-2.7 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,SPF_HELO_PASS,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.6 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTPS id E713427BBE2 for ; Sat, 18 Nov 2023 22:57:21 +0000 (GMT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1r4UFL-0008HS-0j; Sat, 18 Nov 2023 17:57:03 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1r4UFJ-0008H9-8u for guix-patches@gnu.org; Sat, 18 Nov 2023 17:57:01 -0500 Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1r4UFI-0001BV-WE for guix-patches@gnu.org; Sat, 18 Nov 2023 17:57:01 -0500 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1r4UFJ-0007NB-Sa; Sat, 18 Nov 2023 17:57:01 -0500 X-Loop: help-debbugs@gnu.org Subject: [bug#67266] [PATCH v2] build: zig-build-system: Add cross-compilation support References: <63433041faa8438f7d4987f02a8d0891802316c1.1700346830.git.ekaitz@elenq.tech> In-Reply-To: <63433041faa8438f7d4987f02a8d0891802316c1.1700346830.git.ekaitz@elenq.tech> Resent-From: Ekaitz Zarraga Original-Sender: "Debbugs-submit" Resent-CC: ekaitz@elenq.tech, guix-patches@gnu.org Resent-Date: Sat, 18 Nov 2023 22:57:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 67266 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 67266@debbugs.gnu.org Cc: Ekaitz Zarraga , Ekaitz Zarraga X-Debbugs-Original-Xcc: Ekaitz Zarraga Received: via spool by 67266-submit@debbugs.gnu.org id=B67266.170034817128271 (code B ref 67266); Sat, 18 Nov 2023 22:57:01 +0000 Received: (at 67266) by debbugs.gnu.org; 18 Nov 2023 22:56:11 +0000 Received: from localhost ([127.0.0.1]:49636 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r4UEV-0007Lv-9X for submit@debbugs.gnu.org; Sat, 18 Nov 2023 17:56:11 -0500 Received: from dane.soverin.net ([185.233.34.21]:43835) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r4UEQ-0007LK-Rl for 67266@debbugs.gnu.org; Sat, 18 Nov 2023 17:56:09 -0500 Received: from smtp.soverin.net (c04smtp-lb01.int.sover.in [10.10.4.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by dane.soverin.net (Postfix) with ESMTPS id 4SXpz34yZcz8g; Sat, 18 Nov 2023 22:55:59 +0000 (UTC) Received: from smtp.soverin.net (smtp.soverin.net [10.10.4.99]) by soverin.net (Postfix) with ESMTPSA id 4SXpz31nTZz3v; Sat, 18 Nov 2023 22:55:59 +0000 (UTC) Authentication-Results: smtp.soverin.net; dkim=pass (2048-bit key; unprotected) header.d=elenq.tech header.i=@elenq.tech header.a=rsa-sha256 header.s=soverin1 header.b=ZWnmCh9j; dkim-atps=neutral DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=elenq.tech; s=soverin1; t=1700348159; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=wgBtFlu4LzkNCsIWYGpKuI6Xtez4N5sfzrVMePh4b4o=; b=ZWnmCh9jFew7mizQc2V6ZhoeZ3yzHwvH0OmqhrV9Ar3464kFhA4UZ+uAGh6MWDGFG0blI9 HxURz4VGYawbx4GF/JSxqBgRJvsrCwy9bvvdVnbWgHul+y6CQYRSRUZN2tdYYNMWYuZ928 yUm3E7dcOn5J7SHlYKnI5kcHJ9bJDvDoBp8SnxhEl4W30Fpw9djoVMC6PpKp3D5eWWzdPQ 0i38K1Z25WAWQUmeCXjBpPJINVii78Gp/gZ9J51r9NM7xxHg4F/ZtztT70H2kk5wUZtokZ V6aW2FB4Tz5QD7yAMeQFvdeIJxPnfB7ToAUfMCgzo+Y+G/5TFXuIPZKRAGs18g== From: Ekaitz Zarraga Date: Sat, 18 Nov 2023 23:54:03 +0100 Message-ID: <33b2bd7c522db88adb1f3a389d7dd433da68cb47.1700348043.git.ekaitz@elenq.tech> MIME-Version: 1.0 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org Sender: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org X-getmail-retrieved-from-mailbox: Patches * guix/build/zig-build-system.scm (zig-cross-build): New function (lower): Add cross-compilation support * guix/build-system/zig.scm (build): Add --target flag with target input (check): Disable with cross compilation Change-Id: I5f42ff897bfe00c92c6576900221a15ef210d669 --- `target` was missing from the `check` phase arguments, now it's tested properly and it should be a clean patch guix/build-system/zig.scm | 118 ++++++++++++++++++++++++++------ guix/build/zig-build-system.scm | 7 +- 2 files changed, 103 insertions(+), 22 deletions(-) base-commit: fc6bdaad57bf91609849623c5f485403c030cb49 diff --git a/guix/build-system/zig.scm b/guix/build-system/zig.scm index 16b8a712cc..7f944f7d34 100644 --- a/guix/build-system/zig.scm +++ b/guix/build-system/zig.scm @@ -84,6 +84,79 @@ (define* (zig-build name inputs #:system system #:guile-for-build guile))) +(define* (zig-cross-build name + #:key + source target + build-inputs target-inputs host-inputs + (phases '%standard-phases) + (outputs '("out")) + (search-paths '()) + (native-search-paths '()) + (tests? #t) + (test-target #f) + (zig-build-flags ''()) + (zig-test-flags ''()) + (zig-destdir "out") + (zig-test-destdir "test-out") + (zig-release-type #f) + (system (%current-system)) + (guile #f) + (imported-modules %zig-build-system-modules) + (modules '((guix build zig-build-system) + (guix build utils)))) + "Build SOURCE using Zig, and with INPUTS." + (define builder + (with-imported-modules imported-modules + #~(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)) + + (zig-build #:name #$name + #:source #+source + #:system #$system + #:phases #$phases + #:outputs %outputs + #:target #$target + #:test-target #$test-target + #:inputs %build-target-inputs + #:native-inputs %build-host-inputs + #:search-paths '#$(map search-path-specification->sexp + search-paths) + #:native-search-paths '#$(map + search-path-specification->sexp + native-search-paths) + #:zig-build-flags #$zig-build-flags + #:zig-test-flags #$zig-test-flags + #:zig-release-type #$zig-release-type + #:zig-destdir #$zig-destdir + #:zig-test-destdir #$zig-test-destdir + #:tests? #$tests? + #:search-paths '#$(sexp->gexp + (map search-path-specification->sexp + search-paths)))))) + + (mlet %store-monad ((guile (package->derivation (or guile (default-guile)) + system #:graft? #f))) + (gexp->derivation name builder + #:system system + #:target target + #:graft? #f + #:substitutable? substitutable? + #:guile-for-build guile))) + + (define* (lower name #:key source inputs native-inputs outputs system target (zig (default-zig)) @@ -94,27 +167,30 @@ (define* (lower name (define private-keywords '(#:target #:zig #:inputs #:native-inputs #:outputs)) - ;; TODO: support cross-compilation - ;; It's as simple as adding some build flags to `zig-build-flags` - ;; -Dtarget=aarch64-linux-musl, for example. - (and (not target) - (bag - (name name) - (system system) - (target target) - (host-inputs `(,@(if source - `(("source" ,source)) - '()) - ,@inputs - - ;; Keep the standard inputs of 'gnu-build-system' - ;; TODO: do we need this? - ,@(standard-packages))) - (build-inputs `(("zig" ,zig) - ,@native-inputs)) - (outputs outputs) - (build zig-build) - (arguments (strip-keyword-arguments private-keywords arguments))))) + (bag + (name name) + (system system) + (target target) + (build-inputs `(,@(if source + `(("source" ,source)) + '()) + ,@`(("zig" ,zig)) + ,@native-inputs + ,@(if target '() inputs) + ,@(if target + ;; Use the standard cross inputs of + ;; 'gnu-build-system'. + (standard-cross-packages target 'host) + '()) + ;; Keep the standard inputs of 'gnu-build-system'. + ,@(standard-packages))) + (host-inputs (if target inputs '())) + (target-inputs (if target + (standard-cross-packages target 'target) + '())) + (outputs outputs) + (build (if target zig-cross-build zig-build)) + (arguments (strip-keyword-arguments private-keywords arguments)))) (define zig-build-system (build-system diff --git a/guix/build/zig-build-system.scm b/guix/build/zig-build-system.scm index d414ebfb17..8352a73324 100644 --- a/guix/build/zig-build-system.scm +++ b/guix/build/zig-build-system.scm @@ -47,6 +47,7 @@ (define* (build #:key zig-build-flags zig-release-type ;; "safe", "fast" or "small" empty for a ;; debug build" + target #:allow-other-keys) "Build a given Zig package." @@ -56,6 +57,9 @@ (define* (build #:key "--prefix-lib-dir" "lib" "--prefix-exe-dir" "bin" "--prefix-include-dir" "include" + ,@(if target + (list (string-append "-Dtarget=" target)) + '()) ,@(if zig-release-type (list (string-append "-Drelease-" zig-release-type)) '()) @@ -65,9 +69,10 @@ (define* (build #:key (define* (check #:key tests? zig-test-flags + target #:allow-other-keys) "Run all the tests" - (when tests? + (when (and tests? (not target)) (let ((old-destdir (getenv "DESTDIR"))) (setenv "DESTDIR" "test-out") ;; Avoid colisions with the build output (let ((call `("zig" "build" "test"