From 32fd31934c32f55a2e42f56172ad1cb8e2c5e148 Mon Sep 17 00:00:00 2001 From: Philippe Pittoli Date: Fri, 13 Jan 2023 02:05:17 +0100 Subject: [PATCH] Example code: first steps towards C bindings. --- zig-impl/drop/build.zig | 2 ++ zig-impl/drop/src/main.zig | 18 ++++++++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/zig-impl/drop/build.zig b/zig-impl/drop/build.zig index 7e83769..bf66010 100644 --- a/zig-impl/drop/build.zig +++ b/zig-impl/drop/build.zig @@ -7,11 +7,13 @@ pub fn build(b: *std.build.Builder) void { const lib = b.addStaticLibrary("ipc", "src/main.zig"); lib.setOutputDir("build"); + lib.linkLibC(); lib.setBuildMode(mode); lib.install(); const solib = b.addSharedLibrary("ipc", "src/main.zig", b.version(0, 0, 1)); solib.setOutputDir("build"); + solib.linkLibC(); solib.setBuildMode(mode); solib.install(); diff --git a/zig-impl/drop/src/main.zig b/zig-impl/drop/src/main.zig index 7c98d29..9cf93f3 100644 --- a/zig-impl/drop/src/main.zig +++ b/zig-impl/drop/src/main.zig @@ -1,6 +1,8 @@ const std = @import("std"); const testing = std.testing; +const print = std.debug.print; + const SOMESTRUCT = packed struct { somevalue: i32, const Self = @This(); @@ -11,8 +13,20 @@ const SOMESTRUCT = packed struct { } }; -export fn some_struct_bidouillage_init() callconv(.C) SOMESTRUCT { - return SOMESTRUCT {.somevalue = 2}; +export fn some_struct_bidouillage_init(ptr: *anyopaque) callconv(.C) void { + var pointer = @ptrCast(*SOMESTRUCT, @alignCast(@alignOf(SOMESTRUCT),ptr)); + var somestruct = std.heap.c_allocator.create(SOMESTRUCT) catch null; + + print ("hello we just did something\n", .{}); + if (somestruct) |s| { + s.somevalue = 2; + print ("just changed a value\n", .{}); + pointer.* = s.*; + } + print ("hello again\n", .{}); +// else { +// pointer.* = null; +// } } export fn some_struct_bidouillage_update(s: *SOMESTRUCT) callconv(.C) i32 {