From 71ee8ceed9dd045aa7a4bb50291fceb05257314b Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Wed, 1 Jul 2026 19:57:38 -0700 Subject: [PATCH] compiler: jit commands support --zig-lib=[path] when it is the first parameter after the command name. fixes regression introduced in d4b70505551ecf568f8af7375cb0e6e5aea97cfb --- CMakeLists.txt | 4 +++- cmake/install.cmake | 2 +- lib/compiler/Maker.zig | 2 ++ lib/compiler/Maker/ScannedConfig.zig | 1 + src/main.zig | 15 ++++++++++++--- 5 files changed, 19 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e9c24112daefb6350d78de46f765828eab78a7a8..6f144cd68374ec7c0ec8c7ba7964cde06943d88a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -729,6 +729,8 @@ endif() set(ZIG_BUILD_ARGS + "--zig-lib=${PROJECT_SOURCE_DIR}/lib" + "-Dversion-string=${RESOLVED_ZIG_VERSION}" "-Dtarget=${ZIG_TARGET_TRIPLE}" "-Dcpu=${ZIG_TARGET_MCPU}" @@ -791,7 +793,7 @@ set(ZIG2_WORKING_DIR "${PROJECT_SOURCE_DIR}") add_custom_command( OUTPUT "${PROJECT_BINARY_DIR}/stage3/bin/zig" - COMMAND zig2 build --prefix "${PROJECT_BINARY_DIR}/stage3" ${ZIG_BUILD_ARGS} + COMMAND zig2 build ${ZIG_BUILD_ARGS} --prefix "${PROJECT_BINARY_DIR}/stage3" COMMENT "Building stage3" WORKING_DIRECTORY "${ZIG2_WORKING_DIR}" ) diff --git a/cmake/install.cmake b/cmake/install.cmake index 67ebe790532e4cac5cccdf8c0c165855804e67f5..1d3ebbf96016522757b18eb6a1dcb12ee07bce33 100644 --- a/cmake/install.cmake +++ b/cmake/install.cmake @@ -1,4 +1,4 @@ -set(ZIG_INSTALL_ARGS build --prefix "${CMAKE_INSTALL_PREFIX}" ${ZIG_BUILD_ARGS}) +set(ZIG_INSTALL_ARGS build ${ZIG_BUILD_ARGS} --prefix "${CMAKE_INSTALL_PREFIX}") execute_process( COMMAND "${ZIG_EXECUTABLE}" ${ZIG_INSTALL_ARGS} WORKING_DIRECTORY "${ZIG2_WORKING_DIR}" diff --git a/lib/compiler/Maker.zig b/lib/compiler/Maker.zig index 229893f520499f1b91f51024a7ab85d38074bd45..c48e60debe05c09a450a9f2a4c382c31604f950f 100644 --- a/lib/compiler/Maker.zig +++ b/lib/compiler/Maker.zig @@ -316,6 +316,8 @@ pub fn main(init: process.Init.Minimal) !void { try forks.append(arena, .init(rest)); } else if (mem.eql(u8, arg, "--fork")) { try forks.append(arena, .init(nextArgOrFatal(args, &arg_i))); + } else if (mem.startsWith(u8, arg, "--zig-lib=")) { + fatal("--zig-lib= argument is special and must be first", .{}); } else if (mem.eql(u8, arg, "-h") or mem.eql(u8, arg, "--help")) { help_menu = true; } else if (mem.eql(u8, arg, "-l") or mem.eql(u8, arg, "--list-steps")) { diff --git a/lib/compiler/Maker/ScannedConfig.zig b/lib/compiler/Maker/ScannedConfig.zig index 8421cd008547b17ff14f1c416d64040d6c33f56e..b137ee3a5325c8f811488bbc57e9222e9f9229b7 100644 --- a/lib/compiler/Maker/ScannedConfig.zig +++ b/lib/compiler/Maker/ScannedConfig.zig @@ -342,6 +342,7 @@ pub fn printUsage(sc: *const ScannedConfig, graph: *Graph, w: *Writer) !void { \\ --build-file [file] Override path to build.zig \\ --cache-dir [path] Override path to local Zig cache directory \\ --global-cache-dir [path] Override path to global Zig cache directory + \\ --zig-lib=[arg] Override path to Zig lib directory \\ --seed [integer] For shuffling dependency traversal order (default: random) \\ --cache-poison[=mode] Override configuration caching behavior \\ pure (default) Avoid false positive cache hits diff --git a/src/main.zig b/src/main.zig index 56266b1724c15a1370dacbf4499a7bff47239f87..a7182be42eab77d15582da3ffc9341c855f72d55 100644 --- a/src/main.zig +++ b/src/main.zig @@ -4932,9 +4932,18 @@ fn jitCmdInner( else options.release_mode; const strip = optimize_mode != .Debug; - const override_lib_dir: ?[]const u8 = EnvVar.ZIG_LIB_DIR.get(environ_map); + var override_lib_dir: ?[]const u8 = EnvVar.ZIG_LIB_DIR.get(environ_map); const override_global_cache_dir: ?[]const u8 = EnvVar.ZIG_GLOBAL_CACHE_DIR.get(environ_map); + // Special case: if first arg starts with --zig-lib= then it is handled here. + var args_i: usize = 0; + if (args.len - args_i != 0) { + if (mem.cutPrefix(u8, args[args_i], "--zig-lib=")) |rest| { + override_lib_dir = rest; + args_i += 1; + } + } + const cwd_path = try std.zig.getResolvedCwd(io, arena); // This `init` calls `fatal` on error. @@ -4952,7 +4961,7 @@ fn jitCmdInner( defer dirs.deinit(io); var child_argv: std.ArrayList([]const u8) = .empty; - try child_argv.ensureUnusedCapacity(arena, args.len + 6); + try child_argv.ensureUnusedCapacity(arena, (args.len - args_i) + 6); // We want to release all the locks before executing the child process, so we make a nice // big block here to ensure the cleanup gets run when we extract out our argv. @@ -5064,7 +5073,7 @@ fn jitCmdInner( if (options.prepend_seed) child_argv.appendAssumeCapacity(try arena.print("--seed=0x{x}", .{randInt(io, u32)})); - child_argv.appendSliceAssumeCapacity(args); + child_argv.appendSliceAssumeCapacity(args[args_i..]); if (EnvVar.ZIG_VERBOSE_CMD.isSet(environ_map)) { const cmd: std.zig.SubprocessCommand = .{ -- 2.54.0