# HG changeset patch # User paulsnar # Date 1657532493 -10800 # Mon Jul 11 12:41:33 2022 +0300 # Node ID 81d48f308433b4ff76d525cc1a690fbe377466ec # Parent 0000000000000000000000000000000000000000 chore: Scaffolding diff --git a/.hgignore b/.hgignore new file mode 100644 --- /dev/null +++ b/.hgignore @@ -0,0 +1,1 @@ +^zig-(cache|out)/ diff --git a/build.zig b/build.zig new file mode 100644 --- /dev/null +++ b/build.zig @@ -0,0 +1,36 @@ +const std = @import("std"); + +pub fn build(b: *std.build.Builder) void { + const mode = b.standardReleaseOptions(); + + const janet_headers = b.option([]const u8, "janet-headers", "Location of Janet headers"); + + const obj = b.addObject("baseenc-zig", "src/baseenc.zig"); + obj.setBuildMode(mode); + + const slib = b.addStaticLibrary("baseenc", "src/baseenc.c"); + slib.linker_allow_shlib_undefined = true; + slib.pie = true; + if (janet_headers) |h| slib.addIncludeDir(h); + slib.setBuildMode(mode); + slib.addObject(obj); + slib.linkSystemLibrary("pthread"); + slib.defineCMacro("JANET_ENTRY_NAME", "janet_module_entry_baseenc"); + slib.install(); + + const dlib = b.addSharedLibrary("baseenc", "src/baseenc.c", .unversioned); + dlib.linker_allow_shlib_undefined = true; + dlib.force_pic = true; + if (janet_headers) |h| dlib.addIncludeDir(h); + dlib.setBuildMode(mode); + dlib.addObject(obj); + dlib.linkSystemLibrary("pthread"); + dlib.defineCMacro("JANET_BUILD_TYPE", "release"); + dlib.install(); + + const main_tests = b.addTest("src/baseenc.zig"); + main_tests.setBuildMode(mode); + + const test_step = b.step("test", "Run library tests"); + test_step.dependOn(&main_tests.step); +} diff --git a/project.janet b/project.janet new file mode 100644 --- /dev/null +++ b/project.janet @@ -0,0 +1,25 @@ +(declare-project + :name "baseenc" + :description "base{64,32,16} encoding/decoding" + :version "1.0.0" + :dependencies []) + +(def- so-ext (if (= (os/which) :macos) "dylib" "so")) + +(rule "zig-out/lib/libbaseenc.a" + ["src/baseenc.c" "src/baseenc.zig"] + (shell "zig" "build" (string "-Djanet-headers=" (dyn :headerpath)))) +(add-output "zig-out/lib/libbaseenc.a" (string "zig-out/lib/libbaseenc." so-ext)) +(add-dep "build" "zig-out/lib/libbaseenc.a") + +(def- target (dyn :modpath)) +(task "install" [] + (copyfile "zig-out/lib/libbaseenc.a" (string target "/baseenc.a")) + (copyfile (string "zig-out/lib/libbaseenc." so-ext) + (string target "/baseenc.so")) + (copyfile "baseenc.meta.janet" (string target "/baseenc.meta.janet"))) + +(array/push (dyn :installed-files) + (string target "/baseenc.a") + (string target "/baseenc.so") + (string target "/baseenc.meta.janet")) diff --git a/src/baseenc.c b/src/baseenc.c new file mode 100644 --- /dev/null +++ b/src/baseenc.c @@ -0,0 +1,9 @@ +#include + +static const JanetReg Baseenc_cfuns[] = { + { NULL, NULL, NULL }, +}; + +JANET_MODULE_ENTRY(JanetTable *env) { + janet_cfuns(env, "baseenc", &Baseenc_cfuns[0]); +} diff --git a/src/baseenc.zig b/src/baseenc.zig new file mode 100644 --- /dev/null +++ b/src/baseenc.zig @@ -0,0 +1,9 @@ +const std = @import("std"); + +export fn add(a: i32, b: i32) i32 { + return a + b; +} + +test "basic add functionality" { + try std.testing.expect(add(3, 7) == 10); +}