From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp0 ([2001:41d0:2:bcc0::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms0.migadu.com with LMTPS id 2B8rMo9XOmEXAwEAgWs5BA (envelope-from ) for ; Thu, 09 Sep 2021 20:50:55 +0200 Received: from aspmx1.migadu.com ([2001:41d0:2:bcc0::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp0 with LMTPS id yFzfLY9XOmFjdgAA1q6Kng (envelope-from ) for ; Thu, 09 Sep 2021 18:50:55 +0000 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 3485316FC7 for ; Thu, 9 Sep 2021 20:50:55 +0200 (CEST) Received: from localhost ([::1]:45654 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mOP8Q-0005KH-4r for larch@yhetil.org; Thu, 09 Sep 2021 14:50:54 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:56336) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mOP7a-0005JY-5z for guix-patches@gnu.org; Thu, 09 Sep 2021 14:50:02 -0400 Received: from debbugs.gnu.org ([209.51.188.43]:52920) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mOP7Z-0008GJ-VI for guix-patches@gnu.org; Thu, 09 Sep 2021 14:50:01 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1mOP7Z-0002gv-PS for guix-patches@gnu.org; Thu, 09 Sep 2021 14:50:01 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#47006] [bug#50449] [bug#47006] [PATCH 2/2] gnu: Add zig. Resent-From: Sarah Morgensen Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Thu, 09 Sep 2021 18:50:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 47006 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: Liliana Marie Prikler Cc: 47006@debbugs.gnu.org, maximedevos@telenet.be, efraim@flashner.co.il Received: via spool by 47006-submit@debbugs.gnu.org id=B47006.163121339110324 (code B ref 47006); Thu, 09 Sep 2021 18:50:01 +0000 Received: (at 47006) by debbugs.gnu.org; 9 Sep 2021 18:49:51 +0000 Received: from localhost ([127.0.0.1]:36233 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mOP7O-0002gR-Gg for submit@debbugs.gnu.org; Thu, 09 Sep 2021 14:49:50 -0400 Received: from out0.migadu.com ([94.23.1.103]:59643) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mOP7M-0002gI-6D for 47006@debbugs.gnu.org; Thu, 09 Sep 2021 14:49:49 -0400 X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mgsn.dev; s=key1; t=1631213386; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=nyKaliaUNYkv6vkemu6oB8p77wcMZ9h+Q5y7LnHp+7I=; b=CSVJv4+nvM7ZedJoJQsufzWx6rh3ZV/Hr7PRDeWIocqcJhZp/ImIEnD2s+I8xayWMmyFBL QGH5uNiMcYBe2M7cjoj7uNl5/WC3SozkX9WPxwSFgUked2VElTe+iS09H7YYHHWTLleu+W ejB/OvbIOsSjiVQZU9ZEODZu6bUhgZM= From: Sarah Morgensen References: <7e0456e51a420958dc9a2809f1e52e2ad444ace6.1631195387.git.liliana.prikler@gmail.com> <86tuitn226.fsf@mgsn.dev> <374c149b13a2c350f35811e6bc29c57cc56829e4.camel@gmail.com> Date: Thu, 09 Sep 2021 11:49:42 -0700 In-Reply-To: <374c149b13a2c350f35811e6bc29c57cc56829e4.camel@gmail.com> (Liliana Marie Prikler's message of "Thu, 09 Sep 2021 20:18:20 +0200 (11 minutes, 31 seconds ago)") Message-ID: <86bl51mvnd.fsf@mgsn.dev> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Migadu-Auth-User: iskarian@mgsn.dev 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" X-Migadu-Flow: FLOW_IN ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1631213455; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:resent-cc:resent-from:resent-sender: resent-message-id:in-reply-to:in-reply-to:references:references: list-id:list-help:list-unsubscribe:list-subscribe:list-post: dkim-signature; bh=nyKaliaUNYkv6vkemu6oB8p77wcMZ9h+Q5y7LnHp+7I=; b=o+WH7xZ9UacY4Uxwfvh4ckKgCqiwyKtjYCg/ODDNsim5cCRRk4/kZeo2iF3PXkx8/O2jQx vD+4xWBJ7lNQpktLOYuVOHS8ANb3LYMTzRjtEdOgfymGF98WgUypQDUzw3eBgqEt+6+sZn ADWb3YfNv5/DWWxJ/jOkRS8umrdlOmpuCxAypxh0JxEP8foTSofFO6kKtRm6fAkVoqn31Q Bz/guL6SK9dOw4cXorti3BoZD16+zmv60a2HKY17b3B6s6shJdCm4db2CGyAmDZ3jWFh57 7tbHKZTIRO8Pf0RRzcjg7v+HofMCCypDBZojQJP3YctBkpqXkF24fCIgsdVaWg== ARC-Seal: i=1; s=key1; d=yhetil.org; t=1631213455; a=rsa-sha256; cv=none; b=Jja8Cf3Kk/DS7P10uwPDkwM9wjx9Qbp7oLpG4xLvnjG0+jACXorFXZFBpzwmmGjjXE5aYQ 5xXCn4l3a5OGCOYH0cR7EY09VlnD/dnkrnUnRt2uJcehgWe/dCY+29aluFwjwotxhlO9Ny R7QXGMcgkKlPKF9m/X6ORVyeAfrLPf5dJ7oZpMPpzg33HCtKiVDcGMN/mGTDNLY79OlJIB MXg+c6soABBzAV7azHUv5pX+jA6oATKx7k2JjGYRK0dp50htvQ5wCrrA2sEubHbuCELV3W Cg2mG6qY0+extMo3QY0LHT7X6Z8qvCxALeNBFAAQrSEPCfMuMs26nI65lr1rTQ== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=fail ("headers rsa verify failed") header.d=mgsn.dev header.s=key1 header.b=CSVJv4+n; dmarc=fail reason="SPF not aligned (relaxed)" header.from=mgsn.dev (policy=none); spf=pass (aspmx1.migadu.com: domain of guix-patches-bounces@gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=guix-patches-bounces@gnu.org X-Migadu-Spam-Score: 0.19 Authentication-Results: aspmx1.migadu.com; dkim=fail ("headers rsa verify failed") header.d=mgsn.dev header.s=key1 header.b=CSVJv4+n; dmarc=fail reason="SPF not aligned (relaxed)" header.from=mgsn.dev (policy=none); spf=pass (aspmx1.migadu.com: domain of guix-patches-bounces@gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=guix-patches-bounces@gnu.org X-Migadu-Queue-Id: 3485316FC7 X-Spam-Score: 0.19 X-Migadu-Scanner: scn0.migadu.com X-TUID: 2xt3jRTxW2b/ --=-=-= Content-Type: text/plain Liliana Marie Prikler writes: >> Zig is perfectly happy compiling itself with GCC, and I believe it's >> the default. I'm pretty sure it either needs no native tools, or >> only llvm, but I wasn't able to test without compiling a whole GCC >> cross-toolchain. >> >> For cross compiling, you will also need to add "-DZIG_TARGET_TRIPLE=" >> to configure flags, and you might want to look into adding >> "-DZIG_TARGET_MCPU" (should take the same values as LLVM's -mcpu) to >> change the baseline CPU for ARM systems since we build for ARM7 by >> default. > I don't think we set mcpu for LLVM or Clang, so that one should be > fine. As for ZIG_TARGET_TRIPLET and the native inputs, do you have an > amended patch already lying around? Sure, I'll attach it. >> Full tests take quite a while, (it's supposed to be "an hour or two") >> so it may eventually be a good idea to limit what we test, such as >> using "-Dskip-release", which tests without optimization. IMO that >> should be enough for catching any Guix-based issues with Zig. > Is that a configure flag or a test flag? It's a test flag. You can check out build.zig for all the flags. >> I don't know if it affects the license, but Zig bundles the source >> for *many* components, such as glibc, musl, mingw, wasi, and from >> LLVM: libcxx, libcxxabi, libunwind, and tsan. > Good catch, could we unbundle some/all of those? I know they do modify some of them, so it would require some care. >> Zig doesn't seem to honor LIBRARY_PATH, but oddly enough it honors >> NIX_LDFLAGS and NIX_CFLAGS_COMPILE, so if we want it to see external >> libraries, something like this is needed: >> >> --8<---------------cut here---------------start------------->8--- >> (add-after 'check 'wrap-binary >> (lambda* (#:key outputs #:allow-other-keys) >> ;; TODO: test with 'zig cc' >> (wrap-program (string-append (assoc-ref outputs "out") >> "/bin/zig") >> `("NIX_LDFLAGS" prefix >> ("${LIBRARY_PATH:+-L${LIBRARY_PATH//:/ -L}}")) >> `("NIX_CFLAGS_COMPILE" prefix >> (,(string-append >> "${CPLUS_INCLUDE_PATH:+-isystem " >> "${CPLUS_INCLUDE_PATH//:/ -isystem }}")))))) >> --8<---------------cut here---------------end--------------->8--- > That is rather inelegant. I'd prefer we patch zig to honor > LIBRARY_PATH, CPLUS_INCLUDE_FLAGS and what other important environment > variables we find. Yeah, it's inelegant. I've never written Zig, so I didn't want to accidentally introduce any bugs. If you want to take a stab at it, take a look at lib/std/zig/system.zig, lines 30-140. -- Sarah --=-=-= Content-Type: text/x-patch; charset=utf-8 Content-Disposition: inline; filename=0001-gnu-Add-zig.patch Content-Transfer-Encoding: quoted-printable Content-Description: gnu: Add zig. >From 3cfaaf2023bf5a9915d625963140039c711207ae Mon Sep 17 00:00:00 2001 Message-Id: <3cfaaf2023bf5a9915d625963140039c711207ae.1631213249.git.iskari= an@mgsn.dev> From: Liliana Prikler Date: Thu, 9 Sep 2021 15:32:22 +0200 Subject: [PATCH] gnu: Add zig. * gnu/packages/zig.scm: New file. * gnu/local.mk (GNU_SYSTEM_MODULES): Add it here. --- gnu/local.mk | 1 + gnu/packages/zig.scm | 96 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 97 insertions(+) create mode 100644 gnu/packages/zig.scm diff --git a/gnu/local.mk b/gnu/local.mk index 2a56c4a9e2..710e5bd9df 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -598,6 +598,7 @@ GNU_SYSTEM_MODULES =3D \ %D%/packages/xdisorg.scm \ %D%/packages/xorg.scm \ %D%/packages/xfce.scm \ + %D%/packages/zig.scm \ %D%/packages/zile.scm \ %D%/packages/zwave.scm \ \ diff --git a/gnu/packages/zig.scm b/gnu/packages/zig.scm new file mode 100644 index 0000000000..5f64c8367d --- /dev/null +++ b/gnu/packages/zig.scm @@ -0,0 +1,96 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright =C2=A9 2021 Liliana Prikler +;;; Copyright =C2=A9 2021 Sarah Morgensen +;;; +;;; This file is part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see . + +(define-module (gnu packages zig) + #:use-module (guix packages) + #:use-module (guix git-download) + #:use-module ((guix licenses) #:prefix license:) + #:use-module (guix build-system cmake) + #:use-module (gnu packages) + #:use-module (gnu packages llvm)) + +(define-public zig + (package + (name "zig") + (version "0.8.1") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/ziglang/zig.git") + (commit version))) + (file-name (git-file-name name version)) + (sha256 + (base32 "147qx7xgj0r353wh5ragzn6kmm1vrf31i8038z3zqwjnqqgqxi6c")))) + (build-system cmake-build-system) + ;; Zig uses Clang and LLVM libraries, and (may) use LLVM to compile al= ong + ;; with GCC. + (inputs + `(("clang" ,clang-12) + ("lld" ,lld-12) + ("llvm" ,llvm-12))) + (native-inputs + `(("llvm" ,llvm-12))) + (arguments + `(,@(if (%current-target-system) + ;; TODO: set -DZIG_TARGET_CPU for aarch64/armhf + `(#:configure-flags (,(string-append "-DZIG_TARGET_TRIPLE=3D" + (%current-target-system)= ))) + '()) + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'save-unpack-dir + (lambda _ + ;; HACK: Passing unpacked source directory to 'check phase. + (setenv "ZIG_SOURCE_DIR" (getcwd)) + #t)) + (add-after 'configure 'set-home + (lambda _ + (setenv "HOME" (getcwd)) ; zig writes to $HOME/.cache + #t)) + (delete 'check) + (add-after 'install 'check + (lambda* (#:key outputs tests? #:allow-other-keys) + (when tests? + (with-directory-excursion (getenv "ZIG_SOURCE_DIR") + (invoke (string-append (assoc-ref outputs) "out") "/bin/z= ig" + "build" "test")))))))) + (native-search-paths + ;; XXX: I don't think Zig can distinguishes between C/C++ includes, + ;; so just include both. + (list + (search-path-specification + (variable "CPLUS_INCLUDE_PATH") + (files '("include/c++" "include"))) + (search-path-specification + (variable "LIBRARY_PATH") + (files '("lib" "lib64"))))) + (synopsis "General purpose programming language and toolchain") + (description "Zig is a general-purpose programming language and +toolchain. Among other features it provides +@itemize +@item an Optional type instead of null pointers, +@item manual memory management, +@item generic data structures and functions, +@item compile-time reflection and compile-time code execution, +@item integration with C using zig as a C compiler, and +@item concurrency via async functions. +@end itemize") + (home-page "https://github.com/ziglang/zig") + (license license:expat))) base-commit: a8555e01740d04e714fa9d70008f469f0db55d9a --=20 2.33.0 --=-=-=--