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(); }