const std = @import("std"); pub fn build(b: *std.Build) void { const target = b.standardTargetOptions(.{}); const optimize = b.standardOptimizeOption(.{}); const usb_ids_path = b.option( []const u8, "usb-ids-path", "Path to the usb.ids hardware database", ) orelse "/usr/local/share/hwdata/usb.ids"; if (target.result.os.tag != .linux) { @panic("libudev is only supported on Linux"); } const ffi_mod = b.createModule(.{ .root_source_file = b.path("src/ffi.zig"), .target = target, .optimize = optimize, .link_libc = true, }); ffi_mod.addIncludePath(b.path("include")); const mod = b.addModule("libudev_zero_zig", .{ .root_source_file = b.path("src/root.zig"), .target = target, .optimize = optimize, .link_libc = true, }); const build_options = b.addOptions(); build_options.addOption([]const u8, "USB_IDS_PATH", usb_ids_path); mod.addOptions("build_options", build_options); mod.addIncludePath(b.path("include")); mod.addImport("ffi", ffi_mod); const list_mod = b.createModule(.{ .root_source_file = b.path("src/list.zig"), .target = target, .optimize = optimize, .link_libc = true, }); list_mod.addIncludePath(b.path("include")); list_mod.addImport("ffi", ffi_mod); mod.addImport("list", list_mod); const device_mod = b.createModule(.{ .root_source_file = b.path("src/device.zig"), .target = target, .optimize = optimize, .link_libc = true, }); device_mod.addIncludePath(b.path("include")); device_mod.addImport("ffi", ffi_mod); device_mod.addImport("list", list_mod); mod.addImport("device", device_mod); const enumerate_mod = b.createModule(.{ .root_source_file = b.path("src/enumerate.zig"), .target = target, .optimize = optimize, .link_libc = true, }); enumerate_mod.addIncludePath(b.path("include")); enumerate_mod.addImport("ffi", ffi_mod); enumerate_mod.addImport("list", list_mod); mod.addImport("enumerate", enumerate_mod); const monitor_mod = b.createModule(.{ .root_source_file = b.path("src/monitor.zig"), .target = target, .optimize = optimize, .link_libc = true, }); monitor_mod.addIncludePath(b.path("include")); monitor_mod.addImport("ffi", ffi_mod); monitor_mod.addImport("list", list_mod); mod.addImport("monitor", monitor_mod); const lib = b.addLibrary(.{ .name = "udev", .linkage = .dynamic, .version = .{ .major = 1, .minor = 0, .patch = 0, }, .root_module = mod, }); lib.setVersionScript(b.path("libudev.sym")); lib.installHeader(b.path("include/udev.h"), "libudev.h"); b.installArtifact(lib); const install_pkg_config = b.addInstallFileWithDir( b.path("libudev.pc"), .lib, "pkgconfig/libudev.pc", ); b.getInstallStep().dependOn(&install_pkg_config.step); const mod_tests = b.addTest(.{ .root_module = mod, }); const run_mod_tests = b.addRunArtifact(mod_tests); const test_step = b.step("test", "Run tests"); test_step.dependOn(&run_mod_tests.step); }