Current section
Files
Jump to
Current section
Files
lib/zig/templates/build.zig.eex
const std = @import("std");
const Builder = std.build.Builder;
const Pkg = std.build.Pkg;
pub fn build(b: *Builder) void {
const mode = b.standardReleaseOptions();
const target = b.standardTargetOptions(<%=Zig.Target.for_builder()%>);
const erl_nif_pkg = Pkg{
.name = "erl_nif",
.source = .{ .path = "<%= Path.join(@beam_dir, "erl_nif.zig") %>"}
};
const no_sema_pkg = Pkg{
.name = "sema",
.source = .{ .path = "<%= Path.join(@beam_dir, "sema/off.zig") %>"}
};
const beam_pkg = Pkg{
.name = "beam",
.source = .{ .path = "<%= Path.join(@beam_dir, "beam.zig") %>"},
.dependencies = &.{erl_nif_pkg, no_sema_pkg},
};
<%= for {name, path, deps} <- @packages do %>
const <%= name %>_pkg = Pkg {
.name = "<%= name %>",
.source = .{ .path = "<%= path %>"},
.dependencies = &.{<%= deps %>},
};
<% end %>
<% package_list = Enum.map(@packages, fn {name, _, _} -> ", #{name}_pkg" end) %>
const core_pkg = Pkg{
.name = "nif",
.source = .{ .path = "<%= @nif_path %>" },
.dependencies = &.{beam_pkg, erl_nif_pkg<%= package_list %>},
};
const beam_system_dir = "<%= :code.root_dir() %>/erts-<%= :erlang.system_info(:version) %>/include";
const lib = b.addSharedLibrary(
"<%= @module %>",
"module.zig",
.{ .versioned = .{.major = <%= @version.major %>,
.minor = <%= @version.minor %>,
.patch = <%= @version.patch %>}});
lib.linkage = .dynamic;
lib.addSystemIncludePath(beam_system_dir);
lib.linkLibC();
lib.addPackage(erl_nif_pkg);
lib.addPackage(beam_pkg);
lib.addPackage(core_pkg);
<%= for {name, _, _} <- @packages do %>
lib.addPackage(<%= name %>_pkg);
<% end %>
<%= for lib <- @link_lib do %>
<%= case lib do %>
<% {:system, lib} -> %>
lib.linkSystemLibrary("<%= lib %>");
<% lib -> %>
lib.addObjectFile("<%= lib %>");
<% end %>
<% end %>
<%= for include <- @include_dir do %>
lib.addIncludePath("<%= include %>");
<% end %>
<%= for {c_src, c_src_opts} <- @c_src do %>
<% ccompileparams = Enum.map_join(c_src_opts, ", ", &~s("#{&1}")) %>
lib.addCSourceFile("<%= c_src %>", &[_][]const u8{<%= ccompileparams %>});
<% end %>
lib.setBuildMode(mode);
lib.setTarget(target);
lib.linker_allow_shlib_undefined = true;
<%= if @stage1 do %> lib.use_stage1 = true; <% end %>
lib.install();
}