diff options
| author | Jakub Konka <kubkon@jakubkonka.com> | 2023-08-20 10:43:20 +0200 |
|---|---|---|
| committer | Jakub Konka <kubkon@jakubkonka.com> | 2023-08-20 10:43:20 +0200 |
| commit | 4793dafa0433d758b126f2f97d1de031b99e0fa1 (patch) | |
| tree | db8757b4acee55a28e1d6b5b6616fc2c3626eb7d /src/link | |
| parent | e687c87d691518d63414aed4f355dabbd8565dc3 (diff) | |
| download | zig-4793dafa0433d758b126f2f97d1de031b99e0fa1.tar.gz zig-4793dafa0433d758b126f2f97d1de031b99e0fa1.zip | |
frontend: move framework path resolution from the linker to frontend
Diffstat (limited to 'src/link')
| -rw-r--r-- | src/link/MachO.zig | 22 | ||||
| -rw-r--r-- | src/link/MachO/zld.zig | 44 |
2 files changed, 10 insertions, 56 deletions
diff --git a/src/link/MachO.zig b/src/link/MachO.zig index 0f6859e32a..92224da63b 100644 --- a/src/link/MachO.zig +++ b/src/link/MachO.zig @@ -870,7 +870,7 @@ fn resolveLibSystemInDirs(arena: Allocator, dirs: []const []const u8, out_libs: return false; } -pub fn resolveLib( +fn resolveLib( arena: Allocator, search_dir: []const u8, name: []const u8, @@ -889,26 +889,6 @@ pub fn resolveLib( return full_path; } -pub fn resolveFramework( - arena: Allocator, - search_dir: []const u8, - name: []const u8, - ext: []const u8, -) !?[]const u8 { - const search_name = try std.fmt.allocPrint(arena, "{s}{s}", .{ name, ext }); - const prefix_path = try std.fmt.allocPrint(arena, "{s}.framework", .{name}); - const full_path = try fs.path.join(arena, &[_][]const u8{ search_dir, prefix_path, search_name }); - - // Check if the file exists. - const tmp = fs.cwd().openFile(full_path, .{}) catch |err| switch (err) { - error.FileNotFound => return null, - else => |e| return e, - }; - defer tmp.close(); - - return full_path; -} - const ParseDylibError = error{ OutOfMemory, EmptyStubFile, diff --git a/src/link/MachO/zld.zig b/src/link/MachO/zld.zig index 9de287e3e8..7987bb4f1d 100644 --- a/src/link/MachO/zld.zig +++ b/src/link/MachO/zld.zig @@ -3512,9 +3512,6 @@ pub fn linkWithZld(macho_file: *MachO, comp: *Compilation, prog_node: *std.Progr try zld.atoms.append(gpa, Atom.empty); // AtomIndex at 0 is reserved as null atom try zld.strtab.buffer.append(gpa, 0); - var lib_not_found = false; - var framework_not_found = false; - // Positional arguments to the linker such as object files and static archives. var positionals = std.ArrayList([]const u8).init(arena); try positionals.ensureUnusedCapacity(options.objects.len); @@ -3557,34 +3554,17 @@ pub fn linkWithZld(macho_file: *MachO, comp: *Compilation, prog_node: *std.Progr for (vals) |v| libs.putAssumeCapacity(v.path.?, v); } - try MachO.resolveLibSystem(arena, comp, options.sysroot, target, options.lib_dirs, &libs); - - // frameworks - outer: for (options.frameworks.keys()) |f_name| { - for (options.framework_dirs) |dir| { - for (&[_][]const u8{ ".tbd", ".dylib", "" }) |ext| { - if (try MachO.resolveFramework(arena, dir, f_name, ext)) |full_path| { - const info = options.frameworks.get(f_name).?; - try libs.put(full_path, .{ - .needed = info.needed, - .weak = info.weak, - .path = full_path, - }); - continue :outer; - } - } - } else { - log.warn("framework not found for '-framework {s}'", .{f_name}); - framework_not_found = true; - } + { + const vals = options.frameworks.values(); + try libs.ensureUnusedCapacity(vals.len); + for (vals) |v| libs.putAssumeCapacity(v.path, .{ + .needed = v.needed, + .weak = v.weak, + .path = v.path, + }); } - if (framework_not_found) { - log.warn("Framework search paths:", .{}); - for (options.framework_dirs) |dir| { - log.warn(" {s}", .{dir}); - } - } + try MachO.resolveLibSystem(arena, comp, options.sysroot, target, options.lib_dirs, &libs); if (options.verbose_link) { var argv = std.ArrayList([]const u8).init(arena); @@ -3731,12 +3711,6 @@ pub fn linkWithZld(macho_file: *MachO, comp: *Compilation, prog_node: *std.Progr if (resolver.unresolved.count() > 0) { return error.UndefinedSymbolReference; } - if (lib_not_found) { - return error.LibraryNotFound; - } - if (framework_not_found) { - return error.FrameworkNotFound; - } if (options.output_mode == .Exe) { const entry_name = options.entry orelse load_commands.default_entry_point; |
