From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp10.migadu.com ([2001:41d0:303:e16b::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms8.migadu.com with LMTPS id 6MR1Nyw8WWXXEwAAG6o9tA:P1 (envelope-from ) for ; Sat, 18 Nov 2023 23:35:25 +0100 Received: from aspmx1.migadu.com ([2001:41d0:303:e16b::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp10.migadu.com with LMTPS id 6MR1Nyw8WWXXEwAAG6o9tA (envelope-from ) for ; Sat, 18 Nov 2023 23:35:25 +0100 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id 84B3343D97 for ; Sat, 18 Nov 2023 23:35:24 +0100 (CET) Authentication-Results: aspmx1.migadu.com; dkim=fail ("headers rsa verify failed") header.d=elenq.tech header.s=soverin1 header.b=lbS9uQH2; spf=pass (aspmx1.migadu.com: domain of "guix-patches-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="guix-patches-bounces+larch=yhetil.org@gnu.org"; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1700346924; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding:resent-cc: resent-from:resent-sender:resent-message-id:list-id:list-help: list-unsubscribe:list-subscribe:list-post:dkim-signature; bh=s/ioVEi+1VyLAS2oXtDGFpd3WvxIivfXcdOosUaXk5c=; b=M8l0/D2y7ZVRsauq8Nf5exhMlm/tD+1Q00B1cabo3tXHMmSvOAJML5uifPLDSw/uEfEFhG myk2jz40LB1T/d+QXxbY4mg7he1O5sA9ao+KjrRbwTvj3Znd2lWZp5m3u2iZj/CW0SAx+3 WZyEiL/dEwIADnIPxy0qp10oVNNtDBldgUaaD0DS0vDY7/xLYD09tywlP4gstWDGgqqIYf aDEKhb5ryZxcJflrZB0lKcPAjKA39bJ8ewJR9UHoRwjABIVKjxF6w5k+1/2mJsZEOVs0AQ piKZpwoxPcnV0b2KQskTC+IWpiDiF4DJDHylN6B+7MdzLzomgx2FX98DRHnJwA== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=fail ("headers rsa verify failed") header.d=elenq.tech header.s=soverin1 header.b=lbS9uQH2; spf=pass (aspmx1.migadu.com: domain of "guix-patches-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="guix-patches-bounces+larch=yhetil.org@gnu.org"; dmarc=none ARC-Seal: i=1; s=key1; d=yhetil.org; t=1700346924; a=rsa-sha256; cv=none; b=HBjpU4L4dg/hcVg/S+A6Fgf2IOLsK7yahj+Gd8P4/q5gYd5R9F+2Msi+LavUw3L8YrjBlJ z+9UTeEnYYJSFfwITlCiyNEsT+5i3VZg6zYVLG481C7rLkZ05trHvD5GYQ4mfLHZYSILTE WV5M8n77kYX8rvYAtQ4ZVcfELjAFSJKeYTZQ9/hRGwobdtkoM8pP/4Lj4uIylIj4fOl3Ks TJIF4B0u0nUvWLP1rZ20UfAJAa+H/tGW46Vqb4aXsUH1E19iEwnJTlvDDRRZPplYuNO2aY 1IdWiaFEwcgOlsTLvGVd5fI6iMQW9Dyj7mYe2oq0gebG6uAKGO93cu/gnkE6bg== Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1r4Tu4-0005wr-Lg; Sat, 18 Nov 2023 17:35:04 -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 1r4Tu2-0005wj-1c for guix-patches@gnu.org; Sat, 18 Nov 2023 17:35:02 -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 1r4Tu1-00079B-EW for guix-patches@gnu.org; Sat, 18 Nov 2023 17:35:01 -0500 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1r4Tu2-0006jE-Bh; Sat, 18 Nov 2023 17:35:02 -0500 X-Loop: help-debbugs@gnu.org Subject: [bug#67266] [PATCH] build: zig-build-system: Add cross-compilation support Resent-From: Ekaitz Zarraga Original-Sender: "Debbugs-submit" Resent-CC: ekaitz@elenq.tech, guix-patches@gnu.org Resent-Date: Sat, 18 Nov 2023 22:35:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 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-To: guix-patches@gnu.org X-Debbugs-Original-Xcc: Ekaitz Zarraga Received: via spool by submit@debbugs.gnu.org id=B.170034686225805 (code B ref -1); Sat, 18 Nov 2023 22:35:02 +0000 Received: (at submit) by debbugs.gnu.org; 18 Nov 2023 22:34:22 +0000 Received: from localhost ([127.0.0.1]:49624 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r4TtN-0006i9-J9 for submit@debbugs.gnu.org; Sat, 18 Nov 2023 17:34:22 -0500 Received: from lists.gnu.org ([2001:470:142::17]:48646) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r4TtK-0006hv-Sj for submit@debbugs.gnu.org; Sat, 18 Nov 2023 17:34:21 -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 1r4TtE-00059E-6h for guix-patches@gnu.org; Sat, 18 Nov 2023 17:34:12 -0500 Received: from dane.soverin.net ([185.233.34.150]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1r4TtB-00073b-Mx for guix-patches@gnu.org; Sat, 18 Nov 2023 17:34:11 -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 4SXpTn562Hz38; Sat, 18 Nov 2023 22:34:05 +0000 (UTC) Received: from smtp.soverin.net (smtp.soverin.net [10.10.4.100]) by soverin.net (Postfix) with ESMTPSA id 4SXpTn0yCVzFQ; Sat, 18 Nov 2023 22:34:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=elenq.tech; s=soverin1; t=1700346845; 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=s/ioVEi+1VyLAS2oXtDGFpd3WvxIivfXcdOosUaXk5c=; b=lbS9uQH2OVY3ICiMbqjzm37sx85HdSVrT6aSKnTbI5xPTU30AZfubphcmj28qRGfM5AZxz 3sq5NT7Mhi7ovwUBDsJuS9Hh3dJOPjTzsHMJFfWQI2UQiq+i87zuw9CbZJ/lAYDBDLZkHF XlHrehdPdzWb1atT61e/M+8XQ7MUZupqwPfYi8WHT/J1auAiqnqawoheXhJX4aOLFGjclu S46555o6t6etlJxHi09Ef4/miXzokmTxFK9PtNWpcxI+g5KMURGgwvXSZDMUveTujZ9jZg zKBRl1tz+lMKsMnTeI7JG9b6JnsgDu/uemCsOyVs2s+FLlZ4ewdfjnuqJBtMXQ== From: Ekaitz Zarraga Date: Sat, 18 Nov 2023 23:33:50 +0100 Message-ID: <63433041faa8438f7d4987f02a8d0891802316c1.1700346830.git.ekaitz@elenq.tech> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Received-SPF: pass client-ip=185.233.34.150; envelope-from=ekaitz@elenq.tech; helo=dane.soverin.net X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action 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+larch=yhetil.org@gnu.org Sender: guix-patches-bounces+larch=yhetil.org@gnu.org X-Migadu-Flow: FLOW_IN X-Migadu-Country: US X-Migadu-Spam-Score: -0.70 X-Spam-Score: -0.70 X-Migadu-Queue-Id: 84B3343D97 X-Migadu-Scanner: mx13.migadu.com X-TUID: 0J4ccvcL05aC * 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 --- guix/build-system/zig.scm | 118 ++++++++++++++++++++++++++------ guix/build/zig-build-system.scm | 6 +- 2 files changed, 102 insertions(+), 22 deletions(-) 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..0b0b0cdb33 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)) '()) @@ -67,7 +71,7 @@ (define* (check #:key tests? zig-test-flags #: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" base-commit: fc6bdaad57bf91609849623c5f485403c030cb49 -- 2.41.0