;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2021 Liliana Marie Prikler ;;; Copyright © 2021 Sarah Morgensen ;;; Copyright © 2021 Calum Irwin ;;; Copyright © 2022-2024 Efraim Flashner ;;; Copyright © 2023, 2024 Hilton Chain ;;; ;;; 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 gexp) #:use-module (guix packages) #:use-module (guix platform) #:use-module (guix search-paths) #:use-module (guix utils) #:use-module (guix download) #: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 compression) #:use-module (gnu packages llvm) #:use-module (gnu packages llvm-meta) #:use-module (gnu packages web) #:export (add-build.zig.zon rename-zig-dependencies)) (define* (add-build.zig.zon name version dependencies #:optional (paths '(""))) "Snippet to generate build.zig.zon of DEPENDENCIES for package NAME@VERSION." `(let ((port (open-file "build.zig.zon" "w" #:encoding "utf8"))) (format port "\ .{ .name = \"~a\", .version = \"~a\", .paths = .{ ~{\ \"~a\", ~}\ }, .dependencies = .{ ~{\ .@\"~a\" = .{ .url = \"\", }, ~}\ }, }~%" ,name ,version (quote ,paths) (quote ,dependencies)) (close-port port))) (define* (rename-zig-dependencies mapping #:optional (directories '("."))) "Snippet to rename Zig dependencies in build.zig and build.zig.zon." `(begin (use-modules (ice-9 match) (guix build utils)) (for-each (lambda (directory) (for-each (match-lambda ((old-name . new-name) (with-directory-excursion directory (substitute* "build.zig" (((string-append "([Dd]ependency.\")" old-name) _ prefix) (string-append prefix new-name))) (substitute* "build.zig.zon" (((format #f "\\.(@\")?~a\"?" old-name)) (format #f ".@\"~a\"" new-name)))))) (quote ,mapping))) (quote ,directories)))) (define (zig-source version commit hash) (origin (method git-fetch) (uri (git-reference (url "https://github.com/ziglang/zig") (commit commit))) (file-name (git-file-name "zig" version)) (sha256 (base32 hash)) (modules '((guix build utils))) (snippet #~(for-each (lambda (file) (when (file-exists? file) (delete-file file))) (append '("stage1/zig1.wasm" "stage1/zig1.wasm.zst") ;; Generated from glibc sources, see also: ;; https://github.com/ziglang/zig/blob/master/lib/libc/glibc/README.md ;; https://github.com/ziglang/glibc-abi-tool '("lib/libc/glibc/abilists") ;; IETF RFC documents have nonfree license. (find-files "." "^rfc[0-9]+\\.txt")))))) (define zig-0.9-glibc-abi-tool (origin (method git-fetch) (uri (git-reference (url "https://github.com/ziglang/glibc-abi-tool") (commit "6f992064f821c612f68806422b2780c9260cbc4c"))) (file-name "glibc-abi-tool") (sha256 (base32 "0lsi3f2lkixcdidljby73by2sypywb813yqdapy9md4bi2h8hhgp")))) (define-public zig-0.9 (package (name "zig") (version "0.9.1") (source (origin (inherit (zig-source version version "0nfvgg23sw50ksy0z0ml6lkdsvmd0278mq29m23dbb2jsirkhry7")) (patches (search-patches "zig-0.9-build-respect-PKG_CONFIG-env-var.patch" "zig-0.9-riscv-support.patch" "zig-0.9-use-baseline-cpu-by-default.patch" "zig-0.9-use-system-paths.patch" "zig-0.9-fix-runpath.patch")))) (build-system cmake-build-system) (arguments (list #:imported-modules (cons '(guix build zig-utils) %cmake-build-system-modules) #:modules (cons '(guix build zig-utils) '((guix build cmake-build-system) (guix build utils))) #:configure-flags #~(list (string-append "-DZIG_LIB_DIR=" #$output "/lib/zig") "-DZIG_TARGET_MCPU=baseline" (string-append "-DZIG_TARGET_TRIPLE=" (zig-target #$(platform-target (lookup-platform-by-target-or-system (or (%current-target-system) (%current-system)))))) "-DZIG_USE_LLVM_CONFIG=ON") #:out-of-source? #f ; for tests ;; There are too many unclear test failures. #:tests? (not (or (target-riscv64?) (%current-target-system))) #:phases #~(modify-phases %standard-phases #$@(if (target-riscv64?) ;; It is unclear why all these tests fail to build. `((add-after 'unpack 'adjust-tests (lambda _ (substitute* "build.zig" ((".*addRuntimeSafetyTests.*") "") ((".*addRunTranslatedCTests.*") "")) (substitute* "test/standalone.zig" ;; These tests fail to build on riscv64-linux. ;; They both contain 'exe.linkSystemLibrary("c");' ((".*shared_library.*") "") ((".*mix_o_files.*") "") ;; ld.lld: error: undefined symbol: __tls_get_addr ;; Is this symbol x86 only in glibc? ((".*link_static_lib_as_system_lib.*") ""))))) '()) (add-before 'configure 'zig-configure zig-configure) (delete 'check) (add-after 'install 'check (lambda* (#:key tests? #:allow-other-keys) (when tests? ;; error(libc_installation): msvc_lib_dir may not be empty for ;; windows-msvc. (unsetenv "ZIG_LIBC") (invoke (string-append #$output "/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', "-Dskip-stage2-tests" ;; Non-native tests try to link and execute non-native ;; binaries. "-Dskip-non-native")))) (add-before 'check 'install-glibc-abilists (lambda* (#:key inputs native-inputs #:allow-other-keys) (mkdir-p "/tmp/glibc-abi-tool") (with-directory-excursion "/tmp/glibc-abi-tool" (copy-recursively (dirname (search-input-file (or native-inputs inputs) "consolidate.zig")) ".") (for-each make-file-writable (find-files ".")) (invoke (string-append #$output "/bin/zig") "run" "consolidate.zig") (install-file "abilists" (string-append #$output "/lib/zig/libc/glibc")))))))) (inputs (list clang-13 ;Clang propagates llvm. lld-13)) ;; Zig compiles fine with GCC, but also needs native LLVM libraries. (native-inputs (list llvm-13 zig-0.9-glibc-abi-tool)) (native-search-paths (list $C_INCLUDE_PATH $CPLUS_INCLUDE_PATH $LIBRARY_PATH (search-path-specification (variable "GUIX_ZIG_PACKAGE_PATH") (files '("src/zig"))))) (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") ;; Currently building zig can take up to 10GB of RAM for linking stage1: ;; https://github.com/ziglang/zig/issues/6485 (supported-systems %64bit-supported-systems) ;; Stage3 can take a lot of time and isn't verbose. (properties `((max-silent-time . 9600) ,@(clang-compiler-cpu-architectures "13"))) (license license:expat))) (define zig-0.10-glibc-abi-tool (origin (method git-fetch) (uri (git-reference (url "https://github.com/ziglang/glibc-abi-tool") (commit "b07bf67ab3c15881f13b9c3c03bcec04535760bb"))) (file-name "glibc-abi-tool") (sha256 (base32 "0csn3c9pj8wchwy5sk5lfnhjn8a3c8cp45fv7mkpi5bqxzdzf1na")) (modules '((guix build utils))) (snippet #~(substitute* "consolidate.zig" (("(@ctz.)u.., " _ prefix) prefix) (("(@popCount.)u.., " _ prefix) prefix))))) (define-public zig-0.10 (package (inherit zig-0.9) (name "zig") (version "0.10.1") (source (origin (inherit (zig-source version version "1sh5xjsksl52i4cfv1qj36sz5h0ln7cq4pdhgs3960mk8a90im7b")) (patches (search-patches "zig-0.10-build-respect-PKG_CONFIG-env-var.patch" "zig-0.9-use-baseline-cpu-by-default.patch" "zig-0.10-use-system-paths.patch" "zig-0.10-fix-runpath.patch")))) (arguments (substitute-keyword-arguments (package-arguments zig-0.9) ((#:tests? _ #t) (not (%current-target-system))) ((#:configure-flags flags ''()) #~(cons "-DZIG_SHARED_LLVM=ON" #$flags)) ((#:phases phases '%standard-phases) #~(modify-phases #$phases #$@(if (target-riscv64?) `((delete 'adjust-tests)) '()) (add-after 'patch-source-shebangs 'patch-more-shebangs (lambda* (#:key inputs #:allow-other-keys) ;; Zig uses information about an ELF file to determine the ;; version of glibc and other data for native builds. (substitute* "lib/std/zig/system/NativeTargetInfo.zig" (("/usr/bin/env") (search-input-file inputs "bin/clang++"))))) (replace 'check (lambda* (#:key tests? #:allow-other-keys) (when tests? ;; error(libc_installation): msvc_lib_dir may not be empty for ;; windows-msvc. (unsetenv "ZIG_LIBC") (invoke (string-append #$output "/bin/zig") "build" "test" ;; We're not testing the compiler bootstrap chain. "-Dskip-stage1" "-Dskip-stage2-tests" ;; Non-native tests try to link and execute non-native ;; binaries. "-Dskip-non-native")))))))) (inputs (modify-inputs (package-inputs zig-0.9) (prepend zlib `(,zstd "lib")) (replace "clang" clang-15) (replace "lld" lld-15))) (native-inputs (modify-inputs (package-native-inputs zig-0.9) (replace "glibc-abi-tool" zig-0.10-glibc-abi-tool) (replace "llvm" llvm-15))) (properties `((max-silent-time . 9600) ,@(clang-compiler-cpu-architectures "15"))))) ;;; ;;; Bootstrap path for Zig 0.11. ;;; See also: . ;;; ;; Restore C++ stage 1 and build the initial zig1.wasm. (define zig-0.10.0-538-source (let ((commit "bf316e550671cc71eb498b3cf799493627bb0fdc") (revision "538")) (zig-source (git-version "0.10.0" revision commit) commit "1dchc2bp842jlw0byssqzindv8cigpqcj2hk3752667jrrww13vv"))) (define zig-0.10.0-539-patch (let ((commit "28514476ef8c824c3d189d98f23d0f8d23e496ea")) (origin (method url-fetch) (uri (string-append "https://github.com/ziglang/zig/commit/" commit ".patch")) (file-name "zig-0.10.0-539.patch") (sha256 (base32 "0qxxiafg2sd5rr4xhw0c12rygd7zh1rmf3x8hfialyxmsbi5pfxp"))))) (define zig-0.10.0-542-patch (let ((commit "3ba916584db5485c38ebf2390e8d22bc6d81bf8e")) (origin (method url-fetch) (uri (string-append "https://github.com/ziglang/zig/commit/" commit ".patch")) (file-name "zig-0.10.0-542.patch") (sha256 (base32 "1l09gmbr3vqzinb63kvaskgs1d0mvm1m7w3ai3ngwg5zlabyya35"))))) (define zig-0.10.0-610 (let ((commit "e7d28344fa3ee81d6ad7ca5ce1f83d50d8502118") (revision "610") (base zig-0.10)) (package (inherit base) (name "zig") (version (git-version "0.10.0" revision commit)) (source (zig-source version commit "08pm3f4hh6djl3szhqgm7fa3qisdl2xh9jrp18m0z7bk2vd0bzw7")) (arguments (substitute-keyword-arguments (package-arguments base) ;; Patch for fixing RUNPATH not applied to intermediate versions. ((#:validate-runpath? _ #t) #f) ;; Patch for cross-compilation not applied to intermediate versions. ((#:modules modules '()) (cons '(srfi srfi-1) modules)) ((#:configure-flags flags ''()) #~(filter (lambda (flag) (not (string-contains flag "ZIG_TARGET_TRIPLE"))) #$flags)) ;; Disable tests for intermediate versions. ((#:tests? _ #t) #f) ((#:phases phases '%standard-phases) #~(modify-phases #$phases (add-after 'unpack 'backup-source (lambda _ (copy-recursively "." "../source-backup"))) (add-after 'backup-source 'prepare-source (lambda* (#:key native-inputs inputs #:allow-other-keys) ;; Revert "actually remove stage1". (invoke "patch" "--reverse" "--strip=1" "--input" #+zig-0.10.0-542-patch) ;; Revert "remove `-fstage1` option". (false-if-exception (invoke "patch" "--reverse" "--strip=1" "--input" #+zig-0.10.0-539-patch)) ;; Resolve conflicts in previous patching. (invoke "patch" "--forward" "--strip=1" "--input" #+(local-file (search-patch "zig-0.10.0-610-bootstrap-resolve-conflicts.patch"))) ;; Restore build system. (rename-file "stage1/config.zig.in" "src/config.zig.in") (substitute* "src/config.zig.in" (("(have_stage1 = )false" _ prefix) (string-append prefix "true"))) (for-each (lambda (file) (copy-file (in-vicinity #+zig-0.10.0-538-source file) file)) '("build.zig" "CMakeLists.txt")))) (add-after 'install 'restore-source (lambda _ (for-each delete-file-recursively (find-files ".")) (copy-recursively "../source-backup" "."))) (add-after 'restore-source 'build-zig1 (lambda _ (invoke (string-append #$output "/bin/zig") "build" "update-zig1" "--verbose"))) (add-after 'build-zig1 'install-zig1 (lambda _ (install-file "stage1/zig1.wasm.zst" (string-append #$output:zig1 "/bin")))) (delete 'install-glibc-abilists))))) (native-inputs (modify-inputs (package-native-inputs base) (prepend binaryen) (delete "glibc-abi-tool"))) (outputs '("out" "zig1"))))) ;; Supply zig1.wasm.zst, build zig2 + zig1.wasm, install zig2 + zig1.wasm.zst. (define zig-0.10.0-675 (let ((commit "9d93b2ccf11f584320a2c5209dd2d94705167695") (revision "675") (base zig-0.10.0-610)) (package (inherit base) (name "zig") (version (git-version "0.10.0" revision commit)) (source (origin (inherit (zig-source version commit "1qsfsv8wg0kz616sgj7dw9ihdz5rsm80p3ambl5lnkrjhwym7z7x")) (patches (search-patches "zig-0.10.0-675-TypeOf-hack.patch")))) (arguments (substitute-keyword-arguments (package-arguments base) ((#:phases phases '%standard-phases) #~(modify-phases #$phases (add-after 'unpack 'set-host-triple (lambda _ (substitute* "CMakeLists.txt" (("\\$\\{(ZIG_)?HOST_TARGET_TRIPLE\\}") (zig-target #$(platform-target (lookup-platform-by-system (%current-system)))))))) (replace 'prepare-source (lambda* (#:key native-inputs inputs #:allow-other-keys) (install-file (search-input-file (or native-inputs inputs) "bin/zig1.wasm.zst") "stage1"))) (add-after 'prepare-source 'remove-stage3 (lambda _ ;; Multiline substitution. (invoke "sed" "--in-place" "/^add_custom_target(stage3/,/^)$/d" "CMakeLists.txt"))) (replace 'install (lambda _ (install-file "zig2" (string-append #$output "/bin")) (mkdir-p (string-append #$output "/lib")) (copy-recursively "lib" (string-append #$output "/lib/zig")))) (replace 'build-zig1 (lambda _ (invoke "./zig2" "build" "update-zig1" "--verbose"))) (delete 'patch-more-shebangs) (delete 'backup-source) (delete 'restore-source))))) (native-inputs (modify-inputs (package-native-inputs base) (prepend `(,base "zig1"))))))) ;; Supply zig1.wasm.zst, build zig2 + zig1.wasm, install zig2 + zig1.wasm. (define zig-0.10.0-722 (let ((commit "d10fd78d4615f329141f5c19f893039d56aff425") (revision "722") (base zig-0.10.0-675)) (package (inherit base) (name "zig") (version (git-version "0.10.0" revision commit)) (source (zig-source version commit "0829wymcwph71zlwql6v7i7j9gr1m96acyp2xsr69vq2h98wmlap")) (arguments (substitute-keyword-arguments (package-arguments base) ((#:phases phases '%standard-phases) #~(modify-phases #$phases (replace 'prepare-source (lambda* (#:key native-inputs inputs #:allow-other-keys) (install-file (search-input-file (or native-inputs inputs) "bin/zig1.wasm.zst") "stage1") (invoke "zstd" "-d" "stage1/zig1.wasm.zst") (make-file-writable "stage1/zig1.wasm"))) (replace 'install-zig1 (lambda _ (install-file "stage1/zig1.wasm" (string-append #$output:zig1 "/bin")))))))) (native-inputs (modify-inputs (package-native-inputs base) (prepend zstd) (replace "zig" `(,base "zig1"))))))) ;; Supply zig2, build zig1.wasm, install zig1.wasm. (define zig-0.10.0-747 (let ((commit "7b2a936173165002105ba5e76bed69654e132fea") (revision "747") (base zig-0.10.0-722)) (package (inherit base) (name "zig") (version (git-version "0.10.0" revision commit)) (source (origin (inherit (zig-source version commit "1z5ndywk4d1dcv2k3bw3n2zgjr3ysf3bi2ac4jhwqgnmzsw498wd")) (patches (search-patches "zig-0.10.0-747-CallOptions.patch")))) (arguments (substitute-keyword-arguments (package-arguments zig-0.10.0-722) ;; zig1.wasm is architecture-independent. ((#:target _ #f) #f) ((#:phases phases '%standard-phases) #~(modify-phases #$phases (replace 'build-zig1 (lambda _ (invoke "zig2" "build" "--zig-lib-dir" "lib" "update-zig1" "--verbose"))) (delete 'prepare-source) (delete 'configure) (delete 'build) (delete 'install))))) (native-inputs (modify-inputs (package-native-inputs base) (replace "zig" `(,base "out")) (delete "zstd")))))) ;; Supply zig1.wasm, build zig2 + zig1.wasm, install zig1.wasm. (define zig-0.10.0-748 (let ((commit "08b2d491bcd8c79c68495267cc71967661caea1e") (revision "748") (base zig-0.10.0-747)) (package (inherit base) (name "zig") (version (git-version "0.10.0" revision commit)) (source (zig-source version commit "1iv1wjgj0nfbb19sp3zw4d8hmrhkah4cmklzxm8c32zsg673kv3i")) (arguments (substitute-keyword-arguments (package-arguments zig-0.10.0-722) ;; zig1.wasm is architecture-independent. ((#:target _ #f) #f) ((#:phases phases '%standard-phases) #~(modify-phases #$phases (replace 'prepare-source (lambda* (#:key native-inputs inputs #:allow-other-keys) (install-file (search-input-file (or native-inputs inputs) "bin/zig1.wasm") "stage1") (make-file-writable "stage1/zig1.wasm"))))))) (native-inputs (modify-inputs (package-native-inputs base) (replace "zig" `(,base "zig1"))))))) ;; Supply zig1.wasm, build zig2, install zig2. (define zig-0.10.0-851 (let ((commit "aac2d6b56f32134ea32fb3d984e3fcdfddd8aaf6") (revision "851") (base zig-0.10.0-748)) (package (inherit base) (name "zig") (version (git-version "0.10.0" revision commit)) (source (zig-source version commit "026q8igib5a2wiqdxispijph7isx8g1m0p6xgclikrmwpkpr7wb8")) (arguments (substitute-keyword-arguments (package-arguments zig-0.10.0-748) ((#:phases phases '%standard-phases) #~(modify-phases #$phases (delete 'build-zig1) (delete 'install-zig1))))) (native-inputs (modify-inputs (package-native-inputs base) (replace "zig" `(,base "zig1"))))))) (define zig-0.10.0-853 (let ((commit "2a5e1426aa9469fadb78e837d0100d689213b034") (revision "853") (base zig-0.10.0-851)) (package (inherit base) (name "zig") (version (git-version "0.10.0" revision commit)) (source (zig-source version commit "18lqcf3vg6yi70hk6nzyv8mzw7rlhybawspk5z9s281bqv210v5s")) (arguments ;; zig1 (substitute-keyword-arguments (package-arguments zig-0.10.0-747) ((#:phases phases '%standard-phases) #~(modify-phases #$phases (replace 'build-zig1 (lambda _ (invoke "zig2" "build" "update-zig1" "--verbose"))))))) (native-inputs (modify-inputs (package-native-inputs base) (replace "zig" `(,base "out"))))))) (define zig-0.10.0-961 (let ((commit "54160e7f6aecb4628df633ceaef4c6d956429a3d") (revision "961") (base zig-0.10.0-853)) (package (inherit base) (name "zig") (version (git-version "0.10.0" revision commit)) (source (zig-source version commit "0f0n2bkygj8zxri275nisia3pdv2s4fikgnsnmag42bs747zn8bz")) ;; zig2 (arguments (package-arguments zig-0.10.0-851)) (native-inputs (modify-inputs (package-native-inputs base) (replace "zig" `(,base "zig1"))))))) (define zig-0.10.0-962 (let ((commit "622311fb9ac7ee6d93dcb8cda4b608751f7e092a") (revision "962") (base zig-0.10.0-961)) (package (inherit base) (name "zig") (version (git-version "0.10.0" revision commit)) (source (zig-source version commit "1yywzmxr6nwhdix5x9k5nrxa4n1nc8x8v1gqgyvwdhz47x9vw8b0")) ;; zig1 (arguments (package-arguments zig-0.10.0-747)) (native-inputs (modify-inputs (package-native-inputs base) (replace "zig" `(,base "out"))))))) (define zig-0.10.0-1027 (let ((commit "a43fdc1620fa24c8c606f748505766bfd53d1049") (revision "1027") (base zig-0.10.0-962)) (package (inherit base) (name "zig") (version (git-version "0.10.0" revision commit)) (source (zig-source version commit "0w19qlzb2la5bnjalmv7n05m08lhz4x8c53hf34aqw66kagw47kj")) ;; zig2 (arguments (package-arguments zig-0.10.0-851)) (native-inputs (modify-inputs (package-native-inputs base) (replace "zig" `(,base "zig1"))))))) ;; Supply zig2, build zig1.wasm + zig2, install zig2. (define zig-0.10.0-1073 (let ((commit "4c1007fc044689b8cbc20634d73debb43df8efe1") (revision "1073") (base zig-0.10.0-1027)) (package (inherit base) (name "zig") (version (git-version "0.10.0" revision commit)) (source (zig-source version commit "1mgvi3m2aph10c1ij9b4k6xs3jbp8hbswqgdnzxdi5y0ak7h1pd4")) (arguments (substitute-keyword-arguments (package-arguments zig-0.10.0-851) ((#:phases phases '%standard-phases) #~(modify-phases #$phases (add-before 'build 'build-zig1 (lambda _ (invoke "zig2" "build" "--zig-lib-dir" "lib" "update-zig1" "--verbose"))) (delete 'prepare-source))))) (native-inputs (modify-inputs (package-native-inputs base) (replace "zig" `(,base "out"))))))) (define zig-0.10.0-1497 (let ((commit "a9b68308b9eeb494524e2b7ab0d63cfa6b623cd0") (revision "1497") (base zig-0.10.0-1073)) (package (inherit base) (name "zig") (version (git-version "0.10.0" revision commit)) (source (zig-source version commit "0ja2555h41kibkxyyjpzrp5rradm3bknxhaspzz3brcbc6xvac21")) ;; zig1 (arguments (package-arguments zig-0.10.0-747)) (native-inputs (modify-inputs (package-native-inputs base) (replace "zig" `(,base "out"))))))) (define zig-0.10.0-1505-source (let ((commit "fe4ea31f7e9e1c8caea6a1df107b91e8ea1a7b8a") (revision "1505")) (zig-source (git-version "0.10.0" revision commit) commit "0q91hz824l867dlzz885i4mlkjdr0v5nfk3drsnvkvz2q52r0ffx"))) (define zig-0.10.0-1506 (let ((commit "f16c10a86b7183e99e54a70344f4681211cd52bb") (revision "1506") (base zig-0.10.0-1497)) (package (inherit base) (name "zig") (version (git-version "0.10.0" revision commit)) (source (zig-source version commit "17qbwknv33xi8908f1kdapvvj331bmibvvjhsza04j3siq3rpbz7")) ;; zig2+zig1 (arguments (substitute-keyword-arguments (package-arguments zig-0.10.0-748) ((#:phases phases '%standard-phases) #~(modify-phases #$phases (add-after 'prepare-source 'restore-lib (lambda _ (delete-file-recursively "lib") (copy-recursively (string-append #+zig-0.10.0-1505-source "/lib") "lib"))) (replace 'build-zig1 (lambda _ (invoke "./zig2" "build" "--zig-lib-dir" "lib" "update-zig1" "--verbose"))))))) (native-inputs (modify-inputs (package-native-inputs base) (replace "zig" `(,base "zig1"))))))) (define zig-0.10.0-1637-source (let ((commit "4e6f21e2cb2c557b5c019f4acf445665a26edcba") (revision "1637")) (zig-source (git-version "0.10.0" revision commit) commit "1nd55j2c0br7rqx9fj6bkjyymkf1k6ms2m9f7byrc1ahggdyxrpv"))) (define zig-0.10.0-1638 (let ((commit "7199d7c77715fe06606c5c89595e6852b3fa8c20") (revision "1638") (base zig-0.10.0-1506)) (package (inherit base) (name "zig") (version (git-version "0.10.0" revision commit)) (source (origin (inherit (zig-source version commit "15mvfgab9wglm1g5gakvqwb7l33v1vjwjwchb3pmhxmkxkrjkmgq")) (patches (search-patches "zig-0.10.0-1638-re-add-qualCast.patch")))) ;; zig2+zig1 (arguments (substitute-keyword-arguments (package-arguments zig-0.10.0-748) ((#:phases phases '%standard-phases) #~(modify-phases #$phases (add-after 'prepare-source 'restore-lib (lambda _ (delete-file-recursively "lib") (copy-recursively (string-append #+zig-0.10.0-1637-source "/lib") "lib"))) (replace 'build-zig1 (lambda _ (invoke "./zig2" "build" "--zig-lib-dir" "lib" "update-zig1" "--verbose"))))))) (native-inputs (modify-inputs (package-native-inputs base) (replace "zig" `(,base "zig1"))))))) (define zig-0.10.0-1657 (let ((commit "321ccbdc525ab0f5862e42378b962c10ec54e4a1") (revision "1657") (base zig-0.10.0-1638)) (package (inherit base) (name "zig") (version (git-version "0.10.0" revision commit)) (source (zig-source version commit "0nv16z8fm1ihszlwvdncnza0pgykj1ca87pf1w8nr8prqhsc7kj7")) ;; zig2 (arguments (package-arguments zig-0.10.0-851)) (native-inputs (modify-inputs (package-native-inputs base) (replace "zig" `(,base "zig1"))))))) (define zig-0.10.0-1681 (let ((commit "0bb178bbb2451238a326c6e916ecf38fbc34cab1") (revision "1681") (base zig-0.10.0-1657)) (package (inherit base) (name "zig") (version (git-version "0.10.0" revision commit)) (source (zig-source version commit "0kg1wnxxhjgd8fszbch039ngck1spyjvb1l0z2ja40ihnk5bxnsz")) ;; zig1 (arguments (package-arguments zig-0.10.0-747)) (native-inputs (modify-inputs (package-native-inputs base) (replace "zig" `(,base "out"))))))) (define zig-0.10.0-1712 (let ((commit "705d2a3c2cd94faf8e16c660b3b342d6fe900e55") (revision "1712") (base zig-0.10.0-1681)) (package (inherit base) (name "zig") (version (git-version "0.10.0" revision commit)) (source (zig-source version commit "08znnqyacjkdls4dhx6mis6yi6za0zv4abi2q3xl2304yjczm288")) ;; zig2 (arguments (package-arguments zig-0.10.0-851)) (native-inputs (modify-inputs (package-native-inputs base) (replace "zig" `(,base "zig1"))))))) (define zig-0.10.0-1713 (let ((commit "09a84c8384dffc7884528947b879f32d93c1bd90") (revision "1713") (base zig-0.10.0-1712)) (package (inherit base) (name "zig") (version (git-version "0.10.0" revision commit)) (source (zig-source version commit "1rbyqwd7iqbgwnws6rqr2d5bxxdh4z6phbg23hzm9i1xlxka6y6v")) ;; zig1 (arguments (package-arguments zig-0.10.0-747)) (native-inputs (modify-inputs (package-native-inputs base) (replace "zig" `(,base "out"))))))) (define zig-0.10.0-1888 (let ((commit "c839c180ef1686794c039fc6d3c20a8716e87357") (revision "1888") (base zig-0.10.0-1713)) (package (inherit base) (name "zig") (version (git-version "0.10.0" revision commit)) (source (zig-source version commit "0kxgjzzqqknqimi0a0c75blgr2ic550nchbag4mv1yfrhr5y0x27")) ;; zig2 (arguments (package-arguments zig-0.10.0-851)) (native-inputs (modify-inputs (package-native-inputs base) (replace "zig" `(,base "zig1"))))))) (define zig-0.10.0-1891 (let ((commit "ac1b0e832b4b9d151098050e1d29e28a568e215c") (revision "1891") (base zig-0.10.0-1888)) (package (inherit base) (name "zig") (version (git-version "0.10.0" revision commit)) (source (zig-source version commit "15qjgbmygk05p86wqm170lxmalq2mr9f81slf8svb7akkmx5qls2")) ;; zig1 (arguments (package-arguments zig-0.10.0-747)) (native-inputs (modify-inputs (package-native-inputs base) (replace "zig" `(,base "out"))))))) (define zig-0.10.0-2558 (let ((commit "d3a237a98c5a2ccf72a774b5f93425c02fea4bea") (revision "2558") (base zig-0.10.0-1891)) (package (inherit base) (name "zig") (version (git-version "0.10.0" revision commit)) (source (zig-source version commit "0q9583w919gvi91wbp529q54ijr8pldj8s0p2yapkbniadxxil7y")) ;; zig2 (arguments (package-arguments zig-0.10.0-851)) (inputs (modify-inputs (package-inputs base) (replace "clang" clang-16) (replace "lld" lld-16))) (native-inputs (modify-inputs (package-native-inputs base) (replace "llvm" llvm-16) (replace "zig" `(,base "zig1")))) (properties `((max-silent-time . 9600) ,@(clang-compiler-cpu-architectures "16")))))) (define zig-0.10.0-2565-source (let ((commit "856a9c2e3120d9ffa1166eed13641600230946da") (revision "2565")) (zig-source (git-version "0.10.0" revision commit) commit "00wqqckiyl6c3zcvgqxssnnv4ajip872ghrgv4mfrc8sllnhkdwa"))) (define zig-0.10.0-2566 (let ((commit "e2fe1907ecac075e4d4a37776359144318b6055a") (revision "2566") (base zig-0.10.0-2558)) (package (inherit base) (name "zig") (version (git-version "0.10.0" revision commit)) (source (zig-source version commit "1vy36ksv7jdxdkspi0jvmfz2xwvbc26x3rqns51wk3a39ngx1g2f")) (arguments ;; zig1 (substitute-keyword-arguments (package-arguments zig-0.10.0-747) ((#:phases phases '%standard-phases) #~(modify-phases #$phases (add-after 'unpack 'restore-lib (lambda _ (let ((path "lib/std/start.zig")) (copy-file (in-vicinity #+zig-0.10.0-2565-source path) path)))))))) (native-inputs (modify-inputs (package-native-inputs base) (replace "zig" `(,base "out"))))))) (define zig-0.10.0-2571 (let ((commit "31738de2817f7932fa9237492f20fb736bc07dd3") (revision "2571") (base zig-0.10.0-2566)) (package (inherit base) (name "zig") (version (git-version "0.10.0" revision commit)) (source (zig-source version commit "0hak2yydzjjn61lpbmmvkvykc1imgb92qkn90p4wi4fw9nfsqq0v")) ;; zig2+zig1 (arguments (package-arguments zig-0.10.0-748)) (native-inputs (modify-inputs (package-native-inputs base) (replace "zig" `(,base "zig1"))))))) (define zig-0.10.0-2796-source (let ((commit "42ee364e7b698822a69cba4cd2bda17868657e05") (revision "2796")) (zig-source (git-version "0.10" revision commit) commit "0jd9q7bk6vsvjfma8d8iic7r9hc7j6xkz1ghw2vpra5q20fl86ba"))) (define zig-0.10.0-2797 (let ((commit "35d82d31be3d2f2611049f41dc2616f898d70871") (revision "2797") (base zig-0.10.0-2571)) (package (inherit base) (name "zig") (version (git-version "0.10.0" revision commit)) (source (zig-source version commit "0av4qw7a41d9jmdmyachhisq98c3vjw1dqln1lgy1y3jxjsdf27h")) ;; zig2+zig1 (arguments (substitute-keyword-arguments (package-arguments zig-0.10.0-748) ((#:phases phases '%standard-phases) #~(modify-phases #$phases (add-after 'prepare-source 'restore-lib (lambda _ (delete-file-recursively "lib") (copy-recursively (string-append #+zig-0.10.0-2796-source "/lib") "lib"))))))) (native-inputs (modify-inputs (package-native-inputs base) (replace "zig" `(,base "zig1"))))))) (define zig-0.10.0-2824-source (let ((commit "8d88dcdc61c61e3410138f4402482131f5074a80") (revision "2824")) (zig-source (git-version "0.10" revision commit) commit "0xyhr98hyyb9b3c3d2lv6hxysaq1k1kmw9gynci0z9wm1y82rir8"))) (define zig-0.10.0-2838 (let ((commit "a8de15f66a51d273cefa07eed0d8fd2952e92387") (revision "2838") (base zig-0.10.0-2797)) (package (inherit base) (name "zig") (version (git-version "0.10.0" revision commit)) (source (zig-source version commit "0hhz1hijg5hnw41s4p4p15gllpql5hn9my6a3d80jxv8nmd367q1")) ;; zig2+zig1 (arguments (substitute-keyword-arguments (package-arguments zig-0.10.0-748) ((#:phases phases '%standard-phases) #~(modify-phases #$phases (add-before 'prepare-source 'backup-source (lambda _ (copy-recursively "lib" "../lib-backup"))) (add-after 'prepare-source 'restore-lib (lambda _ (delete-file-recursively "lib") (copy-recursively (string-append #+zig-0.10.0-2824-source "/lib") "lib"))) (add-before 'build-zig1 'restore-source (lambda _ (delete-file-recursively "lib") (copy-recursively "../lib-backup" "lib"))))))) (native-inputs (modify-inputs (package-native-inputs base) (replace "zig" `(,base "zig1"))))))) (define zig-0.10.0-3660 (let ((commit "22c6b6c9a9378aaca75c83c2182a6d94298f6bc2") (revision "3660") (base zig-0.10.0-2838)) (package (inherit base) (name "zig") (version (git-version "0.10.0" revision commit)) (source (zig-source version commit "0dhcdi6008qqvy3ws2hhmj51wr213whbyghh7n9arai3zyg6y65g")) ;; zig2+zig1 (arguments (package-arguments zig-0.10.0-748)) (native-inputs (modify-inputs (package-native-inputs base) (replace "zig" `(,base "zig1"))))))) (define zig-0.10.0-3726 (let ((commit "a6c8ee5231230947c928bbe1c6a39eb6e1bb9c5b") (revision "3726") (base zig-0.10.0-3660)) (package (inherit base) (name "zig") (version (git-version "0.10.0" revision commit)) (source (zig-source version commit "148dhnzhm52lcwhvpwnnvpkpd3g6i1xh2vsac858agqr0slsd7g9")) ;; zig1 (arguments (package-arguments zig-0.10.0-747)) (native-inputs (modify-inputs (package-native-inputs base) (replace "zig" `(,base "out"))))))) (define zig-0.10.0-3728 (let ((commit "a4d1edac8d65e1aa4b565f6fb11ab78541d97efa") (revision "3728") (base zig-0.10.0-3726)) (package (inherit base) (name "zig") (version (git-version "0.10.0" revision commit)) (source (zig-source version commit "13vff9hqp83xhz0fab9wcwsf56hcz4sg3rwn1vziq85wkr9scj4b")) ;; zig2 (arguments (package-arguments zig-0.10.0-851)) (native-inputs (modify-inputs (package-native-inputs base) (replace "zig" `(,base "zig1"))))))) (define zig-0.10.0-3807 (let ((commit "be0c69957e7489423606023ad820599652a60e15") (revision "3807") (base zig-0.10.0-3728)) (package (inherit base) (name "zig") (version (git-version "0.10.0" revision commit)) (source (zig-source version commit "069w7d67imdn4qgdk7acddsfwl4dhs9nzna5k4h0cza2cl0xi0ic")) ;; zig1 (arguments (package-arguments zig-0.10.0-747)) (native-inputs (modify-inputs (package-native-inputs base) (replace "zig" `(,base "out"))))))) (define zig-0.10.0-3813 (let ((commit "21ac0beb436f49fe49c6982a872f2dc48e4bea5e") (revision "3813") (base zig-0.10.0-3807)) (package (inherit base) (name "zig") (version (git-version "0.10.0" revision commit)) (source (zig-source version commit "0dmi1d8jg7y7zgi8xyq53g4g39ba4hnigyj491a5fj8xnkxqfrrb")) ;; zig2+zig1 (arguments (package-arguments zig-0.10.0-748)) (native-inputs (modify-inputs (package-native-inputs base) (replace "zig" `(,base "zig1"))))))) (define zig-0.10.0-3980 (let ((commit "4bce7b1db964098e4a9163201fa3adcb26af6d97") (revision "3980") (base zig-0.10.0-3813)) (package (inherit base) (name "zig") (version (git-version "0.10.0" revision commit)) (source (zig-source version commit "0h76x1ak28dv5y60r4m4y524kwmf43ridwvsx3ahfql63jwxn0m3")) ;; zig2 (arguments (package-arguments zig-0.10.0-851)) (native-inputs (modify-inputs (package-native-inputs base) (replace "zig" `(,base "zig1"))))))) (define zig-0.10.0-3985 (let ((commit "47d5bf26164b4ddb3228d17ae2158d1c29b8d040") (revision "3985") (base zig-0.10.0-3980)) (package (inherit base) (name "zig") (version (git-version "0.10.0" revision commit)) (source (zig-source version commit "0w412aka8wjkkwyssqg8nvzb7qwaa29ywzwhg11bbwkpqyig36r4")) ;; zig1 (arguments (package-arguments zig-0.10.0-747)) (native-inputs (modify-inputs (package-native-inputs base) (replace "zig" `(,base "out"))))))) (define zig-0.11-glibc-abi-tool (origin (method git-fetch) (uri (git-reference (url "https://github.com/ziglang/glibc-abi-tool") (commit "13576b1ea957882be7ff2c99f4cdc27454930219"))) (file-name "glibc-abi-tool") (sha256 (base32 "09m0ipixxw0dnal0zsgk6kvcz29y9s256b9y00s4hkhj95n630il")) (modules '((guix build utils))) (snippet #~(begin (substitute* "consolidate.zig" ((".*minor = 3[5678].*") "") (("(w\\.writeIntLittle.u16, )(@intCast.*);" _ prefix suffix) (string-append prefix "@as(u16, " suffix ");"))) (with-directory-excursion "glibc" (for-each delete-file-recursively '("2.35" "2.36" "2.37" "2.38"))))))) (define-public zig-0.11 (package (inherit zig-0.10) (name "zig") (version "0.11.0") (source (origin (inherit (zig-source version version "0qh7c27cd4wcdjj0mbpkarvwypfk1js8hkyxs0z149qv75zkbrca")) (patches (search-patches "zig-0.11-build-respect-PKG_CONFIG-env-var.patch" "zig-0.9-use-baseline-cpu-by-default.patch" "zig-0.11-use-system-paths.patch" "zig-0.11-fix-runpath.patch")))) (arguments (substitute-keyword-arguments (package-arguments zig-0.10) ((#:phases phases '%standard-phases) #~(modify-phases #$phases (add-after 'unpack 'set-host-triple (lambda _ (substitute* "CMakeLists.txt" (("\\$\\{ZIG_HOST_TARGET_TRIPLE\\}") (zig-target #$(platform-target (lookup-platform-by-system (%current-system)))))))) (add-after 'unpack 'prepare-source (lambda* (#:key native-inputs inputs #:allow-other-keys) (install-file (search-input-file (or native-inputs inputs) "bin/zig1.wasm") "stage1") (make-file-writable "stage1/zig1.wasm"))) (add-after 'install 'build-zig1 (lambda _ (invoke (string-append #$output "/bin/zig") "build" "update-zig1" "--verbose"))) (add-after 'build-zig1 'install-zig1 (lambda _ (install-file "stage1/zig1.wasm" (string-append #$output:zig1 "/bin")))) ;; TODO: Disable tests for macOS target and run full test. ;; Issue with glibc in CPLUS_INCLUDE_PATH: ;; . (replace 'check (lambda* (#:key tests? #:allow-other-keys) (when tests? (invoke (string-append #$output "/bin/zig") "test" "-I" "test" "test/behavior.zig")))))))) (inputs (modify-inputs (package-inputs zig-0.10) (replace "clang" clang-16) (replace "lld" lld-16))) (native-inputs (modify-inputs (package-native-inputs zig-0.10) (prepend binaryen `(,zig-0.10.0-3985 "zig1")) (replace "glibc-abi-tool" zig-0.11-glibc-abi-tool) (replace "llvm" llvm-16))) (outputs '("out" "zig1")) (properties `((max-silent-time . 9600) ,@(clang-compiler-cpu-architectures "16"))))) ;;; ;;; Bootstrap path for Zig 0.12. ;;; See also: . ;;; (define zig-0.11.0-149 (let ((commit "7a85ad151daece3d0bba3c8d23081502a0956c95") (revision "149") (base zig-0.11)) (package (inherit base) (name "zig") (version (git-version "0.11.0" revision commit)) (source (zig-source version commit "1kb245d4wfs1dyv7ccw3xiawasggpln9qxfqwlp4gkdg50l1qyzw")) ;; zig1 (arguments (substitute-keyword-arguments (package-arguments zig-0.10.0-747) ((#:phases phases '%standard-phases) #~(modify-phases #$phases (replace 'build-zig1 (lambda _ (invoke "zig" "build" "--zig-lib-dir" "lib" "update-zig1" "--verbose"))))))) (native-inputs (modify-inputs (package-native-inputs base) (replace "zig" `(,base "out"))))))) (define zig-0.11.0-384 (let ((commit "88f5315ddfc6eaf3e28433504ec046fb3252db7c") (revision "384") (base zig-0.11.0-149)) (package (inherit base) (name "zig") (version (git-version "0.11.0" revision commit)) (source (zig-source version commit "0ybql8l4mg8i79n353rc7gbx88kqgd371xrlvpmy69mxdffh5bas")) ;; zig2+zig1 (arguments (package-arguments zig-0.10.0-748)) (native-inputs (modify-inputs (package-native-inputs base) (replace "zig" `(,base "zig1"))))))) (define zig-0.11.0-494 (let ((commit "a8d2ed806558cc1472f3a532169a4994abe17833") (revision "494") (base zig-0.11.0-384)) (package (inherit base) (name "zig") (version (git-version "0.11.0" revision commit)) (source (zig-source version commit "04jb7la7ang0mip9qbrx57j1ls2n29svqafschxbh5j23pf74dql")) ;; zig2 (arguments (package-arguments zig-0.10.0-851)) (inputs (modify-inputs (package-inputs base) (replace "clang" clang-17) (replace "lld" lld-17))) (native-inputs (modify-inputs (package-native-inputs base) (replace "llvm" llvm-17) (replace "zig" `(,base "zig1")))) (properties `((max-silent-time . 9600) ,@(clang-compiler-cpu-architectures "17")))))) (define zig-0.11.0-587 (let ((commit "6bd54a1d3ebd8d997158c57057ba742824cf7e0c") (revision "587") (base zig-0.11.0-494)) (package (inherit base) (name "zig") (version (git-version "0.11.0" revision commit)) (source (zig-source version commit "16v6yrbwg1pc888fp3cmdbk2wyz0nm8xp66a14fi3akxyavsmkxm")) ;; zig1 (arguments (package-arguments zig-0.10.0-747)) (native-inputs (modify-inputs (package-native-inputs base) (replace "zig" `(,base "out"))))))) (define zig-0.11.0-631 (let ((commit "21780899eb17a0cb795ff40e5fae6556c38ea13e") (revision "631") (base zig-0.11.0-587)) (package (inherit base) (name "zig") (version (git-version "0.11.0" revision commit)) (source (zig-source version commit "19j3gbdsjsp602n2c1lp3i96yay94acsiasyzns8hs3v1sc952rp")) ;; zig2 (arguments (package-arguments zig-0.10.0-851)) (native-inputs (modify-inputs (package-native-inputs base) (replace "zig" `(,base "zig1"))))))) (define zig-0.11.0-638 (let ((commit "9763573ebb4f05eaa1c0bd5598f8dd6aee20ae9c") (revision "638") (base zig-0.11.0-631)) (package (inherit base) (name "zig") (version (git-version "0.11.0" revision commit)) (source (zig-source version commit "13620a6hlcaklmnxax4g3f4irddr9d15646s6bgn6ymwf6m4w4g0")) ;; zig1+zig2 (arguments (package-arguments zig-0.10.0-1073)) (native-inputs (modify-inputs (package-native-inputs base) (replace "zig" `(,base "out"))))))) (define zig-0.11.0-702 (let ((commit "63bd2bff12992aef0ce23ae4b344e9cb5d65f05d") (revision "702") (base zig-0.11.0-638)) (package (inherit base) (name "zig") (version (git-version "0.11.0" revision commit)) (source (zig-source version commit "049fpdgkarp834amymw0clvsk6g20742d3940la60na03rc4vy5x")) ;; zig1 (arguments (substitute-keyword-arguments (package-arguments zig-0.10.0-747) ((#:phases phases '%standard-phases) #~(modify-phases #$phases (replace 'build-zig1 (lambda _ (invoke "zig2" "build" "update-zig1" "--verbose"))))))) (native-inputs (modify-inputs (package-native-inputs base) (replace "zig" `(,base "out"))))))) (define zig-0.11.0-761 (let ((commit "9a09651019b24a32945f73dd7a69562f2cf31581") (revision "761") (base zig-0.11.0-702)) (package (inherit base) (name "zig") (version (git-version "0.11.0" revision commit)) (source (zig-source version commit "0d503vq76vl7m9fcmyqwx5nljy04fvjf06wfr7q7n5ircw5wjp0s")) ;; zig2 (arguments (package-arguments zig-0.10.0-851)) (native-inputs (modify-inputs (package-native-inputs base) (replace "zig" `(,base "zig1"))))))) (define zig-0.11.0-1967 (let ((commit "6beae6c061a650ea2d695e6902683641df920aa8") (revision "1967") (base zig-0.11.0-761)) (package (inherit base) (name "zig") (version (git-version "0.11.0" revision commit)) (source (zig-source version commit "0bah98h9rdaynwxlq4ibr925hmk69kwbrkgid2dgsksf6krb6sms")) ;; zig1 (arguments (package-arguments zig-0.10.0-747)) (native-inputs (modify-inputs (package-native-inputs base) (replace "zig" `(,base "out"))))))) (define zig-0.11.0-3245 (let ((commit "4f782d1e853accbe1c4bfab2617c3813d4b1e59f") (revision "3245") (base zig-0.11.0-1967)) (package (inherit base) (name "zig") (version (git-version "0.11.0" revision commit)) (source (zig-source version commit "0a4pnilfc528zl9ycwsi8kaqbq6q4bw3l1cpv50fpacsxgnsfjp3")) ;; zig2 (arguments (package-arguments zig-0.10.0-851)) (native-inputs (modify-inputs (package-native-inputs base) (replace "zig" `(,base "zig1"))))))) (define zig-0.11.0-3344 (let ((commit "e646e0116196c2bd9668317366f5380f08c30e6e") (revision "3344") (base zig-0.11.0-3245)) (package (inherit base) (name "zig") (version (git-version "0.11.0" revision commit)) (source (zig-source version commit "1vymn6qffmkhkl3rnp8zrxa1vwg8ayg5r2z3qz9bpfc6r2sb6ddq")) ;; zig1 (arguments (substitute-keyword-arguments (package-arguments zig-0.10.0-747) ((#:phases phases '%standard-phases) #~(modify-phases #$phases (replace 'build-zig1 (lambda _ (invoke "zig2" "build" "update-zig1" "--verbose"))))))) (native-inputs (modify-inputs (package-native-inputs base) (replace "zig" `(,base "out"))))))) (define zig-0.11.0-3501 (let ((commit "9b2345e182090e2f4c57e7684ec9739f195fdb1d") (revision "3501") (base zig-0.11.0-3344)) (package (inherit base) (name "zig") (version (git-version "0.11.0" revision commit)) (source (zig-source version commit "0gwfnsjc3avx51cr5cwancms8s14hkrhqvk926cz3phgnn4jmpz0")) ;; zig2 (arguments (package-arguments zig-0.10.0-851)) (native-inputs (modify-inputs (package-native-inputs base) (replace "zig" `(,base "zig1"))))))) (define zig-0.11.0-3503 (let ((commit "17673dcd6e3ffeb25fc9dc1cfc72334ab4e71b37") (revision "3503") (base zig-0.11.0-3501)) (package (inherit base) (name "zig") (version (git-version "0.11.0" revision commit)) (source (zig-source version commit "09j6svmrlk9ybkz308vbdqqx87yc20yfj7jk59vj451478x4fcnb")) ;; zig1 (arguments (package-arguments zig-0.10.0-747)) (native-inputs (modify-inputs (package-native-inputs base) (replace "zig" `(,base "out"))))))) (define zig-0.11.0-3506 (let ((commit "fb192df4f2d12dda5019e14bf6cab2693432cb36") (revision "3506") (base zig-0.11.0-3503)) (package (inherit base) (name "zig") (version (git-version "0.11.0" revision commit)) (source (zig-source version commit "1k5qd1pf563wi4hk4qs29sxph38n7jd4ic5w7qw80pi3aq9c9vbx")) ;; zig2 (arguments (package-arguments zig-0.10.0-851)) (native-inputs (modify-inputs (package-native-inputs base) (replace "zig" `(,base "zig1"))))))) (define zig-0.11.0-3604 (let ((commit "7611d90ba011fb030523e669e85acfb6faae5d19") (revision "3604") (base zig-0.11.0-3506)) (package (inherit base) (name "zig") (version (git-version "0.11.0" revision commit)) (source (zig-source version commit "1yl91rpqsnlf38hg77phpl5hy7ds0cg57agr23hjhy50z4vdj3m4")) ;; zig1 (arguments (package-arguments zig-0.10.0-747)) (native-inputs (modify-inputs (package-native-inputs base) (replace "zig" `(,base "out"))))))) (define zig-0.12-glibc-abi-tool (origin (method git-fetch) (uri (git-reference (url "https://github.com/ziglang/glibc-abi-tool") (commit "fc5d0a7046b76795e4219f8f168e118ec29fbc53"))) (file-name "glibc-abi-tool") (sha256 (base32 "1q9plbqkkk3jzrvsgcjmj5jjdncz4ym9p0snglz4kkjwwm65gqs1")))) (define-public zig-0.12 (package (inherit zig-0.11) (name "zig") (version "0.12.1") (source (origin (inherit (zig-source version version "0ssgfrsk116p16rwjwq1z2pvvcdij6s30s19bhzjms7maz4s77hb")) (patches (search-patches "zig-0.12-build-respect-PKG_CONFIG-env-var.patch" "zig-0.12-use-baseline-cpu-by-default.patch" "zig-0.12-use-system-paths.patch" "zig-0.12-fix-runpath.patch")))) (arguments (substitute-keyword-arguments (package-arguments zig-0.11) ((#:phases phases '%standard-phases) #~(modify-phases #$phases (replace 'patch-more-shebangs (lambda* (#:key inputs #:allow-other-keys) ;; Zig uses information about an ELF file to determine the ;; version of glibc and other data for native builds. (substitute* "lib/std/zig/system.zig" (("/usr/bin/env") (search-input-file inputs "bin/clang++"))))))))) (inputs (modify-inputs (package-inputs zig-0.11) (replace "clang" clang-17) (replace "lld" lld-17))) (native-inputs (modify-inputs (package-native-inputs zig-0.11) (replace "glibc-abi-tool" zig-0.12-glibc-abi-tool) (replace "llvm" llvm-17) (replace "zig" `(,zig-0.11.0-3604 "zig1")))) (properties `((max-silent-time . 9600) ,@(clang-compiler-cpu-architectures "17"))))) ;;; ;;; Bootstrap path for Zig 0.13. ;;; (define zig-0.12.0-109 (let ((commit "b7799ef322103c8e449c45494c29fb4a8c9867df") (revision "109") (base zig-0.12)) (package (inherit base) (name "zig") (version (git-version "0.12.0" revision commit)) (source (zig-source version commit "1zy19w93wrd7dfdih8hfk9h3brkgaspaa60ipcmf08hlx6z2f0bz")) ;; zig1 (arguments (substitute-keyword-arguments (package-arguments zig-0.10.0-747) ((#:phases phases '%standard-phases) #~(modify-phases #$phases ;; Build errors when zig1.wasm is not found. (add-after 'unpack 'prepare-source (lambda _ (invoke "touch" "stage1/zig1.wasm"))) (replace 'build-zig1 (lambda _ (invoke "zig" "build" "--zig-lib-dir" "lib" "update-zig1" "--verbose"))))))) (native-inputs (modify-inputs (package-native-inputs base) (replace "zig" `(,base "out"))))))) (define zig-0.13-glibc-abi-tool (origin (method git-fetch) (uri (git-reference (url "https://github.com/ziglang/glibc-abi-tool") (commit "fc5d0a7046b76795e4219f8f168e118ec29fbc53"))) (file-name "glibc-abi-tool") (sha256 (base32 "1q9plbqkkk3jzrvsgcjmj5jjdncz4ym9p0snglz4kkjwwm65gqs1")))) (define-public zig-0.13 (package (inherit zig-0.12) (name "zig") (version "0.13.0") (source (origin (inherit (zig-source version version "0ly8042lbsa8019g0d1jg4l06rxpq2530n9mijq66n4lmx7a5976")) (patches (search-patches "zig-0.13-build-respect-PKG_CONFIG-env-var.patch" "zig-0.12-use-baseline-cpu-by-default.patch" "zig-0.12-use-system-paths.patch" "zig-0.13-fix-runpath.patch")))) (inputs (modify-inputs (package-inputs zig-0.12) (replace "clang" clang-18) (replace "lld" lld-18))) (native-inputs (modify-inputs (package-native-inputs zig-0.12) (replace "glibc-abi-tool" zig-0.13-glibc-abi-tool) (replace "llvm" llvm-18) (replace "zig" `(,zig-0.12.0-109 "zig1")))) (properties `((max-silent-time . 9600) ,@(clang-compiler-cpu-architectures "18"))))) (define-public zig zig-0.13)