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 YMuDLRk3OmE0uQAAgWs5BA (envelope-from ) for ; Thu, 09 Sep 2021 18:32:25 +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 govmKBk3OmGBGAAA1q6Kng (envelope-from ) for ; Thu, 09 Sep 2021 16:32:25 +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 5195413DD5 for ; Thu, 9 Sep 2021 18:32:25 +0200 (CEST) Received: from localhost ([::1]:59506 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mOMyO-0001Uc-A2 for larch@yhetil.org; Thu, 09 Sep 2021 12:32:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:56660) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mOMy9-0001SB-0H for guix-patches@gnu.org; Thu, 09 Sep 2021 12:32:10 -0400 Received: from debbugs.gnu.org ([209.51.188.43]:52771) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mOMy3-0003Xd-FP for guix-patches@gnu.org; Thu, 09 Sep 2021 12:32:04 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1mOMy2-0005HW-TA for guix-patches@gnu.org; Thu, 09 Sep 2021 12:32:02 -0400 X-Loop: help-debbugs@gnu.org Subject: [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 16:32:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 50449 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: Liliana Prikler Cc: 47006@debbugs.gnu.org, 50449@debbugs.gnu.org, maximedevos@telenet.be, efraim@flashner.co.il Received: via spool by 50449-submit@debbugs.gnu.org id=B50449.163120510420260 (code B ref 50449); Thu, 09 Sep 2021 16:32:02 +0000 Received: (at 50449) by debbugs.gnu.org; 9 Sep 2021 16:31:44 +0000 Received: from localhost ([127.0.0.1]:36083 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mOMxj-0005Gh-Eq for submit@debbugs.gnu.org; Thu, 09 Sep 2021 12:31:44 -0400 Received: from out2.migadu.com ([188.165.223.204]:16399) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mOMxR-0005Fv-L0; Thu, 09 Sep 2021 12:31:30 -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=1631205082; 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: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=5s6eo89ClVLVY8grlwiyp7CBX0+U/WcZBA0gUzzkZ1c=; b=jlJvxjpMc2xZEemd7BsAxCTtaEjUBQ6y4PJByFR2XiXHtoEK+uDG2+8lgOT5aD6iN3W+Oj 1xVISX7zmdo1hYJckr6oqsvCrG365C33rXIu7QBJXxt4OdmzjJJ7inr81CLOtY8xiic3BC 9/2iErtJOoZzBfPWJpfWsYJGs/PaNGo= From: Sarah Morgensen References: <7e0456e51a420958dc9a2809f1e52e2ad444ace6.1631195387.git.liliana.prikler@gmail.com> Date: Thu, 09 Sep 2021 09:31:13 -0700 In-Reply-To: <7e0456e51a420958dc9a2809f1e52e2ad444ace6.1631195387.git.liliana.prikler@gmail.com> (Liliana Prikler's message of "Thu, 9 Sep 2021 15:32:22 +0200 (2 hours, 26 minutes, 18 seconds ago)") Message-ID: <86tuitn226.fsf@mgsn.dev> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable 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=1631205145; 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: content-transfer-encoding:content-transfer-encoding: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=5s6eo89ClVLVY8grlwiyp7CBX0+U/WcZBA0gUzzkZ1c=; b=SXZJMVjgJ8hvWuFqDSwZYOkynUVt3tAu39do7+4l3pGVIhfgiMowTHP2XT2GaXEqKcRWhr F4DF2l7PjbpBbmFUKYECio7NH5qVTZN7dveHzkPhZAoJDKV2gjGdWEvCH6UjkSeYLNWOtT o0Tv+hqFYdVeyIy98ADbaxWtW0iSZtNbnYEjDoko4mxzckG3RLLO71SKUgsxwP5ixWTceh EOEpNkhkNvXa9sGUI2OGnjs88wmzUQoW3llmrGmbKfXQRD33EXrJuVFHa8GerXDF0vKZYu M9n7FtBIf3XJJkW3RkW2UGOhxOxY4EUPVopB+cGDVWbBDM0+yhrkQS3SmpLo8Q== ARC-Seal: i=1; s=key1; d=yhetil.org; t=1631205145; a=rsa-sha256; cv=none; b=FF00PbeApW6yVi8Vr7ouDTIZk34buderb4Nz+Yg2usF7GIYzBQqF3m0MzC5hiTISZunQMt BWxgC8NLQ+9YkzFMyjjOMuFADd+nhq2i8QUpYZvFlb+/St3phLt5zXNQl4JfrQy8L1kvjH 435JeD6AsH96QQyukm9YBK1PvT1yaZzndjn47FiK178iMTyuFbV4jIo/gboXVb7+zDs6Kk BmmFO1N/Vw1Ry/evnagLZwirwB2KZIRii9KVDYstN6AGeHKg9INKAG+DJnlh2taeH27NRs gp/Sj5rSMatuCsL6R/CGg+hu0TvXTRMaLiQyXDXc7jB+kzE4WQipSwtte4SttQ== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=fail ("headers rsa verify failed") header.d=mgsn.dev header.s=key1 header.b=jlJvxjpM; 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=jlJvxjpM; 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: 5195413DD5 X-Spam-Score: 0.19 X-Migadu-Scanner: scn1.migadu.com X-TUID: qfk0+D0T6Skx Hi Liliana, Thanks for taking a look at the recent patch and sending an updated one. I've been tinkering with the recent zig patch as well, so I have a few comments. Liliana Prikler writes: > * gnu/packages/zig.scm: New file. > * gnu/local.mk (GNU_SYSTEM_MODULES): Add it here. > --- > gnu/local.mk | 1 + > gnu/packages/zig.scm | 83 ++++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 84 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..8b9a863b4d > --- /dev/null > +++ b/gnu/packages/zig.scm > @@ -0,0 +1,83 @@ > +;;; GNU Guix --- Functional package management for GNU > +;;; Copyright =C2=A9 2021 Leo Prikler > +;;; > +;;; 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 is based on and builds itself using the Clang toolchain, > + ;; so add it both as inputs and native-inputs. > + (inputs > + `(("clang" ,clang-12) > + ("lld" ,lld-12) > + ("llvm" ,llvm-12))) > + (native-inputs > + `(("clang" ,clang-12) > + ("lld" ,lld-12) > + ("llvm" ,llvm-12))) 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=3D" 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. > + (arguments > + `(#:tests? #f ; no check target Did you mean to leave this in? ;) > + #: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= /zig" > + "build" "test")))))))) 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. > + (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))) 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. 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/z= ig") `("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--- I haven't tested this with 'zig cc', but this worked for compiling [0]. [0] https://github.com/andrewrk/tetris Hope that helps, -- Sarah