From 6fc811d02afe792f7ec09b2aa92a87b9ce191321 Mon Sep 17 00:00:00 2001 From: Hilton Chain Date: Sun, 17 Nov 2024 02:42:35 +0800 Subject: [PATCH] build/zig: Really support cross compilation. * guix/build/zig-build-system.scm (configure): New procedure. (set-cc,set-zig-global-cache-dir): Delete procedures. (%standard-phases): Adjust accordingly. Change-Id: I08d15add2b249f7016f9cbb07f151ecf469fe656 --- guix/build/zig-build-system.scm | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/guix/build/zig-build-system.scm b/guix/build/zig-build-system.scm index 8352a73324eb88f39b5d59c8f92049c15158004e..93a5d915369984200bc6813bacc4741d938a68f2 100644 --- a/guix/build/zig-build-system.scm +++ b/guix/build/zig-build-system.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2023 Ekaitz Zarraga +;;; Copyright © 2024 Hilton Chain ;;; ;;; This file is part of GNU Guix. ;;; @@ -34,14 +35,24 @@ ;; https://github.com/riverwm/river/blob/master/PACKAGING.md (define global-cache-dir "zig-cache") -(define* (set-cc #:rest args) - ;; TODO: Zig needs the gcc-toolchain in order to find the libc. - ;; we need to think about how to solve this in the build system - ;; directly: --libc - (setenv "CC" "gcc")) +(define* (configure #:key inputs target #:allow-other-keys) + ;; Set cache dir, otherwise Zig looks for `$HOME/.cache'. + (setenv "ZIG_GLOBAL_CACHE_DIR" global-cache-dir) -(define* (set-zig-global-cache-dir #:rest args) - (setenv "ZIG_GLOBAL_CACHE_DIR" global-cache-dir)) + ;; Libc paths for target. + (let ((libc (assoc-ref inputs (if target "cross-libc" "libc"))) + (port (open-file "/tmp/guix-zig-libc-paths" "w" #:encoding "utf8"))) + (display + (string-append "\ +include_dir=" libc "/include +sys_include_dir=" libc "/include +crt_dir=" libc "/lib +msvc_lib_dir= +kernel32_lib_dir= +gcc_dir=") + port) + (close-port port)) + (setenv "ZIG_LIBC" "/tmp/guix-zig-libc-paths")) (define* (build #:key zig-build-flags @@ -91,9 +102,7 @@ (define %standard-phases (modify-phases gnu:%standard-phases (delete 'bootstrap) - (delete 'configure) - (add-before 'build 'set-zig-global-cache-dir set-zig-global-cache-dir) - (add-before 'build 'set-cc set-cc) + (replace 'configure configure) (replace 'build build) (replace 'check check) (replace 'install install)))