diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2024-10-16 15:43:47 -0700 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2024-10-23 16:27:38 -0700 |
| commit | b510c5719f3cfd55ee70da5a1005396d28dd1c1d (patch) | |
| tree | a7d822bbd56d22c75103434763bac1d1f0eb7bb7 /src/Compilation.zig | |
| parent | 353d3023c01e6b5311a98168f15bd31aae3933b8 (diff) | |
| download | zig-b510c5719f3cfd55ee70da5a1005396d28dd1c1d.tar.gz zig-b510c5719f3cfd55ee70da5a1005396d28dd1c1d.zip | |
refactor Compilation.crtFilePath
Diffstat (limited to 'src/Compilation.zig')
| -rw-r--r-- | src/Compilation.zig | 36 |
1 files changed, 23 insertions, 13 deletions
diff --git a/src/Compilation.zig b/src/Compilation.zig index 06ad1604c6..5d304d8159 100644 --- a/src/Compilation.zig +++ b/src/Compilation.zig @@ -6040,7 +6040,7 @@ test "classifyFileExt" { } pub fn get_libc_crt_file(comp: *Compilation, arena: Allocator, basename: []const u8) !Path { - return (try crtFilePath(comp, basename)) orelse { + return (try crtFilePath(&comp.crt_files, basename)) orelse { const lci = comp.libc_installation orelse return error.LibCInstallationNotAvailable; const crt_dir_path = lci.crt_dir orelse return error.LibCInstallationMissingCrtDir; const full_path = try std.fs.path.join(arena, &[_][]const u8{ crt_dir_path, basename }); @@ -6053,8 +6053,8 @@ pub fn crtFileAsString(comp: *Compilation, arena: Allocator, basename: []const u return path.toString(arena); } -pub fn crtFilePath(comp: *Compilation, basename: []const u8) Allocator.Error!?Path { - const crt_file = comp.crt_files.get(basename) orelse return null; +fn crtFilePath(crt_files: *std.StringHashMapUnmanaged(CrtFile), basename: []const u8) Allocator.Error!?Path { + const crt_file = crt_files.get(basename) orelse return null; return crt_file.full_object_path; } @@ -6462,21 +6462,31 @@ pub fn getCrtPaths( arena: Allocator, ) error{ OutOfMemory, LibCInstallationMissingCrtDir }!LibCInstallation.CrtPaths { const target = comp.root_mod.resolved_target.result; + return getCrtPathsInner(arena, target, comp.config, comp.libc_installation, &comp.crt_files); +} + +fn getCrtPathsInner( + arena: Allocator, + target: std.Target, + config: Config, + libc_installation: ?*const LibCInstallation, + crt_files: *std.StringHashMapUnmanaged(CrtFile), +) error{ OutOfMemory, LibCInstallationMissingCrtDir }!LibCInstallation.CrtPaths { const basenames = LibCInstallation.CrtBasenames.get(.{ .target = target, - .link_libc = comp.config.link_libc, - .output_mode = comp.config.output_mode, - .link_mode = comp.config.link_mode, - .pie = comp.config.pie, + .link_libc = config.link_libc, + .output_mode = config.output_mode, + .link_mode = config.link_mode, + .pie = config.pie, }); - if (comp.libc_installation) |lci| return lci.resolveCrtPaths(arena, basenames, target); + if (libc_installation) |lci| return lci.resolveCrtPaths(arena, basenames, target); return .{ - .crt0 = if (basenames.crt0) |basename| try comp.crtFilePath(basename) else null, - .crti = if (basenames.crti) |basename| try comp.crtFilePath(basename) else null, - .crtbegin = if (basenames.crtbegin) |basename| try comp.crtFilePath(basename) else null, - .crtend = if (basenames.crtend) |basename| try comp.crtFilePath(basename) else null, - .crtn = if (basenames.crtn) |basename| try comp.crtFilePath(basename) else null, + .crt0 = if (basenames.crt0) |basename| try crtFilePath(crt_files, basename) else null, + .crti = if (basenames.crti) |basename| try crtFilePath(crt_files, basename) else null, + .crtbegin = if (basenames.crtbegin) |basename| try crtFilePath(crt_files, basename) else null, + .crtend = if (basenames.crtend) |basename| try crtFilePath(crt_files, basename) else null, + .crtn = if (basenames.crtn) |basename| try crtFilePath(crt_files, basename) else null, }; } |
