aboutsummaryrefslogtreecommitdiff
path: root/src/link
diff options
context:
space:
mode:
authorJakub Konka <kubkon@jakubkonka.com>2023-08-20 10:43:20 +0200
committerJakub Konka <kubkon@jakubkonka.com>2023-08-20 10:43:20 +0200
commit4793dafa0433d758b126f2f97d1de031b99e0fa1 (patch)
treedb8757b4acee55a28e1d6b5b6616fc2c3626eb7d /src/link
parente687c87d691518d63414aed4f355dabbd8565dc3 (diff)
downloadzig-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.zig22
-rw-r--r--src/link/MachO/zld.zig44
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;