From 0df7ed79d304afc7d379482005e892979d4a5e4d Mon Sep 17 00:00:00 2001 From: Jakub Konka Date: Fri, 24 Jun 2022 20:25:16 +0200 Subject: macho: implement -search_dylibs_first linker option --- src/Compilation.zig | 3 +++ 1 file changed, 3 insertions(+) (limited to 'src/Compilation.zig') diff --git a/src/Compilation.zig b/src/Compilation.zig index 8cb93b5473..cbd36216ae 100644 --- a/src/Compilation.zig +++ b/src/Compilation.zig @@ -905,6 +905,8 @@ pub const InitOptions = struct { entitlements: ?[]const u8 = null, /// (Darwin) size of the __PAGEZERO segment pagezero_size: ?u64 = null, + /// (Darwin) search strategy for system libraries + search_strategy: ?link.File.MachO.SearchStrategy = null, }; fn addPackageTableToCacheHash( @@ -1745,6 +1747,7 @@ pub fn create(gpa: Allocator, options: InitOptions) !*Compilation { .install_name = options.install_name, .entitlements = options.entitlements, .pagezero_size = options.pagezero_size, + .search_strategy = options.search_strategy, }); errdefer bin_file.destroy(); comp.* = .{ -- cgit v1.2.3 From dfdb807543a03eec27341deec6a5f3b88f87fac3 Mon Sep 17 00:00:00 2001 From: Jakub Konka Date: Sat, 25 Jun 2022 10:50:00 +0200 Subject: cache setting macho search strategy flags --- src/Compilation.zig | 5 +++-- src/link/Coff.zig | 2 +- src/link/Elf.zig | 2 +- src/link/MachO.zig | 3 ++- src/link/Wasm.zig | 2 +- 5 files changed, 8 insertions(+), 6 deletions(-) (limited to 'src/Compilation.zig') diff --git a/src/Compilation.zig b/src/Compilation.zig index cbd36216ae..ccaad7c8c4 100644 --- a/src/Compilation.zig +++ b/src/Compilation.zig @@ -2363,7 +2363,7 @@ fn prepareWholeEmitSubPath(arena: Allocator, opt_emit: ?EmitLoc) error{OutOfMemo /// to remind the programmer to update multiple related pieces of code that /// are in different locations. Bump this number when adding or deleting /// anything from the link cache manifest. -pub const link_hash_implementation_version = 4; +pub const link_hash_implementation_version = 5; fn addNonIncrementalStuffToCacheManifest(comp: *Compilation, man: *Cache.Manifest) !void { const gpa = comp.gpa; @@ -2373,7 +2373,7 @@ fn addNonIncrementalStuffToCacheManifest(comp: *Compilation, man: *Cache.Manifes defer arena_allocator.deinit(); const arena = arena_allocator.allocator(); - comptime assert(link_hash_implementation_version == 4); + comptime assert(link_hash_implementation_version == 5); if (comp.bin_file.options.module) |mod| { const main_zig_file = try mod.main_pkg.root_src_directory.join(arena, &[_][]const u8{ @@ -2479,6 +2479,7 @@ fn addNonIncrementalStuffToCacheManifest(comp: *Compilation, man: *Cache.Manifes man.hash.addListOfBytes(comp.bin_file.options.frameworks); try man.addOptionalFile(comp.bin_file.options.entitlements); man.hash.addOptional(comp.bin_file.options.pagezero_size); + man.hash.addOptional(comp.bin_file.options.search_strategy); // COFF specific stuff man.hash.addOptional(comp.bin_file.options.subsystem); diff --git a/src/link/Coff.zig b/src/link/Coff.zig index 6b4ff26bce..3418a206df 100644 --- a/src/link/Coff.zig +++ b/src/link/Coff.zig @@ -969,7 +969,7 @@ fn linkWithLLD(self: *Coff, comp: *Compilation, prog_node: *std.Progress.Node) ! man = comp.cache_parent.obtain(); self.base.releaseLock(); - comptime assert(Compilation.link_hash_implementation_version == 4); + comptime assert(Compilation.link_hash_implementation_version == 5); for (self.base.options.objects) |obj| { _ = try man.addFile(obj.path, null); diff --git a/src/link/Elf.zig b/src/link/Elf.zig index 0bcde06f33..1051c0eb78 100644 --- a/src/link/Elf.zig +++ b/src/link/Elf.zig @@ -1298,7 +1298,7 @@ fn linkWithLLD(self: *Elf, comp: *Compilation, prog_node: *std.Progress.Node) !v // We are about to obtain this lock, so here we give other processes a chance first. self.base.releaseLock(); - comptime assert(Compilation.link_hash_implementation_version == 4); + comptime assert(Compilation.link_hash_implementation_version == 5); try man.addOptionalFile(self.base.options.linker_script); try man.addOptionalFile(self.base.options.version_script); diff --git a/src/link/MachO.zig b/src/link/MachO.zig index 92d8134ec9..2bbd2e7a72 100644 --- a/src/link/MachO.zig +++ b/src/link/MachO.zig @@ -541,7 +541,7 @@ pub fn flushModule(self: *MachO, comp: *Compilation, prog_node: *std.Progress.No // We are about to obtain this lock, so here we give other processes a chance first. self.base.releaseLock(); - comptime assert(Compilation.link_hash_implementation_version == 4); + comptime assert(Compilation.link_hash_implementation_version == 5); for (self.base.options.objects) |obj| { _ = try man.addFile(obj.path, null); @@ -555,6 +555,7 @@ pub fn flushModule(self: *MachO, comp: *Compilation, prog_node: *std.Progress.No // installation sources because they are always a product of the compiler version + target information. man.hash.add(stack_size); man.hash.addOptional(self.base.options.pagezero_size); + man.hash.addOptional(self.base.options.search_strategy); man.hash.addListOfBytes(self.base.options.lib_dirs); man.hash.addListOfBytes(self.base.options.framework_dirs); man.hash.addListOfBytes(self.base.options.frameworks); diff --git a/src/link/Wasm.zig b/src/link/Wasm.zig index 4357a588a1..c654fbe719 100644 --- a/src/link/Wasm.zig +++ b/src/link/Wasm.zig @@ -2481,7 +2481,7 @@ fn linkWithLLD(self: *Wasm, comp: *Compilation, prog_node: *std.Progress.Node) ! // We are about to obtain this lock, so here we give other processes a chance first. self.base.releaseLock(); - comptime assert(Compilation.link_hash_implementation_version == 4); + comptime assert(Compilation.link_hash_implementation_version == 5); for (self.base.options.objects) |obj| { _ = try man.addFile(obj.path, null); -- cgit v1.2.3