From patchwork Tue Sep 14 16:17:14 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Liliana Marie Prikler X-Patchwork-Id: 32830 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 2671327BBE3; Tue, 14 Sep 2021 17:28:22 +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_ADSP_CUSTOM_MED, DKIM_SIGNED,FREEMAIL_FROM,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 133FF27BBE1 for ; Tue, 14 Sep 2021 17:28:21 +0100 (BST) Received: from localhost ([::1]:57082 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mQBIC-0000RU-3B for patchwork@mira.cbaines.net; Tue, 14 Sep 2021 12:28:20 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53806) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mQB8F-0000pp-3h for guix-patches@gnu.org; Tue, 14 Sep 2021 12:18:03 -0400 Received: from debbugs.gnu.org ([209.51.188.43]:38484) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mQB8E-0000Fm-3t for guix-patches@gnu.org; Tue, 14 Sep 2021 12:18:02 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1mQB8E-0003yJ-0d for guix-patches@gnu.org; Tue, 14 Sep 2021 12:18:02 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#47006] [WIP PATCH v2 2/2] gnu: Add zig. Resent-From: Liliana Marie Prikler Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Tue, 14 Sep 2021 16:18: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, =?utf-8?b?QW5kcsOhcyBWw7Zyw7Zza8WRaQ==?= , maximedevos@telenet.be, efraim@flashner.co.il Received: via spool by 47006-submit@debbugs.gnu.org id=B47006.163163624715193 (code B ref 47006); Tue, 14 Sep 2021 16:18:01 +0000 Received: (at 47006) by debbugs.gnu.org; 14 Sep 2021 16:17:27 +0000 Received: from localhost ([127.0.0.1]:50027 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mQB7e-0003wy-H4 for submit@debbugs.gnu.org; Tue, 14 Sep 2021 12:17:27 -0400 Received: from mail-wr1-f65.google.com ([209.85.221.65]:45876) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mQB7b-0003wj-VZ for 47006@debbugs.gnu.org; Tue, 14 Sep 2021 12:17:25 -0400 Received: by mail-wr1-f65.google.com with SMTP id d21so13452855wra.12 for <47006@debbugs.gnu.org>; Tue, 14 Sep 2021 09:17:23 -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; bh=g6apZ5C3+e/gZCpQ6nipEa357Co+vyJkUmpi8AWeWdo=; b=BCEDxfqYNg4gpHEi3xxpekzLNkxMBYkOYXg9MUN/K1GTWUX9yhdYMRu+t9wimgEDje hQhf1AhFdqiJCowXVefl6ebl3fJQlRXeuzyBof5+o3dnILxvFYhSIqwcpTPuhZT4PV5/ J+7+rgqFBZ1soLywFt/rL97223nQB5j7QQP9KKJy9ol/y3KNvAeITmFwyODqRCxOFQd8 O/lzYo/ncOlZ4172wmIKUohsZrQnKgu341zsSVen6MkQZnfe1HHXV7nLj5ZsmFULFXBt Mj3VsQ/2Mpd9r/ZPgrXMPf/Ay0HkCe3FbNdNuxkmYFJcmIuuUmqcHGWLPurT3mKsxdfv cR1Q== 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; bh=g6apZ5C3+e/gZCpQ6nipEa357Co+vyJkUmpi8AWeWdo=; b=gV/Izly050wkhN6sZHvNeFFUGNrCNngZJPU8awzyfIOm7TCc0MmYgnYMHM3FMiMfzr vjoH/hRLWm+xFHssLFFZ3ysZrM4oJKORHk3h3bdgZV3bPssKDtYQGSMv9fADXNKOnGVw DaVFitHz5KURItaUawXubMRCNwsGcImAVH9pobDEfm2MhyRGqWDhao4ObUr/m9F502SM 1oNHyouuln8wqxu1u+qt/a+rrRq8Z9ZoCmEjGzNs2L6JHkCJiZ5kK3Dwc7wOC9DliI2x tw3cPhJU9TnfVuhspIUbBmr3sjAM99lKI3q3gtaHwQesnYwVHaO3QAyCYF8/DRbOeoi/ CTKg== X-Gm-Message-State: AOAM531atQACj2ycQ7v9GMRov7IX8XTpqR5Mb3L69uiEQfZbT3FF2HOv gf1fjxwEOAgM3NDQ0p9ywMk= X-Google-Smtp-Source: ABdhPJxajjln1HAl+PYMwbS04Jc/+P+3jrOjXyhYSRQ0WwEpdRIGFs9G0vck4c1tf2RHrelLE3ea6w== X-Received: by 2002:a5d:64a7:: with SMTP id m7mr19870760wrp.171.1631636238071; Tue, 14 Sep 2021 09:17:18 -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 v8sm9268024wrt.12.2021.09.14.09.17.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 14 Sep 2021 09:17:16 -0700 (PDT) Message-ID: <7b114e500e29364f44b0080e0f782255e92be74f.camel@gmail.com> From: Liliana Marie Prikler Date: Tue, 14 Sep 2021 18:17:14 +0200 In-Reply-To: <86czpdl8ns.fsf@mgsn.dev> References: <0f6c5b692df8d06a0d7adddc9e5abf93894a366f.1631226695.git.liliana.prikler@gmail.com> <86wnnmnceg.fsf@mgsn.dev> <865yv6mmk2.fsf@mgsn.dev> <93454096d15aed82b9bf4b1401a0fddcb156f2b7.camel@gmail.com> <86czpdl8ns.fsf@mgsn.dev> User-Agent: Evolution 3.34.2 MIME-Version: 1.0 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 Hi, Am Sonntag, den 12.09.2021, 15:40 -0700 schrieb Sarah Morgensen: > > > + (patches > > > + (search-patches > > > + "zig-disable-libc-note-test.patch" > > Is this test really necessary to skip that test? If not, let's try > > to use the command line for that. > > We could use "-Dskip-compile-errors", but that also skips ~600 other > test cases. Point taken, let's keep it then. > > > + ;; XXX: Remove the following patch when updating LLVM > > > to 12.0.1. > > > + "zig-disable-MIPS-tests.patch" > > There's a patch for LLVM 12.0.1 waiting in the ML and we could > > potentially bump lld to 12.0.1 regardless. (Can LLVM components be > > mix-matched like that?) > > I have no idea if they *can*, but I'm pretty sure they're not > intended to be, as LLVM wants you to build everything together in one > big blob. Fair enough, I've tried to rebase this based on András patch regardless. In some sense this counts as a review of #50486, but I obviously haven't tested all the problematic packages that would keep it from being merged, like mesa. > > > + "zig-fix-cross-native-execution.patch" > > IIUC this is weaker than "-Dskip-non-native". Is there a reason to > > include specifically these non-native tests? > > Yes, as I wrote in the patch header, it fixes the behavior of 'zig > run' and 'zig test' when the target is cross-native. Would we want > to stick to upstream, even if it's buggy? I'm not particularly sure about 'zig run', but imo we should simply supply the correct linker in cross-native and not worry about upstream bugs in the negative case. > We might want to add "-Dskip-non-native" anyway as it speeds up tests > by an order of magnitude, in which case tests will succeed without > the patch. It looks their CI uses it "-Dskip-non-native" as well, > and I suppose there's not a whole lot Guix can do to mess up Zig's > cross-compiling anyway, since it's pretty self-contained... Did that. > > > + (native-search-paths > > > + (list > > > + (search-path-specification > > > + (variable "ZIG_INCLUDE_DIRS") > > > + ;; XXX: It doesn't seem as though Zig can distinguish > > > between > > > C and C++ > > > + ;; include paths, so provide both. > > > + (files '("include/c++" "include"))) > > > + (search-path-specification > > > + ;; TODO: Might be confused with "ZIG_LIB_DIR"... Maybe > > > use > > > + ;; "ZIG_INCLUDE_PATH" and "ZIG_LIBRARY_PATH"? > > > + (variable "ZIG_LIB_DIRS") > > > + (files '("lib" "lib64"))))) > > You can rewrite "zig-use-explicit-paths.patch" in-place with Emacs' > > query-replace and/or sed (or even just manually, there are no lines > > to add or remove) if you disagree with my environment variable > > naming choice. Just make sure you don't accidentally break diff by > > deleting trailing space. > > Another potential naming choice would be to prefix everything with > > ZIG_LIBC_ rather than simply ZIG_. Of course I thought about that > > only after sending my previous mail ^^" > > Ah, I meant to mention it in my last e-mail but I forgot. I didn't > want to just go changing it on you without discussing it. > > As far as I can tell, there's no such thing as a "Zig library" or a > "Zig header"; these are for including system C headers and > libraries. So, I would just go with LIBRARY_PATH and > CPLUS_INCLUDE_PATH unless we anticipate needing to tell Zig something > different than what we tell GCC/Clang. Furthermore, the in- > development 'zig cc' command is intended to be a drop-in replacement > for GCC/Clang, so it should probably honor the same environment > variables. Fair enough, I now have zig search the paths that would normally be expected to be accordingly set. This leads to doubly adding "/include", but I suppose that's fine as we risk not including the right things in a C only context otherwise. Regards From ee2da07fdd3fd1a79223732c43cfc6ac015cbf9f Mon Sep 17 00:00:00 2001 From: Liliana Prikler Date: Thu, 9 Sep 2021 15:32:22 +0200 Subject: [PATCH v4 2/2] gnu: Add zig. * gnu/packages/patches/zig-disable-libc-note-test.patch, gnu/packages/patches/zig-use-system-paths.patch: New files. * gnu/packages/zig.scm: New file. * gnu/local.mk (GNU_SYSTEM_MODULES, dist_patch_DATA): Adjust accordingly. --- gnu/local.mk | 3 + .../patches/zig-disable-libc-note-test.patch | 31 ++++ .../patches/zig-use-system-paths.patch | 143 ++++++++++++++++++ gnu/packages/zig.scm | 104 +++++++++++++ 4 files changed, 281 insertions(+) create mode 100644 gnu/packages/patches/zig-disable-libc-note-test.patch create mode 100644 gnu/packages/patches/zig-use-system-paths.patch create mode 100644 gnu/packages/zig.scm diff --git a/gnu/local.mk b/gnu/local.mk index 0e24d35c42..0097a99b2e 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 \ \ @@ -1904,6 +1905,8 @@ dist_patch_DATA = \ %D%/packages/patches/ytfzf-updates.patch \ %D%/packages/patches/ytnef-CVE-2021-3403.patch \ %D%/packages/patches/ytnef-CVE-2021-3404.patch \ + %D%/packages/patches/zig-disable-libc-note-test.patch \ + %D%/packages/patches/zig-use-system-paths.patch \ %D%/packages/patches/zstd-CVE-2021-24031_CVE-2021-24032.patch \ %D%/packages/patches/zziplib-CVE-2018-16548.patch diff --git a/gnu/packages/patches/zig-disable-libc-note-test.patch b/gnu/packages/patches/zig-disable-libc-note-test.patch new file mode 100644 index 0000000000..971ae53912 --- /dev/null +++ b/gnu/packages/patches/zig-disable-libc-note-test.patch @@ -0,0 +1,31 @@ +This test fails with "error.CompilationIncorrectlySucceeded". + +diff --git a/test/compile_errors.zig b/test/compile_errors.zig +index fd1255c..20d5548 100644 +--- a/test/compile_errors.zig ++++ b/test/compile_errors.zig +@@ -2751,15 +2751,15 @@ pub fn addCases(cases: *tests.CompileErrorContext) void { + "tmp.zig:3:5: error: dependency on libc must be explicitly specified in the build command", + }); + +- cases.addTest("libc headers note", +- \\const c = @cImport(@cInclude("stdio.h")); +- \\export fn entry() void { +- \\ _ = c.printf("hello, world!\n"); +- \\} +- , &[_][]const u8{ +- "tmp.zig:1:11: error: C import failed", +- "tmp.zig:1:11: note: libc headers not available; compilation does not link against libc", +- }); ++// cases.addTest("libc headers note", ++// \\const c = @cImport(@cInclude("stdio.h")); ++// \\export fn entry() void { ++// \\ _ = c.printf("hello, world!\n"); ++// \\} ++// , &[_][]const u8{ ++// "tmp.zig:1:11: error: C import failed", ++// "tmp.zig:1:11: note: libc headers not available; compilation does not link against libc", ++// }); + } + + cases.addTest("comptime vector overflow shows the index", diff --git a/gnu/packages/patches/zig-use-system-paths.patch b/gnu/packages/patches/zig-use-system-paths.patch new file mode 100644 index 0000000000..ed122dac22 --- /dev/null +++ b/gnu/packages/patches/zig-use-system-paths.patch @@ -0,0 +1,143 @@ +This patch replaces the OS-specific detection mechanism by one that solely +relies on environment variables. This has the benefit that said environment +variables can be used as search paths in Guix. + +Index: zig-0.8.1/lib/std/zig/system.zig +=================================================================== +--- zig-0.8.1.orig/lib/std/zig/system.zig ++++ zig-0.8.1/lib/std/zig/system.zig +@@ -39,101 +39,57 @@ pub const NativePaths = struct { + }; + errdefer self.deinit(); + +- var is_nix = false; +- if (process.getEnvVarOwned(allocator, "NIX_CFLAGS_COMPILE")) |nix_cflags_compile| { +- defer allocator.free(nix_cflags_compile); +- +- is_nix = true; +- var it = mem.tokenize(nix_cflags_compile, " "); ++ // TODO: Support cross-compile paths? ++ if (process.getEnvVarOwned(allocator, "C_INCLUDE_PATH")) |c_include_path| { ++ defer allocator.free(c_include_path); ++ var it = mem.tokenize(c_include_path, ":"); + while (true) { +- const word = it.next() orelse break; +- if (mem.eql(u8, word, "-isystem")) { +- const include_path = it.next() orelse { +- try self.addWarning("Expected argument after -isystem in NIX_CFLAGS_COMPILE"); +- break; +- }; +- try self.addIncludeDir(include_path); +- } else { +- if (mem.startsWith(u8, word, "-frandom-seed=")) { +- continue; +- } +- try self.addWarningFmt("Unrecognized C flag from NIX_CFLAGS_COMPILE: {s}", .{word}); +- } ++ const dir = it.next() orelse break; ++ try self.addIncludeDir(dir); + } + } else |err| switch (err) { + error.InvalidUtf8 => {}, + error.EnvironmentVariableNotFound => {}, + error.OutOfMemory => |e| return e, + } +- if (process.getEnvVarOwned(allocator, "NIX_LDFLAGS")) |nix_ldflags| { +- defer allocator.free(nix_ldflags); + +- is_nix = true; +- var it = mem.tokenize(nix_ldflags, " "); ++ if (process.getEnvVarOwned(allocator, "CPLUS_INCLUDE_PATH")) |cplus_include_path| { ++ defer allocator.free(cplus_include_path); ++ var it = mem.tokenize(cplus_include_path, ":"); + while (true) { +- const word = it.next() orelse break; +- if (mem.eql(u8, word, "-rpath")) { +- const rpath = it.next() orelse { +- try self.addWarning("Expected argument after -rpath in NIX_LDFLAGS"); +- break; +- }; +- try self.addRPath(rpath); +- } else if (word.len > 2 and word[0] == '-' and word[1] == 'L') { +- const lib_path = word[2..]; +- try self.addLibDir(lib_path); +- } else { +- try self.addWarningFmt("Unrecognized C flag from NIX_LDFLAGS: {s}", .{word}); +- break; +- } ++ const dir = it.next() orelse break; ++ try self.addIncludeDir(dir); + } + } else |err| switch (err) { + error.InvalidUtf8 => {}, + error.EnvironmentVariableNotFound => {}, + error.OutOfMemory => |e| return e, + } +- if (is_nix) { +- return self; +- } +- +- if (comptime Target.current.isDarwin()) { +- try self.addIncludeDir("/usr/include"); +- try self.addIncludeDir("/usr/local/include"); + +- try self.addLibDir("/usr/lib"); +- try self.addLibDir("/usr/local/lib"); +- +- try self.addFrameworkDir("/Library/Frameworks"); +- try self.addFrameworkDir("/System/Library/Frameworks"); +- +- return self; ++ if (process.getEnvVarOwned(allocator, "LIBRARY_PATH")) |library_path| { ++ defer allocator.free(library_path); ++ var it = mem.tokenize(library_path, ":"); ++ while (true) { ++ const dir = it.next() orelse break; ++ try self.addLibDir(dir); ++ } ++ } else |err| switch (err) { ++ error.InvalidUtf8 => {}, ++ error.EnvironmentVariableNotFound => {}, ++ error.OutOfMemory => |e| return e, + } + +- if (native_target.os.tag != .windows) { +- const triple = try native_target.linuxTriple(allocator); +- const qual = native_target.cpu.arch.ptrBitWidth(); +- +- // TODO: $ ld --verbose | grep SEARCH_DIR +- // the output contains some paths that end with lib64, maybe include them too? +- // TODO: what is the best possible order of things? +- // TODO: some of these are suspect and should only be added on some systems. audit needed. +- +- try self.addIncludeDir("/usr/local/include"); +- try self.addLibDirFmt("/usr/local/lib{d}", .{qual}); +- try self.addLibDir("/usr/local/lib"); +- +- try self.addIncludeDirFmt("/usr/include/{s}", .{triple}); +- try self.addLibDirFmt("/usr/lib/{s}", .{triple}); +- +- try self.addIncludeDir("/usr/include"); +- try self.addLibDirFmt("/lib{d}", .{qual}); +- try self.addLibDir("/lib"); +- try self.addLibDirFmt("/usr/lib{d}", .{qual}); +- try self.addLibDir("/usr/lib"); +- +- // example: on a 64-bit debian-based linux distro, with zlib installed from apt: +- // zlib.h is in /usr/include (added above) +- // libz.so.1 is in /lib/x86_64-linux-gnu (added here) +- try self.addLibDirFmt("/lib/{s}", .{triple}); ++ if (process.getEnvVarOwned(allocator, "DYLD_FRAMEWORK_PATH")) |dyld_framework_path| { ++ defer allocator.free(dyld_framework_path); ++ var it = mem.tokenize(dyld_framework_path, ":"); ++ while (true) { ++ const dir = it.next() orelse break; ++ try self.addFrameworkDir(dir); ++ } ++ } else |err| switch (err) { ++ error.InvalidUtf8 => {}, ++ error.EnvironmentVariableNotFound => {}, ++ error.OutOfMemory => |e| return e, + } + + return self; diff --git a/gnu/packages/zig.scm b/gnu/packages/zig.scm new file mode 100644 index 0000000000..ef5fe04c86 --- /dev/null +++ b/gnu/packages/zig.scm @@ -0,0 +1,104 @@ +;;; 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")) + (patches + (search-patches + "zig-disable-libc-note-test.patch" + "zig-use-system-paths.patch")))) + (build-system cmake-build-system) + (inputs + `(("clang" ,clang-12) ; Clang propagates llvm. + ("lld" ,lld-12))) + ;; Zig compiles fine with GCC, but also needs native LLVM libraries. + (native-inputs + `(("llvm" ,llvm-12))) + (arguments + `(#:configure-flags + (list ,@(if (%current-target-system) + (string-append "-DZIG_TARGET_TRIPLE=" + (%current-target-system)) + '())) + #:out-of-source? #f ; for tests + #:phases + (modify-phases %standard-phases + (add-after 'configure 'set-cache-dir + (lambda _ + ;; Set cache dir, otherwise Zig looks for `$HOME/.cache'. + (setenv "ZIG_GLOBAL_CACHE_DIR" + (string-append (getcwd) "/zig-cache")))) + (delete 'check) + (add-after 'install 'check + (lambda* (#:key outputs tests? #:allow-other-keys) + (when tests? + (invoke (string-append (assoc-ref outputs "out") "/bin/zig") + ;; Testing the standard library takes >7.5GB RAM, and + ;; will fail if it is OOM-killed. The 'test-toolchain' + ;; target skips standard library and doc tests. + "build" "test-toolchain" + ;; Stage 2 is experimental, not what we run with `zig', + ;; and stage 2 tests require a lot of RAM. + "-Dskip-stage2-tests" + ;; Non-native tests try to link and execute non-native + ;; binaries. + "-Dskip-non-native"))))))) + (native-search-paths + (list + (search-path-specification + (variable "C_INCLUDE_PATH") + (files '("include"))) + (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))) -- 2.33.0