authorgravatar for mlugg@mlugg.co.ukMatthew Lugg <mlugg@mlugg.co.uk> 2023-09-22 23:33:55+01:00
committergravatar for mlugg@mlugg.co.ukMatthew Lugg <mlugg@mlugg.co.uk> 2023-09-24 06:57:11+01:00
logfb6fff2561b5a56917e5efee4c374130189ab8b0
tree6865ebfe9c792e1e12ace61307cd81e68af80fac
parent8eff0a0a669dbdacf9cebbc96fdf20536f3073ee

resinator: do not include in only_core_functionality builds

This prevents resinator from being included in zig1 and zig2.

4 files changed, 76 insertions(+), 45 deletions(-)

src/Compilation.zig+52-36
......@@ -47,7 +47,8 @@ gpa: Allocator,
4747arena_state: std.heap.ArenaAllocator.State,
4848bin_file: *link.File,
4949c_object_table: std.AutoArrayHashMapUnmanaged(*CObject, void) = .{},
50win32_resource_table: std.AutoArrayHashMapUnmanaged(*Win32Resource, void) = .{},
50win32_resource_table: if (build_options.only_core_functionality) void else std.AutoArrayHashMapUnmanaged(*Win32Resource, void) =
51 if (build_options.only_core_functionality) {} else .{},
5152/// This is a pointer to a local variable inside `update()`.
5253whole_cache_manifest: ?*Cache.Manifest = null,
5354whole_cache_manifest_mutex: std.Thread.Mutex = .{},
......@@ -64,7 +65,7 @@ c_object_work_queue: std.fifo.LinearFifo(*CObject, .Dynamic),
6465
6566/// These jobs are to invoke the RC compiler to create a compiled resource file (.res), which
6667/// gets linked with the Compilation.
67win32_resource_work_queue: std.fifo.LinearFifo(*Win32Resource, .Dynamic),
68win32_resource_work_queue: if (build_options.only_core_functionality) void else std.fifo.LinearFifo(*Win32Resource, .Dynamic),
6869
6970/// These jobs are to tokenize, parse, and astgen files, which may be outdated
7071/// since the last compilation, as well as scan for `@import` and queue up
......@@ -81,7 +82,8 @@ failed_c_objects: std.AutoArrayHashMapUnmanaged(*CObject, *CObject.ErrorMsg) = .
8182
8283/// The ErrorBundle memory is owned by the `Win32Resource`, using Compilation's general purpose allocator.
8384/// This data is accessed by multiple threads and is protected by `mutex`.
84failed_win32_resources: std.AutoArrayHashMapUnmanaged(*Win32Resource, ErrorBundle) = .{},
85failed_win32_resources: if (build_options.only_core_functionality) void else std.AutoArrayHashMapUnmanaged(*Win32Resource, ErrorBundle) =
86 if (build_options.only_core_functionality) {} else .{},
8587
8688/// Miscellaneous things that can fail.
8789misc_failures: std.AutoArrayHashMapUnmanaged(MiscTask, MiscError) = .{},
......@@ -1671,7 +1673,7 @@ pub fn create(gpa: Allocator, options: InitOptions) !*Compilation {
16711673 .work_queue = std.fifo.LinearFifo(Job, .Dynamic).init(gpa),
16721674 .anon_work_queue = std.fifo.LinearFifo(Job, .Dynamic).init(gpa),
16731675 .c_object_work_queue = std.fifo.LinearFifo(*CObject, .Dynamic).init(gpa),
1674 .win32_resource_work_queue = std.fifo.LinearFifo(*Win32Resource, .Dynamic).init(gpa),
1676 .win32_resource_work_queue = if (build_options.only_core_functionality) {} else std.fifo.LinearFifo(*Win32Resource, .Dynamic).init(gpa),
16751677 .astgen_work_queue = std.fifo.LinearFifo(*Module.File, .Dynamic).init(gpa),
16761678 .embed_file_work_queue = std.fifo.LinearFifo(*Module.EmbedFile, .Dynamic).init(gpa),
16771679 .keep_source_files_loaded = options.keep_source_files_loaded,
......@@ -1731,16 +1733,18 @@ pub fn create(gpa: Allocator, options: InitOptions) !*Compilation {
17311733 }
17321734
17331735 // Add a `Win32Resource` for each `rc_source_files`.
1734 try comp.win32_resource_table.ensureTotalCapacity(gpa, options.rc_source_files.len);
1735 for (options.rc_source_files) |rc_source_file| {
1736 const win32_resource = try gpa.create(Win32Resource);
1737 errdefer gpa.destroy(win32_resource);
1738
1739 win32_resource.* = .{
1740 .status = .{ .new = {} },
1741 .src = rc_source_file,
1742 };
1743 comp.win32_resource_table.putAssumeCapacityNoClobber(win32_resource, {});
1736 if (!build_options.only_core_functionality) {
1737 try comp.win32_resource_table.ensureTotalCapacity(gpa, options.rc_source_files.len);
1738 for (options.rc_source_files) |rc_source_file| {
1739 const win32_resource = try gpa.create(Win32Resource);
1740 errdefer gpa.destroy(win32_resource);
1741
1742 win32_resource.* = .{
1743 .status = .{ .new = {} },
1744 .src = rc_source_file,
1745 };
1746 comp.win32_resource_table.putAssumeCapacityNoClobber(win32_resource, {});
1747 }
17441748 }
17451749
17461750 const have_bin_emit = comp.bin_file.options.emit != null or comp.whole_bin_sub_path != null;
......@@ -1900,7 +1904,9 @@ pub fn destroy(self: *Compilation) void {
19001904 self.work_queue.deinit();
19011905 self.anon_work_queue.deinit();
19021906 self.c_object_work_queue.deinit();
1903 self.win32_resource_work_queue.deinit();
1907 if (!build_options.only_core_functionality) {
1908 self.win32_resource_work_queue.deinit();
1909 }
19041910 self.astgen_work_queue.deinit();
19051911 self.embed_file_work_queue.deinit();
19061912
......@@ -1949,15 +1955,17 @@ pub fn destroy(self: *Compilation) void {
19491955 }
19501956 self.failed_c_objects.deinit(gpa);
19511957
1952 for (self.win32_resource_table.keys()) |key| {
1953 key.destroy(gpa);
1954 }
1955 self.win32_resource_table.deinit(gpa);
1958 if (!build_options.only_core_functionality) {
1959 for (self.win32_resource_table.keys()) |key| {
1960 key.destroy(gpa);
1961 }
1962 self.win32_resource_table.deinit(gpa);
19561963
1957 for (self.failed_win32_resources.values()) |*value| {
1958 value.deinit(gpa);
1964 for (self.failed_win32_resources.values()) |*value| {
1965 value.deinit(gpa);
1966 }
1967 self.failed_win32_resources.deinit(gpa);
19591968 }
1960 self.failed_win32_resources.deinit(gpa);
19611969
19621970 for (self.lld_errors.items) |*lld_error| {
19631971 lld_error.deinit(gpa);
......@@ -2123,9 +2131,11 @@ pub fn update(comp: *Compilation, main_progress_node: *std.Progress.Node) !void
21232131
21242132 // For compiling Win32 resources, we rely on the cache hash system to avoid duplicating work.
21252133 // Add a Job for each Win32 resource file.
2126 try comp.win32_resource_work_queue.ensureUnusedCapacity(comp.win32_resource_table.count());
2127 for (comp.win32_resource_table.keys()) |key| {
2128 comp.win32_resource_work_queue.writeItemAssumeCapacity(key);
2134 if (!build_options.only_core_functionality) {
2135 try comp.win32_resource_work_queue.ensureUnusedCapacity(comp.win32_resource_table.count());
2136 for (comp.win32_resource_table.keys()) |key| {
2137 comp.win32_resource_work_queue.writeItemAssumeCapacity(key);
2138 }
21292139 }
21302140
21312141 if (comp.bin_file.options.module) |module| {
......@@ -2450,9 +2460,11 @@ fn addNonIncrementalStuffToCacheManifest(comp: *Compilation, man: *Cache.Manifes
24502460 man.hash.addListOfBytes(key.src.extra_flags);
24512461 }
24522462
2453 for (comp.win32_resource_table.keys()) |key| {
2454 _ = try man.addFile(key.src.src_path, null);
2455 man.hash.addListOfBytes(key.src.extra_flags);
2463 if (!build_options.only_core_functionality) {
2464 for (comp.win32_resource_table.keys()) |key| {
2465 _ = try man.addFile(key.src.src_path, null);
2466 man.hash.addListOfBytes(key.src.extra_flags);
2467 }
24562468 }
24572469
24582470 man.hash.addListOfBytes(comp.rc_include_dir_list);
......@@ -2697,8 +2709,10 @@ pub fn totalErrorCount(self: *Compilation) u32 {
26972709 @intFromBool(self.alloc_failure_occurred) +
26982710 self.lld_errors.items.len;
26992711
2700 for (self.failed_win32_resources.values()) |errs| {
2701 total += errs.errorMessageCount();
2712 if (!build_options.only_core_functionality) {
2713 for (self.failed_win32_resources.values()) |errs| {
2714 total += errs.errorMessageCount();
2715 }
27022716 }
27032717
27042718 if (self.bin_file.options.module) |module| {
......@@ -2791,7 +2805,7 @@ pub fn getAllErrorsAlloc(self: *Compilation) !ErrorBundle {
27912805 }
27922806 }
27932807
2794 {
2808 if (!build_options.only_core_functionality) {
27952809 var it = self.failed_win32_resources.iterator();
27962810 while (it.next()) |entry| {
27972811 try bundle.addBundleAsRoots(entry.value_ptr.*);
......@@ -3268,11 +3282,13 @@ pub fn performAllTheWork(
32683282 });
32693283 }
32703284
3271 while (comp.win32_resource_work_queue.readItem()) |win32_resource| {
3272 comp.work_queue_wait_group.start();
3273 try comp.thread_pool.spawn(workerUpdateWin32Resource, .{
3274 comp, win32_resource, &win32_resource_prog_node, &comp.work_queue_wait_group,
3275 });
3285 if (!build_options.only_core_functionality) {
3286 while (comp.win32_resource_work_queue.readItem()) |win32_resource| {
3287 comp.work_queue_wait_group.start();
3288 try comp.thread_pool.spawn(workerUpdateWin32Resource, .{
3289 comp, win32_resource, &win32_resource_prog_node, &comp.work_queue_wait_group,
3290 });
3291 }
32763292 }
32773293 }
32783294
src/link.zig+10-5
......@@ -1027,8 +1027,10 @@ pub const File = struct {
10271027 for (comp.c_object_table.keys()) |key| {
10281028 _ = try man.addFile(key.status.success.object_path, null);
10291029 }
1030 for (comp.win32_resource_table.keys()) |key| {
1031 _ = try man.addFile(key.status.success.res_path, null);
1030 if (!build_options.only_core_functionality) {
1031 for (comp.win32_resource_table.keys()) |key| {
1032 _ = try man.addFile(key.status.success.res_path, null);
1033 }
10321034 }
10331035 try man.addOptionalFile(module_obj_path);
10341036 try man.addOptionalFile(compiler_rt_path);
......@@ -1059,7 +1061,8 @@ pub const File = struct {
10591061 };
10601062 }
10611063
1062 const num_object_files = base.options.objects.len + comp.c_object_table.count() + comp.win32_resource_table.count() + 2;
1064 const win32_resource_table_len = if (build_options.only_core_functionality) 0 else comp.win32_resource_table.count();
1065 const num_object_files = base.options.objects.len + comp.c_object_table.count() + win32_resource_table_len + 2;
10631066 var object_files = try std.ArrayList([*:0]const u8).initCapacity(base.allocator, num_object_files);
10641067 defer object_files.deinit();
10651068
......@@ -1069,8 +1072,10 @@ pub const File = struct {
10691072 for (comp.c_object_table.keys()) |key| {
10701073 object_files.appendAssumeCapacity(try arena.dupeZ(u8, key.status.success.object_path));
10711074 }
1072 for (comp.win32_resource_table.keys()) |key| {
1073 object_files.appendAssumeCapacity(try arena.dupeZ(u8, key.status.success.res_path));
1075 if (!build_options.only_core_functionality) {
1076 for (comp.win32_resource_table.keys()) |key| {
1077 object_files.appendAssumeCapacity(try arena.dupeZ(u8, key.status.success.res_path));
1078 }
10741079 }
10751080 if (module_obj_path) |p| {
10761081 object_files.appendAssumeCapacity(try arena.dupeZ(u8, p));
src/link/Coff/lld.zig+8-4
......@@ -72,8 +72,10 @@ pub fn linkWithLLD(self: *Coff, comp: *Compilation, prog_node: *std.Progress.Nod
7272 for (comp.c_object_table.keys()) |key| {
7373 _ = try man.addFile(key.status.success.object_path, null);
7474 }
75 for (comp.win32_resource_table.keys()) |key| {
76 _ = try man.addFile(key.status.success.res_path, null);
75 if (!build_options.only_core_functionality) {
76 for (comp.win32_resource_table.keys()) |key| {
77 _ = try man.addFile(key.status.success.res_path, null);
78 }
7779 }
7880 try man.addOptionalFile(module_obj_path);
7981 man.hash.addOptionalBytes(self.base.options.entry);
......@@ -271,8 +273,10 @@ pub fn linkWithLLD(self: *Coff, comp: *Compilation, prog_node: *std.Progress.Nod
271273 try argv.append(key.status.success.object_path);
272274 }
273275
274 for (comp.win32_resource_table.keys()) |key| {
275 try argv.append(key.status.success.res_path);
276 if (!build_options.only_core_functionality) {
277 for (comp.win32_resource_table.keys()) |key| {
278 try argv.append(key.status.success.res_path);
279 }
276280 }
277281
278282 if (module_obj_path) |p| {
src/resinator.zig+6
......@@ -1,3 +1,9 @@
1comptime {
2 if (@import("build_options").only_core_functionality) {
3 @compileError("resinator included in only_core_functionality build");
4 }
5}
6
17pub const ani = @import("resinator/ani.zig");
28pub const ast = @import("resinator/ast.zig");
39pub const bmp = @import("resinator/bmp.zig");