An example of working function exports.
parent
f3c7695462
commit
614e972b95
|
@ -0,0 +1,32 @@
|
||||||
|
ZIGC=zig
|
||||||
|
|
||||||
|
CC=gcc
|
||||||
|
CFLAGS=-Wall -Wextra
|
||||||
|
LDFLAGS=-I build/ -L build/ -lipc
|
||||||
|
|
||||||
|
all: zigcompilation compilation
|
||||||
|
|
||||||
|
ifeq ($(SRC),)
|
||||||
|
test-src:
|
||||||
|
@echo SRC must be set via command line.
|
||||||
|
@exit 1
|
||||||
|
else
|
||||||
|
test-src:
|
||||||
|
endif
|
||||||
|
|
||||||
|
list-obj-files: test-src
|
||||||
|
@# List all .o included in a .a archive.
|
||||||
|
ar t $(SRC)
|
||||||
|
list-symbols: test-src
|
||||||
|
@# List all symbols in a .so.
|
||||||
|
nm -D $(SRC)
|
||||||
|
list-symbols-alt: test-src
|
||||||
|
@# Alternative: grep .text section in an objdump output.
|
||||||
|
objdump -T $(SRC) | grep text
|
||||||
|
|
||||||
|
zigcompilation: build.zig src/*.zig
|
||||||
|
$(ZIGC) build
|
||||||
|
|
||||||
|
compilation: src/main.c
|
||||||
|
@echo the following compilation will produce errors despite actually working
|
||||||
|
$(CC) -o app -o main build/libipc.so $(CFLAGS) $^ $(LDFLAGS)
|
|
@ -0,0 +1,23 @@
|
||||||
|
const std = @import("std");
|
||||||
|
|
||||||
|
pub fn build(b: *std.build.Builder) void {
|
||||||
|
// Standard release options allow the person running `zig build` to select
|
||||||
|
// between Debug, ReleaseSafe, ReleaseFast, and ReleaseSmall.
|
||||||
|
const mode = b.standardReleaseOptions();
|
||||||
|
|
||||||
|
const lib = b.addStaticLibrary("ipc", "src/main.zig");
|
||||||
|
lib.setOutputDir("build");
|
||||||
|
lib.setBuildMode(mode);
|
||||||
|
lib.install();
|
||||||
|
|
||||||
|
const solib = b.addSharedLibrary("ipc", "src/main.zig", b.version(0, 0, 1));
|
||||||
|
solib.setOutputDir("build");
|
||||||
|
solib.setBuildMode(mode);
|
||||||
|
solib.install();
|
||||||
|
|
||||||
|
const main_tests = b.addTest("src/main.zig");
|
||||||
|
main_tests.setBuildMode(mode);
|
||||||
|
|
||||||
|
const test_step = b.step("test", "Run library tests");
|
||||||
|
test_step.dependOn(&main_tests.step);
|
||||||
|
}
|
|
@ -0,0 +1,28 @@
|
||||||
|
const std = @import("std");
|
||||||
|
const testing = std.testing;
|
||||||
|
|
||||||
|
const SOMESTRUCT = packed struct {
|
||||||
|
somevalue: i32,
|
||||||
|
const Self = @This();
|
||||||
|
|
||||||
|
fn update(self: *Self) callconv(.C) i32 {
|
||||||
|
self.somevalue += 1;
|
||||||
|
return self.somevalue;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export fn some_struct_bidouillage_init() callconv(.C) SOMESTRUCT {
|
||||||
|
return SOMESTRUCT {.somevalue = 2};
|
||||||
|
}
|
||||||
|
|
||||||
|
export fn some_struct_bidouillage_update(s: *SOMESTRUCT) callconv(.C) i32 {
|
||||||
|
return s.update();
|
||||||
|
}
|
||||||
|
|
||||||
|
export fn someipc(a: i32, b: i32) callconv(.C) i32 {
|
||||||
|
return a + b;
|
||||||
|
}
|
||||||
|
|
||||||
|
test "basic add functionality" {
|
||||||
|
try testing.expect(someipc(3, 7) == 10);
|
||||||
|
}
|
Reference in New Issue