Package: guix-patches;
Reported by: Andrew Patterson <andrewpatt7 <at> gmail.com>
Date: Tue, 7 Sep 2021 07:07:01 UTC
Severity: normal
Tags: patch
Done: Liliana Marie Prikler <liliana.prikler <at> gmail.com>
Bug is archived. No further changes may be made.
Message #22 received at 50449 <at> debbugs.gnu.org (full text, mbox):
From: Liliana Marie Prikler <liliana.prikler <at> gmail.com> To: Sarah Morgensen <iskarian <at> mgsn.dev> Cc: 47006 <at> debbugs.gnu.org, 50449 <at> debbugs.gnu.org, maximedevos <at> telenet.be, efraim <at> flashner.co.il Subject: Re: [bug#47006] [PATCH 2/2] gnu: Add zig. Date: Thu, 09 Sep 2021 20:18:20 +0200
Hi Sarah, Am Donnerstag, den 09.09.2021, 09:31 -0700 schrieb Sarah Morgensen: > Liliana Prikler <liliana.prikler <at> gmail.com> 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 = > > \ > > %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 © 2021 Leo Prikler <leo.prikler <at> student.tugraz.at> > > +;;; > > +;;; 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 < > > http://www.gnu.org/licenses/>;. > > + > > +(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=" > 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? > > + (arguments > > + `(#:tests? #f ; no check target > > Did you mean to leave this in? ;) Pretty sure that was a copypaste error at some point, good catch. > > + #: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. Is that a configure flag or a test flag? > > + (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. Good catch, could we unbundle some/all of those? > 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. Thanks
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.