Current section
Files
Jump to
Current section
Files
lib/zig/templates/build.zig.eex
const std = @import("std");
pub fn build(b: *std.Build) void {
const target = b.standardTargetOptions(<%=Zig.Target.for_builder()%>);
const optimize = b.standardOptimizeOption(.{});
const erl_nif = b.createModule(
.{
.source_file = .{.cwd_relative = "<%= Path.join(@beam_dir, "erl_nif.zig")%>"},
.dependencies = &[_]std.Build.ModuleDependency{},
});
const beam = b.createModule(
.{
.source_file = .{.cwd_relative = "<%= Path.join(@beam_dir, "beam.zig")%>"},
.dependencies = &[_]std.Build.ModuleDependency{.{
.name = "erl_nif",
.module = erl_nif
}}
});
<%= for {name, path, deps} <- @packages do %>
const <%= name %> = b.createModule(
.{
.source_file = .{.cwd_relative = "<%= path %>"},
.dependencies = &[_]std.Build.ModuleDependency{
<%= for dep <- deps do %>
.{
.name = "<%= dep %>",
.module = <%= dep %>
}
<% end %>
}
});
<% end %>
<% module_list = Enum.map(@packages, fn {name, _, _} -> "#{name}" end) %>
const nif = b.createModule(.{
.source_file = .{.cwd_relative = "<%= @nif_path %>"},
.dependencies = &[_]std.Build.ModuleDependency{.{
.name = "erl_nif",
.module = erl_nif
}, .{
.name = "beam",
.module = beam
}
<%= for module <- module_list do %>
, .{
.name = "<%= module %>",
.module = <%= module %>
}
<% end %>
}
});
const lib = b.addSharedLibrary(.{
.name = "<%= @module %>",
.root_source_file = .{.path = "module.zig"},
.version = .{.major = <%= @version.major %>,
.minor = <%= @version.minor %>,
.patch = <%= @version.patch %>},
.target = target,
.optimize = optimize,
});
const beam_system_dir = "<%= :code.root_dir() %>/erts-<%= :erlang.system_info(:version) %>/include";
lib.addSystemIncludePath(.{.cwd_relative = beam_system_dir});
lib.linkLibC();
lib.addModule("erl_nif", erl_nif);
lib.addModule("beam", beam);
lib.addModule("nif", nif);
<%= for lib <- @link_lib do %>
<%= case lib do %>
<% {:system, lib} -> %>
lib.linkSystemLibrary("<%= lib %>");
<% lib -> %>
lib.addObjectFile(.{.path = "<%= lib %>"});
<% end %>
<% end %>
<%= for include <- @include_dir do %>
lib.addIncludePath(.{.cwd_relative = "<%= include %>"});
<% end %>
<%= for {c_src, c_src_opts} <- @c_src do %>
<% ccompileparams = Enum.map_join(c_src_opts, ", ", &~s("#{&1}")) %>
lib.addCSourceFile(.{.file = .{.cwd_relative = "<%= c_src %>"}, .flags = &[_][]const u8{<%= ccompileparams %>}});
<% end %>
b.installArtifact(lib);
}