From 59b869b356af81284cdc1d69ee04e77da6548333 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Wed, 10 Nov 2021 15:31:32 +0100 Subject: [PATCH] Add preliminary build.zig file --- .gitignore | 2 ++ build.zig | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 73 insertions(+) create mode 100644 build.zig diff --git a/.gitignore b/.gitignore index 3f3ccb2c..44bef90f 100644 --- a/.gitignore +++ b/.gitignore @@ -168,3 +168,5 @@ test/default/verify1 test/default/xchacha20 test/js.done testing +zig-cache +zig-out diff --git a/build.zig b/build.zig new file mode 100644 index 00000000..082f724d --- /dev/null +++ b/build.zig @@ -0,0 +1,71 @@ +const std = @import("std"); +const builtin = @import("builtin"); +const fmt = std.fmt; +const fs = std.fs; +const heap = std.heap; +const mem = std.mem; + +pub fn build(b: *std.build.Builder) !void { + var target = b.standardTargetOptions(.{}); + var mode = b.standardReleaseOptions(); + + const libsodium = b.addStaticLibrary("libsodium", null); + libsodium.setTarget(target); + libsodium.setBuildMode(mode); + libsodium.install(); + libsodium.linkLibC(); + + libsodium.addIncludeDir("src/libsodium/include/sodium"); + libsodium.defineCMacro("CONFIGURED", "1"); + libsodium.defineCMacro("DEV_MODE", "1"); + libsodium.defineCMacro("_GNU_SOURCE", "1"); + libsodium.defineCMacro("HAVE_INLINE_ASM", "1"); + libsodium.defineCMacro("HAVE_TI_MODE", "1"); + libsodium.defineCMacro("HAVE_ATOMIC_OPS", "1"); + libsodium.defineCMacro("ASM_HIDE_SYMBOL", ".private_extern"); + + switch (target.getCpuArch()) { + .x86_64 => { + libsodium.defineCMacro("HAVE_AMD64_ASM", "1"); + libsodium.defineCMacro("HAVE_AVX_ASM", "1"); + libsodium.defineCMacro("HAVE_CPUID", "1"); + libsodium.defineCMacro("HAVE_MMINTRIN_H", "1"); + libsodium.defineCMacro("HAVE_EMMINTRIN_H", "1"); + libsodium.defineCMacro("HAVE_PMMINTRIN_H", "1"); + }, + .aarch64, .aarch64_be => { + libsodium.defineCMacro("HAVE_ARMCRYTO", "1"); + }, + .wasm32, .wasm64 => { + libsodium.defineCMacro("__wasm__", "1"); + }, + else => {}, + } + + switch (target.getOsTag()) { + .wasi => { + libsodium.defineCMacro("__wasi__", "1"); + }, + else => {}, + } + + const base = "src/libsodium"; + const dir = try fs.Dir.openDir(fs.cwd(), base, .{ .iterate = true, .no_follow = true }); + var allocator = heap.page_allocator; + var walker = try dir.walk(allocator); + while (try walker.next()) |entry| { + const name = entry.basename; + if (mem.endsWith(u8, name, ".c")) { + const full_path = try fmt.allocPrint(allocator, "{s}/{s}", .{ base, entry.path }); + libsodium.addCSourceFiles(&.{full_path}, &.{ + "-fvisibility=hidden", + "-fno-strict-aliasing", + "-fno-strict-overflow", + "-fwrapv", + "-flax-vector-conversions", + }); + } + } + + libsodium.defineCMacro("CONFIGURED", "1"); +}