(define-module (gnu packages zig) #:use-module (guix packages) #:use-module (guix git-download) #:use-module (guix build-system cmake) #:use-module ((guix licenses) #:prefix l:) #:use-module (guix build utils) #:use-module (gnu packages) #:use-module (gnu packages llvm) #:use-module (guix utils)) ;; Zig versions depend on specific LLVM major versions; should be able to update ;; to 0.8.x with lld@12 (define-public zig (package (name "zig") (version "0.7.1") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/ziglang/zig") (commit version))) (sha256 (base32 "0gq8xjqr3n38i2adkv9vf936frac80wh72dvhh4m5s66yafmhphg")))) (build-system cmake-build-system) (inputs `(("llvm" ,llvm-11) ("clang-toolchain" ,clang-toolchain-11) ("lld" ,lld))) ; is currently version 11 (arguments `(#:tests? #f #:phases (modify-phases %standard-phases (add-before 'install 'set-cachedir (lambda* _ ;; See [[https://github.com/ziglang/zig/issues/6810]] (setenv "XDG_CACHE_HOME" "/tmp/")))))) (home-page "https://ziglang.org/") (synopsis "Programming language for maintaining robust, optimal, and reusable software") (description "Zig is a general-purpose programming language and toolchain for maintaining robust, optimal, and reusable software. ⚡ A Simple Language Focus on debugging your application rather than debugging your programming language knowledge. @itemize @bullet @item No hidden control flow. @item No hidden memory allocations. @item No preprocessor, no macros. @end itemize ⚡ Comptime A fresh approach to metaprogramming based on compile-time code execution and lazy evaluation. @itemize @bullet @item Call any function at compile-time. @item Manipulate types as values without runtime overhead. @item Comptime emulates the target architecture. @end itemize ⚡ Performance Meets Safety Write fast, clear code capable of handling all error conditions. @itemize @bullet @item The language gracefully guides your error handling logic. @item Configurable runtime checks help you strike a balance between performance and safety guarantees. @item Take advantage of vector types to express SIMD instructions portably. @end itemize") (license l:expat)))