I wanted to switch from @cImport to b.addTranslateC, but I ran into the problem that I can't add a library path.
What I wanted to do
constbticard_c=b.addTranslateC(.{.root_source_file=b.path("arinc/linux/includes/BTICard.h"),.target=target,.optimize=optimize,});bticard_c.addLibraryPath(b.path("arinc/linux/kernel/"));bticard_c.linkSystemLibrary("btiCard",.{});constbticard_mod=b.addModule("BTICard",.{.root_source_file=b.path("lib/BTICard.zig"),.target=target,.optimize=optimize,});bticard_mod.addImport("c",bticard_c.createModule());
It's not possible right now and I need to do this workaround:
constbticard_c=b.addTranslateC(.{.root_source_file=b.path("arinc/linux/includes/BTICard.h"),.target=target,.optimize=optimize,});constbticard_c_mod=bticard_c.createModule();bticard_c_mod.addLibraryPath(b.path("arinc/linux/kernel/"));bticard_c_mod.linkSystemLibrary("btiCard",.{});constbticard_mod=b.addModule("BTICard",.{.root_source_file=b.path("lib/BTICard.zig"),.target=target,.optimize=optimize,});bticard_mod.addImport("c",bticard_c_mod);
I looked into TranslateC.zig, and it looks like it should be possible by adding a lib_paths: ArrayList(LazyPath) member like in Module and adding them in TranslateC.setUpModule
Maybe something like that?:
fnsetUpModule(translate_c:*TranslateC,module:*std.Build.Module)*std.Build.Module{constb=translate_c.step.owner;constarena=b.graph.arena;if(translate_c.link_libc)module.link_libc=true;module.lib_paths.appendSlice(arena,translate_c.lib_paths.items);for(translate_c.system_libs.items)|system_lib|{module.link_objects.append(arena,.{.system_lib=system_lib})catch@panic("OOM");}returnmodule;}
I wanted to switch from `@cImport` to `b.addTranslateC`, but I ran into the problem that I can't add a library path.
What I wanted to do
```zig
const bticard_c = b.addTranslateC(.{
.root_source_file = b.path("arinc/linux/includes/BTICard.h"),
.target = target,
.optimize = optimize,
});
bticard_c.addLibraryPath(b.path("arinc/linux/kernel/"));
bticard_c.linkSystemLibrary("btiCard", .{});
const bticard_mod = b.addModule("BTICard", .{
.root_source_file = b.path("lib/BTICard.zig"),
.target = target,
.optimize = optimize,
});
bticard_mod.addImport("c", bticard_c.createModule());
```
It's not possible right now and I need to do this workaround:
```zig
const bticard_c = b.addTranslateC(.{
.root_source_file = b.path("arinc/linux/includes/BTICard.h"),
.target = target,
.optimize = optimize,
});
const bticard_c_mod = bticard_c.createModule();
bticard_c_mod.addLibraryPath(b.path("arinc/linux/kernel/"));
bticard_c_mod.linkSystemLibrary("btiCard", .{});
const bticard_mod = b.addModule("BTICard", .{
.root_source_file = b.path("lib/BTICard.zig"),
.target = target,
.optimize = optimize,
});
bticard_mod.addImport("c", bticard_c_mod);
```
I looked into `TranslateC.zig`, and it looks like it should be possible by adding a `lib_paths: ArrayList(LazyPath)` member like in Module and adding them in `TranslateC.setUpModule`
Maybe something like that?:
```zig
fn setUpModule(translate_c: *TranslateC, module: *std.Build.Module) *std.Build.Module {
const b = translate_c.step.owner;
const arena = b.graph.arena;
if (translate_c.link_libc) module.link_libc = true;
module.lib_paths.appendSlice(arena, translate_c.lib_paths.items);
for (translate_c.system_libs.items) |system_lib| {
module.link_objects.append(arena, .{ .system_lib = system_lib }) catch @panic("OOM");
}
return module;
}
```