aboutsummaryrefslogtreecommitdiff
path: root/src/Compilation.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2024-03-06 20:07:37 -0700
committerAndrew Kelley <andrew@ziglang.org>2024-03-10 17:51:06 -0700
commit91260459e3c534b1583b516a2888f232d3d99581 (patch)
treef3950c392612f17a3e28f7d487a35302f8168925 /src/Compilation.zig
parented8ee3ddd377b7148ff4ea0a7606e0cb60e539d7 (diff)
downloadzig-91260459e3c534b1583b516a2888f232d3d99581.tar.gz
zig-91260459e3c534b1583b516a2888f232d3d99581.zip
frontend: skeleton for creating autodocs
This time, unlike the old implementation, it properly does autodoc generation during the compilation pipeline, saving time.
Diffstat (limited to 'src/Compilation.zig')
-rw-r--r--src/Compilation.zig47
1 files changed, 47 insertions, 0 deletions
diff --git a/src/Compilation.zig b/src/Compilation.zig
index 4e2e47be5f..46e5d7cde9 100644
--- a/src/Compilation.zig
+++ b/src/Compilation.zig
@@ -3330,6 +3330,13 @@ pub fn performAllTheWork(
comp.work_queue_wait_group.reset();
defer comp.work_queue_wait_group.wait();
+ if (!build_options.only_c and !build_options.only_core_functionality) {
+ if (comp.docs_emit != null) {
+ try taskDocsCopy(comp, &comp.work_queue_wait_group);
+ try taskDocsWasm(comp, &comp.work_queue_wait_group);
+ }
+ }
+
{
const astgen_frame = tracy.namedFrame("astgen");
defer astgen_frame.end();
@@ -3744,6 +3751,46 @@ fn processOneJob(comp: *Compilation, job: Job, prog_node: *std.Progress.Node) !v
}
}
+fn taskDocsCopy(comp: *Compilation, wg: *WaitGroup) !void {
+ wg.start();
+ errdefer wg.finish();
+ try comp.thread_pool.spawn(workerDocsCopy, .{ comp, wg });
+}
+
+fn taskDocsWasm(comp: *Compilation, wg: *WaitGroup) !void {
+ wg.start();
+ errdefer wg.finish();
+ try comp.thread_pool.spawn(workerDocsWasm, .{ comp, wg });
+}
+
+fn workerDocsCopy(comp: *Compilation, wg: *WaitGroup) void {
+ defer wg.finish();
+
+ const emit = comp.docs_emit.?;
+ var out_dir = emit.directory.handle.makeOpenPath(emit.sub_path, .{}) catch |err| {
+ // TODO create an error to be reported instead of logging
+ log.err("unable to create output directory '{}{s}': {s}", .{
+ emit.directory, emit.sub_path, @errorName(err),
+ });
+ return;
+ };
+ defer out_dir.close();
+
+ for (&[_][]const u8{ "docs/main.js", "docs/index.html" }) |sub_path| {
+ const basename = std.fs.path.basename(sub_path);
+ comp.zig_lib_directory.handle.copyFile(sub_path, out_dir, basename, .{}) catch |err| {
+ log.err("unable to copy {s}: {s}", .{ sub_path, @errorName(err) });
+ };
+ }
+}
+
+fn workerDocsWasm(comp: *Compilation, wg: *WaitGroup) void {
+ defer wg.finish();
+
+ _ = comp;
+ log.err("TODO workerDocsWasm", .{});
+}
+
const AstGenSrc = union(enum) {
root,
import: struct {