~ruther/guix-local

003ec2756fd72b08ac8bbeed4013b133f63a7cad — Hilton Chain 1 year, 6 months ago 4489db1
gnu: Add zig-0.10.0-610.

* gnu/packages/patches/zig-0.10.0-610-bootstrap-resolve-conflicts.patch: New
file.
* gnu/local.mk (dist_patch_DATA): Regisiter it.
* gnu/packages/zig.scm (zig-0.10.0-538-source,zig-0.10.0-539-patch)
(zig-0.10.0-542-patch,zig-0.10.0-610): New variables.
M gnu/local.mk => gnu/local.mk +1 -0
@@ 2419,6 2419,7 @@ dist_patch_DATA =						\
  %D%/packages/patches/zig-0.9-use-system-paths.patch		\
  %D%/packages/patches/zig-0.10-fix-runpath.patch		\
  %D%/packages/patches/zig-0.10-use-system-paths.patch		\
  %D%/packages/patches/zig-0.10.0-610-bootstrap-resolve-conflicts.patch	\
  %D%/packages/patches/zsh-egrep-failing-test.patch		\
  %D%/packages/patches/zuo-bin-sh.patch


A gnu/packages/patches/zig-0.10.0-610-bootstrap-resolve-conflicts.patch => gnu/packages/patches/zig-0.10.0-610-bootstrap-resolve-conflicts.patch +87 -0
@@ 0,0 1,87 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1c03faf1e9..89406eb1b2 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -846,16 +846,17 @@ else()
 endif()
 
 set(ZIG_BUILD_ARGS
-  --zig-lib-dir "${CMAKE_SOURCE_DIR}/lib"
-  "-Dconfig_h=${ZIG_CONFIG_H_OUT}"
-  "-Denable-llvm"
-  ${ZIG_RELEASE_ARG}
-  ${ZIG_STATIC_ARG}
-  ${ZIG_NO_LIB_ARG}
-  ${ZIG_SINGLE_THREADED_ARG}
-  "-Dtarget=${ZIG_TARGET_TRIPLE}"
-  "-Dcpu=${ZIG_TARGET_MCPU}"
-  "-Dversion-string=${RESOLVED_ZIG_VERSION}"
+    --zig-lib-dir "${CMAKE_SOURCE_DIR}/lib"
+    "-Dconfig_h=${ZIG_CONFIG_H_OUT}"
+    "-Denable-llvm"
+    "-Denable-stage1"
+    ${ZIG_RELEASE_ARG}
+    ${ZIG_STATIC_ARG}
+    ${ZIG_NO_LIB_ARG}
+    ${ZIG_SINGLE_THREADED_ARG}
+    "-Dtarget=${ZIG_TARGET_TRIPLE}"
+    "-Dcpu=${ZIG_TARGET_MCPU}"
+    "-Dversion-string=${RESOLVED_ZIG_VERSION}"
 )
 
 add_custom_target(stage3 ALL
diff --git a/build.zig b/build.zig
index cf0e092326..7f80c3e1df 100644
--- a/build.zig
+++ b/build.zig
@@ -142,7 +142,8 @@ pub fn build(b: *Builder) !void {
     const force_gpa = b.option(bool, "force-gpa", "Force the compiler to use GeneralPurposeAllocator") orelse false;
     const link_libc = b.option(bool, "force-link-libc", "Force self-hosted compiler to link libc") orelse (enable_llvm or only_c);
     const sanitize_thread = b.option(bool, "sanitize-thread", "Enable thread-sanitization") orelse false;
-    const strip = b.option(bool, "strip", "Omit debug information");
+    const strip = b.option(bool, "strip", "Omit debug information") orelse false;
+    const use_zig0 = b.option(bool, "zig0", "Bootstrap using zig0") orelse false;
     const value_tracing = b.option(bool, "value-tracing", "Enable extra state tracking to help troubleshoot bugs in the compiler (using the std.debug.Trace API)") orelse false;
 
     const mem_leak_frames: u32 = b.option(u32, "mem-leak-frames", "How many stack frames to print when a memory leak occurs. Tests get 2x this amount.") orelse blk: {
@@ -151,7 +152,22 @@ pub fn build(b: *Builder) !void {
         break :blk 4;
     };
 
-    const exe = addCompilerStep(b);
+    if (only_c) {
+        target.ofmt = .c;
+    }
+
+    const main_file: ?[]const u8 = mf: {
+        if (!have_stage1) break :mf "src/main.zig";
+        if (use_zig0) break :mf null;
+        break :mf "src/stage1.zig";
+    };
+
+    const exe = b.addExecutable("zig", main_file);
+
+    const compile_step = b.step("compile", "Build the self-hosted compiler");
+    compile_step.dependOn(&exe.step);
+
+    exe.stack_size = stack_size;
     exe.strip = strip;
     exe.sanitize_thread = sanitize_thread;
     exe.build_id = b.option(bool, "build-id", "Include a build id note") orelse false;
diff --git a/src/translate_c/ast.zig b/src/translate_c/ast.zig
index 20e4259725..bc0f002c21 100644
--- a/src/translate_c/ast.zig
+++ b/src/translate_c/ast.zig
@@ -1448,6 +1448,12 @@ fn renderNode(c: *Context, node: Node) Allocator.Error!NodeIndex {
         .optional_type => return renderPrefixOp(c, node, .optional_type, .question_mark, "?"),
         .address_of => {
             const payload = node.castTag(.address_of).?.data;
+            if (c.zig_is_stage1 and payload.tag() == .fn_identifier)
+                return try c.addNode(.{
+                    .tag = .identifier,
+                    .main_token = try c.addIdentifier(payload.castTag(.fn_identifier).?.data),
+                    .data = undefined,
+                });
 
             const ampersand = try c.addToken(.ampersand, "&");
             const base = if (payload.tag() == .fn_identifier)

M gnu/packages/zig.scm => gnu/packages/zig.scm +103 -1
@@ 24,13 24,15 @@
  #:use-module (guix gexp)
  #:use-module (guix packages)
  #: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 llvm-meta)
  #:use-module (gnu packages web))

(define (zig-source version commit hash)
  (origin


@@ 261,4 263,104 @@ toolchain.  Among other features it provides
    (properties `((max-silent-time . 9600)
                  ,@(clang-compiler-cpu-architectures "15")))))


;;;
;;; Bootstrap path for Zig 0.11.
;;; See also: <https://git.jakstys.lt/motiejus/zig-repro>.
;;;

;; 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)
         ;; 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")))))

(define-public zig zig-0.10)