From debbugs-submit-bounces@debbugs.gnu.org Thu Sep 09 12:31:42 2021 Received: (at 47006) by debbugs.gnu.org; 9 Sep 2021 16:31:42 +0000 Received: from localhost ([127.0.0.1]:36081 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mOMxY-0005GI-2x for submit@debbugs.gnu.org; Thu, 09 Sep 2021 12:31:42 -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 To: Liliana Prikler Subject: Re: [bug#47006] [PATCH 2/2] gnu: Add zig. 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-Flow: FLOW_OUT X-Migadu-Auth-User: iskarian@mgsn.dev X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 47006 Cc: 47006@debbugs.gnu.org, 50449@debbugs.gnu.org, maximedevos@telenet.be, efraim@flashner.co.il X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) 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