blob: 87c67ebd0934345effbd5cf69b5578a99ca67852 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
(define-module (zig)
#:use-module (guix packages)
#:use-module (guix utils)
#:use-module (guix gexp)
#:use-module (guix git-download)
#:use-module ((guix licenses) #:prefix license:)
#:use-module (guix build-system cmake)
#:use-module (guix build utils)
#:use-module (gnu packages)
#:use-module (gnu packages compression)
#:use-module (gnu packages llvm))
(define-public zig-0.11
(package
(name "zig")
(version "0.11.0")
(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 "0qh7c27cd4wcdjj0mbpkarvwypfk1js8hkyxs0z149qv75zkbrca"))
(patches (search-patches "zig-do-not-link-against-librt.patch"
"zig-Revert-Never-implicitly-add-rpaths-for-each-lib-dir-.patch"))))
(build-system cmake-build-system)
(arguments
`(#:configure-flags
(list ,@(if (%current-target-system)
'(string-append "-DZIG_TARGET_TRIPLE="
(%current-target-system))
'())
(string-append "-DZIG_TARGET_MCPU=baseline")
"-DZIG_SHARED_LLVM=ON"
(string-append "-DZIG_LIB_DIR=" (assoc-ref %outputs "out")
"/lib/zig"))
#:validate-runpath? #f ; TODO: zig binary can't find ld-linux.
#:out-of-source? #f ; for tests
#:phases
(modify-phases %standard-phases
(add-after 'unpack 'set-env-variables
(lambda* (#:key inputs native-inputs #:allow-other-keys)
;; Set CC, since the stage 2 zig relies on it to find the libc
;; installation, and otherwise silently links against its own.
(setenv "CC" ,(cc-for-target))
;; Set cache dir, otherwise Zig looks for `$HOME/.cache'.
(setenv "ZIG_GLOBAL_CACHE_DIR"
(string-append (getcwd) "/zig-cache"))))
(add-after 'patch-source-shebangs 'patch-more-shebangs
(lambda* (#:key inputs #:allow-other-keys)
;; Zig uses information about /usr/bin/env to determine the
;; version of glibc and other data.
(substitute* "lib/std/zig/system/NativeTargetInfo.zig"
(("/usr/bin/env") (search-input-file inputs "/bin/env")))))
(delete 'check)
(add-after 'install 'check
(lambda* (#:key outputs tests? #:allow-other-keys)
(when tests?
(invoke (string-append (assoc-ref outputs "out") "/bin/zig")
"build" "test"
"-Domit-stage2"
;; We're not testing the compiler bootstrap chain.
;; Non-native tests try to link and execute non-native
;; binaries.
"-Dskip-non-native")))))))
(inputs
(list clang-16 ; Clang propagates llvm.
lld-16
zlib
(list zstd "lib")))
;; Zig compiles fine with GCC, but also needs native LLVM libraries.
(native-inputs
(list llvm-16))
(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)))
|