Initial commit
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
# miclib Zig wrapper
|
||||
|
||||
Zig 0.16 wrapper for Intel/CIRCL `miclib.h` / `libmicmgmt`.
|
||||
|
||||
This repo does **not** vendor MPSS, `miclib.h`, `scif.h`, `libmicmgmt`, or `libscif`.
|
||||
Install/build miclib separately, then point Zig at the include/library directories.
|
||||
|
||||
## Build
|
||||
|
||||
```sh
|
||||
zig build \
|
||||
-Dmiclib_include=/usr/local/include \
|
||||
-Dmiclib_libdir=/usr/local/lib
|
||||
```
|
||||
|
||||
The default miclib system library name is `micmgmt`, which links `-lmicmgmt`.
|
||||
Override it if your install uses another name:
|
||||
|
||||
```sh
|
||||
zig build -Dmiclib_name=micmgmt
|
||||
```
|
||||
|
||||
`miclib.h` includes `scif.h`, so `-Dmiclib_include` must reference a directory where both headers are visible.
|
||||
The build script links `micmgmt`, `scif`, libc, and libc++ because the upstream implementation is C++ with a C ABI.
|
||||
|
||||
## Use as a dependency
|
||||
|
||||
```sh
|
||||
zig fetch --save git+https://git.kbz8.me/kbz_8/miclib-zig.git
|
||||
```
|
||||
|
||||
Then in your `build.zig`:
|
||||
|
||||
```zig
|
||||
const miclib_dep = b.dependency("miclib", .{
|
||||
.target = target,
|
||||
.optimize = optimize,
|
||||
.miclib_include = "/usr/local/include",
|
||||
.miclib_libdir = "/usr/local/lib",
|
||||
});
|
||||
|
||||
exe.root_module.addImport("miclib", miclib_dep.module("miclib"));
|
||||
```
|
||||
|
||||
Then in Zig:
|
||||
|
||||
```zig
|
||||
const mic = @import("miclib");
|
||||
|
||||
var list = try mic.DeviceList.init();
|
||||
defer list.deinit();
|
||||
|
||||
const count = try list.count();
|
||||
for (0..count) |index| {
|
||||
const device_num = try list.deviceAtIndex(index);
|
||||
var device = try mic.Device.open(device_num);
|
||||
defer device.deinit();
|
||||
|
||||
var memory = try device.memoryInfo();
|
||||
defer memory.deinit();
|
||||
|
||||
const mem_mib = try memory.size();
|
||||
_ = mem_mib;
|
||||
}
|
||||
```
|
||||
Reference in New Issue
Block a user