feature. See also
. The project being documented here (as the example) is the Zig library itself.
Compile.make
pub fn make(
compile: *Compile,
compile_index: Configuration.Step.Index,
maker: *Maker,
progress_node: std.Progress.Node,
) Step.ExtendedMakeError!void
File
Code
pub fn make(
compile: *Compile,
compile_index: Configuration.Step.Index,
maker: *Maker,
progress_node: std.Progress.Node,
) Step.ExtendedMakeError!void {
const graph = maker.graph;
const gpa = maker.gpa;
const conf = &maker.scanned_config.configuration;
const conf_step = compile_index.ptr(conf);
const conf_comp = conf_step.extended.get(conf.extra).compile;
var arena_allocator: std.heap.ArenaAllocator = .init(gpa);
defer arena_allocator.deinit();
const arena = arena_allocator.allocator();
var argv: std.ArrayList([]const u8) = .empty;
defer argv.deinit(gpa);
try lowerZigArgs(arena, compile, compile_index, maker, progress_node, &argv, false);
const incremental = conf_comp.flags4.incremental.toBool() orelse graph.incremental == true;
const maybe_output_dir = Step.evalZigProcess(
compile_index,
maker,
argv.items,
progress_node,
incremental and (maker.watch or maker.web_server != null),
) catch |err| switch (err) {
error.NeedCompileErrorCheck => {
try checkCompileErrors(arena, maker, compile_index);
return;
},
else => |e| return e,
};
const root_module = conf_comp.root_module.get(conf);
const target = root_module.resolved_target.get(conf).?.result.get(conf);
if (maybe_output_dir) |output_dir| {
if (conf_comp.emit_directory.value) |gf| maker.generatedPath(gf).* = output_dir;
try updateGeneratedFile(maker, arena, &conf_comp, output_dir, &target, conf_comp.generated_bin.value, .bin);
try updateGeneratedFile(maker, arena, &conf_comp, output_dir, &target, conf_comp.generated_pdb.value, .pdb);
try updateGeneratedFile(maker, arena, &conf_comp, output_dir, &target, conf_comp.generated_implib.value, .implib);
try updateGeneratedFile(maker, arena, &conf_comp, output_dir, &target, conf_comp.generated_h.value, .h);
try updateGeneratedFile(maker, arena, &conf_comp, output_dir, &target, conf_comp.generated_docs.value, .docs);
try updateGeneratedFile(maker, arena, &conf_comp, output_dir, &target, conf_comp.generated_asm.value, .@"asm");
try updateGeneratedFile(maker, arena, &conf_comp, output_dir, &target, conf_comp.generated_llvm_ir.value, .llvm_ir);
try updateGeneratedFile(maker, arena, &conf_comp, output_dir, &target, conf_comp.generated_llvm_bc.value, .llvm_bc);
}
if (conf_comp.flags3.kind == .lib and conf_comp.flags2.linkage == .dynamic and
conf_comp.version.value != null and target.flags.os_tag != .windows)
{
if (conf_comp.generated_bin.value) |generated_bin| {
const full_dest_path = maker.generatedPath(generated_bin).*;
try maker.installSymLinks(arena, full_dest_path, compile_index, compile_index);
}
}
}