aboutsummaryrefslogtreecommitdiff
path: root/src/link.zig
diff options
context:
space:
mode:
authorJakub Konka <kubkon@jakubkonka.com>2023-08-21 08:07:42 +0200
committerJakub Konka <kubkon@jakubkonka.com>2023-08-21 08:07:44 +0200
commitb73ef342895f00bdb31ea5f947ee83764f235d43 (patch)
tree1aed709d194cdcfd203c2df5b88a1ac02a31d04c /src/link.zig
parent4793dafa0433d758b126f2f97d1de031b99e0fa1 (diff)
downloadzig-b73ef342895f00bdb31ea5f947ee83764f235d43.tar.gz
zig-b73ef342895f00bdb31ea5f947ee83764f235d43.zip
frontend: directly pass resolved frameworks container to the linker
We can infer the framework name from the included resolved framework path. Fix hash implementation, and bump linker hash value from 9 to 10.
Diffstat (limited to 'src/link.zig')
-rw-r--r--src/link.zig18
1 files changed, 6 insertions, 12 deletions
diff --git a/src/link.zig b/src/link.zig
index 90a09f8e11..48ad78364c 100644
--- a/src/link.zig
+++ b/src/link.zig
@@ -57,15 +57,11 @@ pub fn hashAddSystemLibs(
}
}
-pub fn hashAddFrameworks(
- hh: *Cache.HashHelper,
- hm: std.StringArrayHashMapUnmanaged(Framework),
-) void {
- const keys = hm.keys();
- hh.addListOfBytes(keys);
- for (hm.values()) |value| {
- hh.add(value.needed);
- hh.add(value.weak);
+pub fn hashAddFrameworks(man: *Cache.Manifest, hm: []const Framework) !void {
+ for (hm) |value| {
+ man.hash.add(value.needed);
+ man.hash.add(value.weak);
+ _ = try man.addFile(value.path, null);
}
}
@@ -209,7 +205,7 @@ pub const Options = struct {
objects: []Compilation.LinkObject,
framework_dirs: []const []const u8,
- frameworks: std.StringArrayHashMapUnmanaged(Framework),
+ frameworks: []const Framework,
/// These are *always* dynamically linked. Static libraries will be
/// provided as positional arguments.
system_libs: std.StringArrayHashMapUnmanaged(SystemLib),
@@ -277,7 +273,6 @@ pub const Options = struct {
pub fn move(self: *Options) Options {
const copied_state = self.*;
- self.frameworks = .{};
self.system_libs = .{};
self.force_undefined_symbols = .{};
return copied_state;
@@ -643,7 +638,6 @@ pub const File = struct {
base.releaseLock();
if (base.file) |f| f.close();
if (base.intermediary_basename) |sub_path| base.allocator.free(sub_path);
- base.options.frameworks.deinit(base.allocator);
base.options.system_libs.deinit(base.allocator);
base.options.force_undefined_symbols.deinit(base.allocator);
switch (base.tag) {