From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp2 ([2001:41d0:2:bcc0::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms0.migadu.com with LMTPS id G0trFCNQOmH69QAAgWs5BA (envelope-from ) for ; Thu, 09 Sep 2021 20:19:15 +0200 Received: from aspmx1.migadu.com ([2001:41d0:2:bcc0::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp2 with LMTPS id 6OhlDyNQOmEvHQAAB5/wlQ (envelope-from ) for ; Thu, 09 Sep 2021 18:19:15 +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 04A5B166A9 for ; Thu, 9 Sep 2021 20:19:15 +0200 (CEST) Received: from localhost ([::1]:59466 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mOOdm-0002fU-2P for larch@yhetil.org; Thu, 09 Sep 2021 14:19:14 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49700) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mOOda-0002f0-4T for guix-patches@gnu.org; Thu, 09 Sep 2021 14:19:03 -0400 Received: from debbugs.gnu.org ([209.51.188.43]:52899) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mOOdZ-00037n-Sx for guix-patches@gnu.org; Thu, 09 Sep 2021 14:19:01 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1mOOdZ-0008F8-LG for guix-patches@gnu.org; Thu, 09 Sep 2021 14:19:01 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#47006] [PATCH 2/2] gnu: Add zig. Resent-From: Liliana Marie Prikler Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Thu, 09 Sep 2021 18:19: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: Sarah Morgensen Cc: 47006@debbugs.gnu.org, 50449@debbugs.gnu.org, maximedevos@telenet.be, efraim@flashner.co.il Received: via spool by 47006-submit@debbugs.gnu.org id=B47006.163121151131638 (code B ref 47006); Thu, 09 Sep 2021 18:19:01 +0000 Received: (at 47006) by debbugs.gnu.org; 9 Sep 2021 18:18:31 +0000 Received: from localhost ([127.0.0.1]:36210 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mOOd5-0008EB-2N for submit@debbugs.gnu.org; Thu, 09 Sep 2021 14:18:31 -0400 Received: from mail-wr1-f66.google.com ([209.85.221.66]:46831) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mOOd2-0008Dv-K1; Thu, 09 Sep 2021 14:18:29 -0400 Received: by mail-wr1-f66.google.com with SMTP id x6so3813152wrv.13; Thu, 09 Sep 2021 11:18:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=message-id:subject:from:to:cc:date:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=hj/aNg2ICl+UmCECRdLU6bUL0jZMIeas0ndmLBneWOs=; b=RDnYwXKdO76xXajTox9N+9jFJ3+Q9qrUZz80Dgnk1nBrNCAat1W95F3YeS0u82x0dh b5VvQY4o0IdQtGWat9L4QEMSv+YDRtvdlZf6fyOjt+ERugp2lwfsOuGLoXPql9XGrurh IAKq0rMzKGs5FG38AM1/SakhBiLoFQN3C6+sTdvfPXIG1xQ2I7tbGIA++3d2zmZiajJt AfH4U2Q09YwvWNRzS46cPOUPwMwNZlIKNMbmIO3UiLtj7d8cSEmS7P6X8QYAc8WTPHGJ 5bmnjBrnvY+EIgAfHDo1DnZ9UGNxXInhtCoOA2PbVZbDuMo9of4tdr3x5oSqIrRwG5tl FMIg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:subject:from:to:cc:date:in-reply-to :references:user-agent:mime-version:content-transfer-encoding; bh=hj/aNg2ICl+UmCECRdLU6bUL0jZMIeas0ndmLBneWOs=; b=cmYbLkEAYI9hGyWhA9btj6x3ZNxeB9pG0ZZNVMN5LywOTqwiW5F4yA42egLXw7aAaR FpgNO4PtoXnYEvfCJXRVOJHipwqsfBvQA016oRMyVPPFHCYoy/uVOCOt9q8bbz5uNRdr k5/RH1ULyPQHeqiEnXO9Y4OtEC4HxbqetTORQ8mfTPjaN6DaQg9ynlV7YIZhiYIz4IV7 tl8I/d26QqfH6kfQDxvQ3UXIGkherPGTpFdOTywcmL2cxnOr3i3RrqG7fwm1NRAl29F4 fjTkkreQL+mJhT5xZ3c7IHMEaPxVmRuVLDpiKgg91p/9dOeABMqN6QfZdmFI3NH29qwc Qm7A== X-Gm-Message-State: AOAM532uPc/CvBcyi2wSOx2x+NRn57e4nGBXDZbQv5ETsjFhIikmpG64 5Z0CcyZfiHY8XakWvWI40UA= X-Google-Smtp-Source: ABdhPJysInJUkHrTvwhpHlrfWAOyvBucgyFFLM2joOVW7u7RmVJoQmB/0LhIPZilaVq66iZ7teVLpA== X-Received: by 2002:adf:e6c5:: with SMTP id y5mr5297173wrm.198.1631211502629; Thu, 09 Sep 2021 11:18:22 -0700 (PDT) Received: from nijino.fritz.box (85-127-52-93.dsl.dynamic.surfer.at. [85.127.52.93]) by smtp.gmail.com with ESMTPSA id u26sm2687551wrd.32.2021.09.09.11.18.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 09 Sep 2021 11:18:22 -0700 (PDT) Message-ID: <374c149b13a2c350f35811e6bc29c57cc56829e4.camel@gmail.com> From: Liliana Marie Prikler Date: Thu, 09 Sep 2021 20:18:20 +0200 In-Reply-To: <86tuitn226.fsf@mgsn.dev> References: <7e0456e51a420958dc9a2809f1e52e2ad444ace6.1631195387.git.liliana.prikler@gmail.com> <86tuitn226.fsf@mgsn.dev> Content-Type: text/plain; charset="UTF-8" User-Agent: Evolution 3.34.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 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 X-Migadu-Spam-Score: -4.00 Authentication-Results: aspmx1.migadu.com; none X-Migadu-Queue-Id: 04A5B166A9 X-Spam-Score: -4.00 X-Migadu-Scanner: scn0.migadu.com X-TUID: 9aA3JprO+NHj Hi Sarah, Am Donnerstag, den 09.09.2021, 09:31 -0700 schrieb Sarah Morgensen: > 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 = > > \ > > %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 > > +;;; > > +;;; 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