Skip to content

Commit

Permalink
resinator: do not include in only_core_functionality builds
Browse files Browse the repository at this point in the history
This prevents resinator from being included in zig1 and zig2.
  • Loading branch information
mlugg committed Sep 24, 2023
1 parent 8eff0a0 commit fb6fff2
Show file tree
Hide file tree
Showing 4 changed files with 76 additions and 45 deletions.
88 changes: 52 additions & 36 deletions src/Compilation.zig
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,8 @@ gpa: Allocator,
arena_state: std.heap.ArenaAllocator.State,
bin_file: *link.File,
c_object_table: std.AutoArrayHashMapUnmanaged(*CObject, void) = .{},
win32_resource_table: std.AutoArrayHashMapUnmanaged(*Win32Resource, void) = .{},
win32_resource_table: if (build_options.only_core_functionality) void else std.AutoArrayHashMapUnmanaged(*Win32Resource, void) =
if (build_options.only_core_functionality) {} else .{},
/// This is a pointer to a local variable inside `update()`.
whole_cache_manifest: ?*Cache.Manifest = null,
whole_cache_manifest_mutex: std.Thread.Mutex = .{},
Expand All @@ -64,7 +65,7 @@ c_object_work_queue: std.fifo.LinearFifo(*CObject, .Dynamic),

/// These jobs are to invoke the RC compiler to create a compiled resource file (.res), which
/// gets linked with the Compilation.
win32_resource_work_queue: std.fifo.LinearFifo(*Win32Resource, .Dynamic),
win32_resource_work_queue: if (build_options.only_core_functionality) void else std.fifo.LinearFifo(*Win32Resource, .Dynamic),

/// These jobs are to tokenize, parse, and astgen files, which may be outdated
/// since the last compilation, as well as scan for `@import` and queue up
Expand All @@ -81,7 +82,8 @@ failed_c_objects: std.AutoArrayHashMapUnmanaged(*CObject, *CObject.ErrorMsg) = .

/// The ErrorBundle memory is owned by the `Win32Resource`, using Compilation's general purpose allocator.
/// This data is accessed by multiple threads and is protected by `mutex`.
failed_win32_resources: std.AutoArrayHashMapUnmanaged(*Win32Resource, ErrorBundle) = .{},
failed_win32_resources: if (build_options.only_core_functionality) void else std.AutoArrayHashMapUnmanaged(*Win32Resource, ErrorBundle) =
if (build_options.only_core_functionality) {} else .{},

