From patchwork Thu Sep 9 18:49:42 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Sarah Morgensen X-Patchwork-Id: 32728 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id 9EE3027BBE3; Thu, 9 Sep 2021 19:51:00 +0100 (BST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-2.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,T_DKIM_INVALID, URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.2 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTPS id 0548A27BBE1 for ; Thu, 9 Sep 2021 19:51:00 +0100 (BST) Received: from localhost ([::1]:45654 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mOP8V-0005KH-0O for patchwork@mira.cbaines.net; Thu, 09 Sep 2021 14:50:59 -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 X-Migadu-Flow: FLOW_OUT 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+patchwork=mira.cbaines.net@gnu.org Sender: "Guix-patches" X-getmail-retrieved-from-mailbox: Patches 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 From 3cfaaf2023bf5a9915d625963140039c711207ae Mon Sep 17 00:00:00 2001 Message-Id: <3cfaaf2023bf5a9915d625963140039c711207ae.1631213249.git.iskarian@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 = \ %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 © 2021 Liliana Prikler +;;; Copyright © 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 along + ;; 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=" + (%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/zig" + "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 -- 2.33.0