diff options
| author | Jakub Konka <kubkon@jakubkonka.com> | 2024-02-02 14:05:51 +0100 |
|---|---|---|
| committer | Jakub Konka <kubkon@jakubkonka.com> | 2024-02-02 22:00:16 +0100 |
| commit | 92deebcd668750bd4042c5874bf35b447828cd8a (patch) | |
| tree | 412ac01bd1ee8c20bf4fc55281626e885e8fd0e4 /src/link/MachO.zig | |
| parent | 9eda6ccefce370c76209ea50dd57fe65bfe25536 (diff) | |
| download | zig-92deebcd668750bd4042c5874bf35b447828cd8a.tar.gz zig-92deebcd668750bd4042c5874bf35b447828cd8a.zip | |
cli+build: handle -ObjC flag and route it to MachO linker
Diffstat (limited to 'src/link/MachO.zig')
| -rw-r--r-- | src/link/MachO.zig | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/src/link/MachO.zig b/src/link/MachO.zig index c2a098b9f5..e7603e2bde 100644 --- a/src/link/MachO.zig +++ b/src/link/MachO.zig @@ -217,6 +217,7 @@ pub fn createEmpty( .undefined_treatment = if (allow_shlib_undefined) .dynamic_lookup else .@"error", .lib_dirs = options.lib_dirs, .framework_dirs = options.framework_dirs, + .force_load_objc = options.force_load_objc, }; if (use_llvm and comp.config.have_zcu) { self.llvm_object = try LlvmObject.create(arena, comp); @@ -807,6 +808,10 @@ fn dumpArgv(self: *MachO, comp: *Compilation) !void { try argv.append("-dead_strip_dylibs"); } + if (self.force_load_objc) { + try argv.append("-ObjC"); + } + if (self.entry_name) |entry_name| { try argv.appendSlice(&.{ "-e", entry_name }); } @@ -1247,7 +1252,7 @@ fn parseDependentDylibs(self: *MachO) !void { try checked_paths.append(rel_path); var buffer: [std.fs.MAX_PATH_BYTES]u8 = undefined; const full_path = std.fs.realpath(rel_path, &buffer) catch continue; - break :full_path full_path; + break :full_path try arena.dupe(u8, full_path); } } else if (eatPrefix(id.name, "@loader_path/")) |_| { try self.reportParseError2(dylib_index, "TODO handle install_name '{s}'", .{id.name}); @@ -1260,7 +1265,7 @@ fn parseDependentDylibs(self: *MachO) !void { try checked_paths.append(try arena.dupe(u8, id.name)); var buffer: [std.fs.MAX_PATH_BYTES]u8 = undefined; if (std.fs.realpath(id.name, &buffer)) |full_path| { - break :full_path full_path; + break :full_path try arena.dupe(u8, full_path); } else |_| { try self.reportMissingDependencyError( self.getFile(dylib_index).?.dylib.getUmbrella(self).index, |
