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