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