48 lines
2.0 KiB
Zig
48 lines
2.0 KiB
Zig
|
const std = @import("std");
|
||
|
const builtin = @import("builtin");
|
||
|
|
||
|
/// flexilib will create a dynamic library for use with flexilib.
|
||
|
/// Flexilib will need to get the exe compiled as a library
|
||
|
/// For flexilib, we will need the main file to have a pub fn named
|
||
|
/// "handler". If it is not called that, a pub const handler = ... can be
|
||
|
/// used instead
|
||
|
pub fn configureBuild(b: *std.build.Builder, exe: *std.Build.Step.Compile, build_root_src: []const u8) !void {
|
||
|
const package_step = b.step("flexilib", "Create a flexilib dynamic library");
|
||
|
|
||
|
// const exe = b.addExecutable(.{
|
||
|
// .name = "universal-lambda-example",
|
||
|
// // In this case the main source file is merely a path, however, in more
|
||
|
// // complicated build scripts, this could be a generated file.
|
||
|
// .root_source_file = .{ .path = "src/main.zig" },
|
||
|
// .target = target,
|
||
|
// .optimize = optimize,
|
||
|
// });
|
||
|
//
|
||
|
const lib = b.addSharedLibrary(.{
|
||
|
.name = exe.name,
|
||
|
.root_source_file = .{ .path = b.pathJoin(&[_][]const u8{ build_root_src, "flexilib.zig" }) },
|
||
|
.target = exe.target,
|
||
|
.optimize = exe.optimize,
|
||
|
});
|
||
|
|
||
|
// We will not free this, as the rest of the build system will use it.
|
||
|
// This should be ok because our allocator is, I believe, an arena
|
||
|
var module_dependencies = try b.allocator.alloc(std.Build.ModuleDependency, exe.modules.count());
|
||
|
var iterator = exe.modules.iterator();
|
||
|
|
||
|
var i: usize = 0;
|
||
|
while (iterator.next()) |entry| : (i += 1) {
|
||
|
module_dependencies[i] = .{
|
||
|
.name = entry.key_ptr.*,
|
||
|
.module = entry.value_ptr.*,
|
||
|
};
|
||
|
lib.addModule(entry.key_ptr.*, entry.value_ptr.*);
|
||
|
}
|
||
|
lib.addAnonymousModule("flexilib_handler", .{
|
||
|
// Source file can be anywhere on disk, does not need to be a subdirectory
|
||
|
.source_file = exe.root_src.?,
|
||
|
.dependencies = module_dependencies,
|
||
|
});
|
||
|
package_step.dependOn(&b.addInstallArtifact(lib, .{}).step);
|
||
|
}
|