/// Miscellaneous things that can fail.
misc_failures: std.AutoArrayHashMapUnmanaged(MiscTask, MiscError) = .{},
Expand Down Expand Up @@ -1671,7 +1673,7 @@ pub fn create(gpa: Allocator, options: InitOptions) !*Compilation {
.work_queue = std.fifo.LinearFifo(Job, .Dynamic).init(gpa),
.anon_work_queue = std.fifo.LinearFifo(Job, .Dynamic).init(gpa),
.c_object_work_queue = std.fifo.LinearFifo(*CObject, .Dynamic).init(gpa),
.win32_resource_work_queue = std.fifo.LinearFifo(*Win32Resource, .Dynamic).init(gpa),
.win32_resource_work_queue = if (build_options.only_core_functionality) {} else std.fifo.LinearFifo(*Win32Resource, .Dynamic).init(gpa),
.astgen_work_queue = std.fifo.LinearFifo(*Module.File, .Dynamic).init(gpa),
.embed_file_work_queue = std.fifo.LinearFifo(*Module.EmbedFile, .Dynamic).init(gpa),
.keep_source_files_loaded = options.keep_source_files_loaded,
Expand Down Expand Up @@ -1731,16 +1733,18 @@ pub fn create(gpa: Allocator, options: InitOptions) !*Compilation {
}

// Add a `Win32Resource` for each `rc_source_files`.
try comp.win32_resource_table.ensureTotalCapacity(gpa, options.rc_source_files.len);
for (options.rc_source_files) |rc_source_file| {
const win32_resource = try gpa.create(Win32Resource);
errdefer gpa.destroy(win32_resource);

win32_resource.* = .{
.status = .{ .new = {} },
.src = rc_source_file,
};
comp.win32_resource_table.putAssumeCapacityNoClobber(win32_resource, {});
if (!build_options.only_core_functionality) {
try comp.win32_resource_table.ensureTotalCapacity(gpa, options.rc_source_files.len);
for (options.rc_source_files) |rc_source_file| {
const win32_resource = try gpa.create(Win32Resource);
errdefer gpa.destroy(win32_resource);

win32_resource.* = .{
.status = .{ .new = {} },
.src = rc_source_file,
};
comp.win32_resource_table.putAssumeCapacityNoClobber(win32_resource, {});
}
}

const have_bin_emit = comp.bin_file.options.emit != null or comp.whole_bin_sub_path != null;
Expand Down Expand Up @@ -1900,7 +1904,9 @@ pub fn destroy(self: *Compilation) void {
self.work_queue.deinit();
self.anon_work_queue.deinit();
self.c_object_work_queue.deinit();
self.win32_resource_work_queue.deinit();
if (!build_options.only_core_functionality) {
self.win32_resource_work_queue.deinit();
}
self.astgen_work_queue.deinit();
self.embed_file_work_queue.deinit();

Expand Down Expand Up @@ -1949,15 +1955,17 @@ pub fn destroy(self: *Compilation) void {
}
self.failed_c_objects.deinit(gpa);

for (self.win32_resource_table.keys()) |key| {
key.destroy(gpa);
}
self.win32_resource_table.deinit(gpa);
if (!build_options.only_core_functionality) {
for (self.win32_resource_table.keys()) |key| {
key.destroy(gpa);
}
self.win32_resource_table.deinit(gpa);

for (self.failed_win32_resources.values()) |*value| {
value.deinit(gpa);
for (self.failed_win32_resources.values()) |*value| {
value.deinit(gpa);
}
self.failed_win32_resources.deinit(gpa);
}
self.failed_win32_resources.deinit(gpa);

for (self.lld_errors.items) |*lld_error| {
lld_error.deinit(gpa);
Expand Down Expand Up @@ -2123,9 +2131,11 @@ pub fn update(comp: *Compilation, main_progress_node: *std.Progress.Node) !void

// For compiling Win32 resources, we rely on the cache hash system to avoid duplicating work.
// Add a Job for each Win32 resource file.
try comp.win32_resource_work_queue.ensureUnusedCapacity(comp.win32_resource_table.count());
for (comp.win32_resource_table.keys()) |key| {
comp.win32_resource_work_queue.writeItemAssumeCapacity(key);
if (!build_options.only_core_functionality) {
try comp.win32_resource_work_queue.ensureUnusedCapacity(comp.win32_resource_table.count());
for (comp.win32_resource_table.keys()) |key| {
comp.win32_resource_work_queue.writeItemAssumeCapacity(key);
}
}

if (comp.bin_file.options.module) |module| {
Expand Down Expand Up @@ -2450,9 +2460,11 @@ fn addNonIncrementalStuffToCacheManifest(comp: *Compilation, man: *Cache.Manifes
man.hash.addListOfBytes(key.src.extra_flags);
}

for (comp.win32_resource_table.keys()) |key| {
_ = try man.addFile(key.src.src_path, null);
man.hash.addListOfBytes(key.src.extra_flags);
if (!build_options.only_core_functionality) {
for (comp.win32_resource_table.keys()) |key| {
_ = try man.addFile(key.src.src_path, null);
man.hash.addListOfBytes(key.src.extra_flags);
}
}

man.hash.addListOfBytes(comp.rc_include_dir_list);
Expand Down Expand Up @@ -2697,8 +2709,10 @@ pub fn totalErrorCount(self: *Compilation) u32 {
@intFromBool(self.alloc_failure_occurred) +
self.lld_errors.items.len;

for (self.failed_win32_resources.values()) |errs| {
total += errs.errorMessageCount();
if (!build_options.only_core_functionality) {
for (self.failed_win32_resources.values()) |errs| {
total += errs.errorMessageCount();
}
}

if (self.bin_file.options.module) |module| {
Expand Down Expand Up @@ -2791,7 +2805,7 @@ pub fn getAllErrorsAlloc(self: *Compilation) !ErrorBundle {
}
}

{
if (!build_options.only_core_functionality) {
var it = self.failed_win32_resources.iterator();
while (it.next()) |entry| {
try bundle.addBundleAsRoots(entry.value_ptr.*);
Expand Down Expand Up @@ -3268,11 +3282,13 @@ pub fn performAllTheWork(
});
}

while (comp.win32_resource_work_queue.readItem()) |win32_resource| {
comp.work_queue_wait_group.start();
try comp.thread_pool.spawn(workerUpdateWin32Resource, .{
comp, win32_resource, &win32_resource_prog_node, &comp.work_queue_wait_group,
});
if (!build_options.only_core_functionality) {
while (comp.win32_resource_work_queue.readItem()) |win32_resource| {
comp.work_queue_wait_group.start();
try comp.thread_pool.spawn(workerUpdateWin32Resource, .{
comp, win32_resource, &win32_resource_prog_node, &comp.work_queue_wait_group,
});
}
}
}

Expand Down
15 changes: 10 additions & 5 deletions src/link.zig
Original file line number Diff line number Diff line change
Expand Up @@ -1027,8 +1027,10 @@ pub const File = struct {
for (comp.c_object_table.keys()) |key| {
_ = try man.addFile(key.status.success.object_path, null);
}
for (comp.win32_resource_table.keys()) |key| {
_ = try man.addFile(key.status.success.res_path, null);
if (!build_options.only_core_functionality) {
for (comp.win32_resource_table.keys()) |key| {
_ = try man.addFile(key.status.success.res_path, null);
}
}
try man.addOptionalFile(module_obj_path);
try man.addOptionalFile(compiler_rt_path);
Expand Down Expand Up @@ -1059,7 +1061,8 @@ pub const File = struct {
};
}

const num_object_files = base.options.objects.len + comp.c_object_table.count() + comp.win32_resource_table.count() + 2;
const win32_resource_table_len = if (build_options.only_core_functionality) 0 else comp.win32_resource_table.count();
const num_object_files = base.options.objects.len + comp.c_object_table.count() + win32_resource_table_len + 2;
var object_files = try std.ArrayList([*:0]const u8).initCapacity(base.allocator, num_object_files);
defer object_files.deinit();

Expand All @@ -1069,8 +1072,10 @@ pub const File = struct {
for (comp.c_object_table.keys()) |key| {
object_files.appendAssumeCapacity(try arena.dupeZ(u8, key.status.success.object_path));
}
for (comp.win32_resource_table.keys()) |key| {
object_files.appendAssumeCapacity(try arena.dupeZ(u8, key.status.success.res_path));
if (!build_options.only_core_functionality) {
for (comp.win32_resource_table.keys()) |key| {
object_files.appendAssumeCapacity(try arena.dupeZ(u8, key.status.success.res_path));
}
}
if (module_obj_path) |p| {
object_files.appendAssumeCapacity(try arena.dupeZ(u8, p));
Expand Down
12 changes: 8 additions & 4 deletions src/link/Coff/lld.zig
Original file line number Diff line number Diff line change
Expand Up @@ -72,8 +72,10 @@ pub fn linkWithLLD(self: *Coff, comp: *Compilation, prog_node: *std.Progress.Nod
for (comp.c_object_table.keys()) |key| {
_ = try man.addFile(key.status.success.object_path, null);
}
for (comp.win32_resource_table.keys()) |key| {
_ = try man.addFile(key.status.success.res_path, null);
if (!build_options.only_core_functionality) {
for (comp.win32_resource_table.keys()) |key| {
_ = try man.addFile(key.status.success.res_path, null);
}
}
try man.addOptionalFile(module_obj_path);
man.hash.addOptionalBytes(self.base.options.entry);
Expand Down Expand Up @@ -271,8 +273,10 @@ pub fn linkWithLLD(self: *Coff, comp: *Compilation, prog_node: *std.Progress.Nod
try argv.append(key.status.success.object_path);
}

for (comp.win32_resource_table.keys()) |key| {
try argv.append(key.status.success.res_path);
if (!build_options.only_core_functionality) {
for (comp.win32_resource_table.keys()) |key| {
try argv.append(key.status.success.res_path);
}
}

if (module_obj_path) |p| {
Expand Down
6 changes: 6 additions & 0 deletions src/resinator.zig
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
comptime {
if (@import("build_options").only_core_functionality) {
@compileError("resinator included in only_core_functionality build");
}
}

pub const ani = @import("resinator/ani.zig");
pub const ast = @import("resinator/ast.zig");
pub const bmp = @import("resinator/bmp.zig");
Expand Down

0 comments on commit fb6fff2

Please sign in to comment.