summaryrefslogtreecommitdiff
path: root/zig.scm
blob: b41b7d2953b723ceda285fa0f9ea502606d16347 (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
(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"
                       ;; 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)))