From 0ca5174735694a527c6d743bb1fc72cd5463ef42 Mon Sep 17 00:00:00 2001 From: Chen Kai <281165273grape@gmail.com> Date: Sun, 20 Oct 2024 12:11:04 +0800 Subject: [PATCH 1/5] add bls Signed-off-by: Chen Kai <281165273grape@gmail.com> --- build.zig | 67 +++++++++++++++++++++++++++++++++++++++++++++++++ build.zig.zon | 10 ++++++++ src/bls/bls.zig | 9 +++++++ src/root.zig | 1 + 4 files changed, 87 insertions(+) create mode 100644 src/bls/bls.zig diff --git a/build.zig b/build.zig index 6a89e87..d41040c 100644 --- a/build.zig +++ b/build.zig @@ -15,6 +15,54 @@ pub fn build(b: *std.Build) void { // set a preferred release mode, allowing the user to decide how to optimize. const optimize = b.standardOptimizeOption(.{}); + const dep_mcl_c = b.dependency("mcl", .{}); + + const mcl = b.addStaticLibrary(.{ + .name = "mcl", + .target = target, + .optimize = optimize, + }); + mcl.addIncludePath(dep_mcl_c.path("src")); + mcl.addIncludePath(dep_mcl_c.path("include")); + mcl.addIncludePath(dep_mcl_c.path("include/mcl")); + + // const mcl_flags = [_][]const u8{ "-g3", "-Wall", "-Wextra", "-Wformat=2", "-Wcast-qual", "-Wcast-align", "-Wwrite-strings", "-Wfloat-equal", "-Wpointer-arith", "-Wundef", "-m64", "-fomit-frame-pointer", "-DNDEBUG", "-fno-stack-protector", "-O3", "-fpic" }; + + mcl.addCSourceFiles(.{ .root = dep_mcl_c.path(""), .files = &.{ "src/bn_c256.cpp", "src/bn_c384.cpp","src/bn_c384_256.cpp","src/bn_c512.cpp","src/bint64.ll" } }); + mcl.installHeadersDirectory(dep_mcl_c.path("src"), "", .{}); + mcl.installHeadersDirectory(dep_mcl_c.path("include"), "", .{}); + mcl.installHeadersDirectory(dep_mcl_c.path("include/mcl"), "", .{}); + mcl.linkLibC(); + mcl.linkLibCpp(); + + b.installArtifact(mcl); + + const dep_bls_c = b.dependency("bls", .{}); + + const bls = b.addStaticLibrary(.{ + .name = "bls", + .target = target, + .optimize = optimize, + }); + bls.addIncludePath(dep_bls_c.path("src")); + bls.addIncludePath(dep_bls_c.path("include")); + bls.addIncludePath(dep_mcl_c.path("src")); + bls.addIncludePath(dep_mcl_c.path("include")); + bls.addIncludePath(dep_mcl_c.path("include/mcl")); + + const bls_flags = [_][]const u8{ "-g3", "-Wall", "-Wextra", "-Wformat=2", "-Wcast-qual", "-Wcast-align", "-Wwrite-strings", "-Wfloat-equal", "-Wpointer-arith", "-Wundef", "-m64", "-fomit-frame-pointer", "-DNDEBUG", "-fno-stack-protector", "-O3", "-fpic", "-DBLS_ETH" }; + + bls.addCSourceFiles(.{ .root = dep_bls_c.path(""), .flags = &bls_flags, .files = &.{ "src/bls_c256.cpp", "src/bls_c384.cpp", "src/bls_c384_256.cpp", "src/bls_c512.cpp", "src/mylib.c" } }); + bls.installHeadersDirectory(dep_mcl_c.path("src"), "", .{}); + bls.installHeadersDirectory(dep_mcl_c.path("include"), "", .{}); + bls.installHeadersDirectory(dep_mcl_c.path("include/mcl"), "", .{}); + bls.installHeadersDirectory(dep_bls_c.path("src"), "", .{}); + bls.installHeadersDirectory(dep_bls_c.path("include"), "", .{}); + bls.linkLibC(); + bls.linkLibCpp(); + + b.installArtifact(bls); + const lib = b.addStaticLibrary(.{ .name = "zephyrus", // In this case the main source file is merely a path, however, in more @@ -82,6 +130,15 @@ pub fn build(b: *std.Build) void { .target = target, .optimize = optimize, }); + lib_unit_tests.addIncludePath(dep_mcl_c.path("src")); + lib_unit_tests.addIncludePath(dep_mcl_c.path("include")); + lib_unit_tests.addIncludePath(dep_mcl_c.path("include/mcl")); + lib_unit_tests.addIncludePath(dep_bls_c.path("src")); + lib_unit_tests.addIncludePath(dep_bls_c.path("include")); + lib_unit_tests.linkLibrary(mcl); + lib_unit_tests.linkLibrary(bls); + lib_unit_tests.linkLibC(); + lib_unit_tests.linkLibCpp(); // lib_unit_tests.root_module.addImport("zabi", ssz_dep.module("zabi")); @@ -93,6 +150,16 @@ pub fn build(b: *std.Build) void { .optimize = optimize, }); + exe_unit_tests.addIncludePath(dep_mcl_c.path("src")); + exe_unit_tests.addIncludePath(dep_mcl_c.path("include")); + exe_unit_tests.addIncludePath(dep_mcl_c.path("include/mcl")); + exe_unit_tests.addIncludePath(dep_bls_c.path("src")); + exe_unit_tests.addIncludePath(dep_bls_c.path("include")); + exe_unit_tests.linkLibrary(mcl); + exe_unit_tests.linkLibrary(bls); + exe_unit_tests.linkLibC(); + exe_unit_tests.linkLibCpp(); + const run_exe_unit_tests = b.addRunArtifact(exe_unit_tests); // Similar to creating the run step earlier, this exposes a `test` step to diff --git a/build.zig.zon b/build.zig.zon index 8a5b488..e23f364 100644 --- a/build.zig.zon +++ b/build.zig.zon @@ -26,6 +26,16 @@ // .url = "https://github.com/Raiden1411/zabi/archive/79c77aa4a39d41ed50033fd922f4d37c0f0638bb.tar.gz", // .hash = "122095aaf2d09e3286bf8b00b773b65c1632639de6c5005de881754df7c04efc7e98", // } }, + .dependencies = .{ + .mcl = .{ + .url = "https://github.com/herumi/mcl/archive/v2.10.tar.gz", + .hash = "122001517c52ec64dc9b590c56793097e32903d0ffca10d46f1143c83b18da30e287", + }, + .bls = .{ + .url = "https://github.com/herumi/bls/archive/v1.94.tar.gz", + .hash = "1220f1431968b74c9a1e3241c4c2e5d34faa57ee8d31e8c7b8a8ae40c4c000d98a26", + }, + }, .paths = .{ "build.zig", "build.zig.zon", diff --git a/src/bls/bls.zig b/src/bls/bls.zig new file mode 100644 index 0000000..4d2086e --- /dev/null +++ b/src/bls/bls.zig @@ -0,0 +1,9 @@ +const bls = @cImport({ + @cDefine("BLS_ETH", ""); + @cInclude("mcl/bn_c384_256.h"); + @cInclude("bls/bls.h"); +}); + +pub fn init() void { + if (bls.blsInit(bls.MCL_BLS12_381, bls.MCLBN_COMPILED_TIME_VAR) != 0) @panic("BLS library mismatch"); +} \ No newline at end of file diff --git a/src/root.zig b/src/root.zig index 8965fe3..db174be 100644 --- a/src/root.zig +++ b/src/root.zig @@ -25,6 +25,7 @@ pub const ssz = @import("./ssz/ssz.zig"); pub const snappy = @import("./snappy/snappy.zig"); pub const merkle = @import("consensus/helpers/merkle.zig"); pub const genesis_helper = @import("consensus/helpers/genesis.zig"); +pub const bls= @import("./bls/bls.zig"); test { @import("std").testing.refAllDeclsRecursive(@This()); From 88fcedb57fb01f6989ac354cb74b7179f086346d Mon Sep 17 00:00:00 2001 From: Chen Kai <281165273grape@gmail.com> Date: Sun, 20 Oct 2024 15:11:50 +0800 Subject: [PATCH 2/5] test bls Signed-off-by: Chen Kai <281165273grape@gmail.com> --- bls | 1 + build.zig | 134 +++++++++++++++++++++++++----------------------- src/bls/bls.zig | 40 +++++++++++---- 3 files changed, 103 insertions(+), 72 deletions(-) create mode 160000 bls diff --git a/bls b/bls new file mode 160000 index 0000000..eb0f417 --- /dev/null +++ b/bls @@ -0,0 +1 @@ +Subproject commit eb0f41743e15893a5073c5c8ab5e71672279f9d2 diff --git a/build.zig b/build.zig index d41040c..a796b51 100644 --- a/build.zig +++ b/build.zig @@ -15,53 +15,53 @@ pub fn build(b: *std.Build) void { // set a preferred release mode, allowing the user to decide how to optimize. const optimize = b.standardOptimizeOption(.{}); - const dep_mcl_c = b.dependency("mcl", .{}); - - const mcl = b.addStaticLibrary(.{ - .name = "mcl", - .target = target, - .optimize = optimize, - }); - mcl.addIncludePath(dep_mcl_c.path("src")); - mcl.addIncludePath(dep_mcl_c.path("include")); - mcl.addIncludePath(dep_mcl_c.path("include/mcl")); - - // const mcl_flags = [_][]const u8{ "-g3", "-Wall", "-Wextra", "-Wformat=2", "-Wcast-qual", "-Wcast-align", "-Wwrite-strings", "-Wfloat-equal", "-Wpointer-arith", "-Wundef", "-m64", "-fomit-frame-pointer", "-DNDEBUG", "-fno-stack-protector", "-O3", "-fpic" }; - - mcl.addCSourceFiles(.{ .root = dep_mcl_c.path(""), .files = &.{ "src/bn_c256.cpp", "src/bn_c384.cpp","src/bn_c384_256.cpp","src/bn_c512.cpp","src/bint64.ll" } }); - mcl.installHeadersDirectory(dep_mcl_c.path("src"), "", .{}); - mcl.installHeadersDirectory(dep_mcl_c.path("include"), "", .{}); - mcl.installHeadersDirectory(dep_mcl_c.path("include/mcl"), "", .{}); - mcl.linkLibC(); - mcl.linkLibCpp(); - - b.installArtifact(mcl); - - const dep_bls_c = b.dependency("bls", .{}); - - const bls = b.addStaticLibrary(.{ - .name = "bls", - .target = target, - .optimize = optimize, - }); - bls.addIncludePath(dep_bls_c.path("src")); - bls.addIncludePath(dep_bls_c.path("include")); - bls.addIncludePath(dep_mcl_c.path("src")); - bls.addIncludePath(dep_mcl_c.path("include")); - bls.addIncludePath(dep_mcl_c.path("include/mcl")); - - const bls_flags = [_][]const u8{ "-g3", "-Wall", "-Wextra", "-Wformat=2", "-Wcast-qual", "-Wcast-align", "-Wwrite-strings", "-Wfloat-equal", "-Wpointer-arith", "-Wundef", "-m64", "-fomit-frame-pointer", "-DNDEBUG", "-fno-stack-protector", "-O3", "-fpic", "-DBLS_ETH" }; - - bls.addCSourceFiles(.{ .root = dep_bls_c.path(""), .flags = &bls_flags, .files = &.{ "src/bls_c256.cpp", "src/bls_c384.cpp", "src/bls_c384_256.cpp", "src/bls_c512.cpp", "src/mylib.c" } }); - bls.installHeadersDirectory(dep_mcl_c.path("src"), "", .{}); - bls.installHeadersDirectory(dep_mcl_c.path("include"), "", .{}); - bls.installHeadersDirectory(dep_mcl_c.path("include/mcl"), "", .{}); - bls.installHeadersDirectory(dep_bls_c.path("src"), "", .{}); - bls.installHeadersDirectory(dep_bls_c.path("include"), "", .{}); - bls.linkLibC(); - bls.linkLibCpp(); - - b.installArtifact(bls); + // const dep_mcl_c = b.dependency("mcl", .{}); + // + // const mcl = b.addStaticLibrary(.{ + // .name = "mcl", + // .target = target, + // .optimize = optimize, + // }); + // mcl.addIncludePath(dep_mcl_c.path("src")); + // mcl.addIncludePath(dep_mcl_c.path("include")); + // mcl.addIncludePath(dep_mcl_c.path("include/mcl")); + // + // // const mcl_flags = [_][]const u8{ "-g3", "-Wall", "-Wextra", "-Wformat=2", "-Wcast-qual", "-Wcast-align", "-Wwrite-strings", "-Wfloat-equal", "-Wpointer-arith", "-Wundef", "-m64", "-fomit-frame-pointer", "-DNDEBUG", "-fno-stack-protector", "-O3", "-fpic" }; + // + // mcl.addCSourceFiles(.{ .root = dep_mcl_c.path(""), .files = &.{ "src/bn_c256.cpp", "src/bn_c384.cpp","src/bn_c384_256.cpp","src/bn_c512.cpp","src/bint64.ll" } }); + // mcl.installHeadersDirectory(dep_mcl_c.path("src"), "", .{}); + // mcl.installHeadersDirectory(dep_mcl_c.path("include"), "", .{}); + // mcl.installHeadersDirectory(dep_mcl_c.path("include/mcl"), "", .{}); + // mcl.linkLibC(); + // mcl.linkLibCpp(); + // + // b.installArtifact(mcl); + // + // const dep_bls_c = b.dependency("bls", .{}); + // + // const bls = b.addStaticLibrary(.{ + // .name = "bls", + // .target = target, + // .optimize = optimize, + // }); + // bls.addIncludePath(dep_bls_c.path("src")); + // bls.addIncludePath(dep_bls_c.path("include")); + // bls.addIncludePath(dep_mcl_c.path("src")); + // bls.addIncludePath(dep_mcl_c.path("include")); + // bls.addIncludePath(dep_mcl_c.path("include/mcl")); + // + // const bls_flags = [_][]const u8{ "-g3", "-Wall", "-Wextra", "-Wformat=2", "-Wcast-qual", "-Wcast-align", "-Wwrite-strings", "-Wfloat-equal", "-Wpointer-arith", "-Wundef", "-m64", "-fomit-frame-pointer", "-DNDEBUG", "-fno-stack-protector", "-O3", "-fpic", "-DBLS_ETH" }; + // + // bls.addCSourceFiles(.{ .root = dep_bls_c.path(""), .flags = &bls_flags, .files = &.{ "src/bls_c256.cpp", "src/bls_c384.cpp", "src/bls_c384_256.cpp", "src/bls_c512.cpp", "src/mylib.c" } }); + // bls.installHeadersDirectory(dep_mcl_c.path("src"), "", .{}); + // bls.installHeadersDirectory(dep_mcl_c.path("include"), "", .{}); + // bls.installHeadersDirectory(dep_mcl_c.path("include/mcl"), "", .{}); + // bls.installHeadersDirectory(dep_bls_c.path("src"), "", .{}); + // bls.installHeadersDirectory(dep_bls_c.path("include"), "", .{}); + // bls.linkLibC(); + // bls.linkLibCpp(); + // + // b.installArtifact(bls); const lib = b.addStaticLibrary(.{ .name = "zephyrus", @@ -130,15 +130,23 @@ pub fn build(b: *std.Build) void { .target = target, .optimize = optimize, }); - lib_unit_tests.addIncludePath(dep_mcl_c.path("src")); - lib_unit_tests.addIncludePath(dep_mcl_c.path("include")); - lib_unit_tests.addIncludePath(dep_mcl_c.path("include/mcl")); - lib_unit_tests.addIncludePath(dep_bls_c.path("src")); - lib_unit_tests.addIncludePath(dep_bls_c.path("include")); - lib_unit_tests.linkLibrary(mcl); - lib_unit_tests.linkLibrary(bls); + // lib_unit_tests.installHeadersDirectory(b.path("bls/include/"), "", .{}); + // lib_unit_tests.installHeadersDirectory(b.path("bls/mcl/include/"), "", .{}); + lib_unit_tests.addIncludePath(b.path("bls/include/")); + lib_unit_tests.addIncludePath(b.path("bls/mcl/include/")); + lib_unit_tests.addObjectFile(b.path("bls/mcl/lib/libmcl.a")); + lib_unit_tests.addObjectFile(b.path("bls/lib/libbls384_256.a")); lib_unit_tests.linkLibC(); lib_unit_tests.linkLibCpp(); + // lib_unit_tests.addIncludePath(dep_mcl_c.path("src")); + // lib_unit_tests.addIncludePath(dep_mcl_c.path("include")); + // lib_unit_tests.addIncludePath(dep_mcl_c.path("include/mcl")); + // lib_unit_tests.addIncludePath(dep_bls_c.path("src")); + // lib_unit_tests.addIncludePath(dep_bls_c.path("include")); + // lib_unit_tests.linkLibrary(mcl); + // lib_unit_tests.linkLibrary(bls); + // lib_unit_tests.linkLibC(); + // lib_unit_tests.linkLibCpp(); // lib_unit_tests.root_module.addImport("zabi", ssz_dep.module("zabi")); @@ -150,15 +158,15 @@ pub fn build(b: *std.Build) void { .optimize = optimize, }); - exe_unit_tests.addIncludePath(dep_mcl_c.path("src")); - exe_unit_tests.addIncludePath(dep_mcl_c.path("include")); - exe_unit_tests.addIncludePath(dep_mcl_c.path("include/mcl")); - exe_unit_tests.addIncludePath(dep_bls_c.path("src")); - exe_unit_tests.addIncludePath(dep_bls_c.path("include")); - exe_unit_tests.linkLibrary(mcl); - exe_unit_tests.linkLibrary(bls); - exe_unit_tests.linkLibC(); - exe_unit_tests.linkLibCpp(); + // exe_unit_tests.addIncludePath(dep_mcl_c.path("src")); + // exe_unit_tests.addIncludePath(dep_mcl_c.path("include")); + // exe_unit_tests.addIncludePath(dep_mcl_c.path("include/mcl")); + // exe_unit_tests.addIncludePath(dep_bls_c.path("src")); + // exe_unit_tests.addIncludePath(dep_bls_c.path("include")); + // exe_unit_tests.linkLibrary(mcl); + // exe_unit_tests.linkLibrary(bls); + // exe_unit_tests.linkLibC(); + // exe_unit_tests.linkLibCpp(); const run_exe_unit_tests = b.addRunArtifact(exe_unit_tests); diff --git a/src/bls/bls.zig b/src/bls/bls.zig index 4d2086e..4c3343f 100644 --- a/src/bls/bls.zig +++ b/src/bls/bls.zig @@ -1,9 +1,31 @@ -const bls = @cImport({ - @cDefine("BLS_ETH", ""); - @cInclude("mcl/bn_c384_256.h"); - @cInclude("bls/bls.h"); -}); - -pub fn init() void { - if (bls.blsInit(bls.MCL_BLS12_381, bls.MCLBN_COMPILED_TIME_VAR) != 0) @panic("BLS library mismatch"); -} \ No newline at end of file +const BLS = struct { + const curves = enum { + bls_c256, + bls_c384, + bls_c384_256, + }; + + fn blsLibrary() type { + return struct { + pub usingnamespace @cImport({ + @cDefine("BLS_ETH", "1"); + @cInclude("bls/bls384_256.h"); + @cInclude("bls/bls.h"); + }); + }; + } + const bls = blsLibrary(); + + const ID_SIZE = 32; + const SECRETKEY_SIZE = 32; + const PUBLICKEY_SIZE = 64; + const SIGNATURE_SIZE = 32; + + pub fn init() void { + if (bls.blsInit(bls.MCL_BLS12_381, bls.MCLBN_COMPILED_TIME_VAR) != 0) @panic("BLS library mismatch"); + } +}; + +test "test init" { + BLS.init(); +} From 6b0fa92040751f3a2dbf5034ec5b129eb49794e7 Mon Sep 17 00:00:00 2001 From: Chen Kai <281165273grape@gmail.com> Date: Sun, 20 Oct 2024 19:35:48 +0800 Subject: [PATCH 3/5] feat:add bls Signed-off-by: Chen Kai <281165273grape@gmail.com> --- bls | 1 - build.zig | 118 ++++++++++++++++++++++-------------------------- src/bls/bls.zig | 43 +++++++----------- 3 files changed, 72 insertions(+), 90 deletions(-) delete mode 160000 bls diff --git a/bls b/bls deleted file mode 160000 index eb0f417..0000000 --- a/bls +++ /dev/null @@ -1 +0,0 @@ -Subproject commit eb0f41743e15893a5073c5c8ab5e71672279f9d2 diff --git a/build.zig b/build.zig index a796b51..96f9cfd 100644 --- a/build.zig +++ b/build.zig @@ -15,53 +15,55 @@ pub fn build(b: *std.Build) void { // set a preferred release mode, allowing the user to decide how to optimize. const optimize = b.standardOptimizeOption(.{}); - // const dep_mcl_c = b.dependency("mcl", .{}); - // - // const mcl = b.addStaticLibrary(.{ - // .name = "mcl", - // .target = target, - // .optimize = optimize, - // }); - // mcl.addIncludePath(dep_mcl_c.path("src")); - // mcl.addIncludePath(dep_mcl_c.path("include")); - // mcl.addIncludePath(dep_mcl_c.path("include/mcl")); - // - // // const mcl_flags = [_][]const u8{ "-g3", "-Wall", "-Wextra", "-Wformat=2", "-Wcast-qual", "-Wcast-align", "-Wwrite-strings", "-Wfloat-equal", "-Wpointer-arith", "-Wundef", "-m64", "-fomit-frame-pointer", "-DNDEBUG", "-fno-stack-protector", "-O3", "-fpic" }; - // - // mcl.addCSourceFiles(.{ .root = dep_mcl_c.path(""), .files = &.{ "src/bn_c256.cpp", "src/bn_c384.cpp","src/bn_c384_256.cpp","src/bn_c512.cpp","src/bint64.ll" } }); + const dep_mcl_c = b.dependency("mcl", .{}); + + const mcl = b.addStaticLibrary(.{ + .name = "mcl", + .target = target, + .optimize = optimize, + }); + mcl.addIncludePath(dep_mcl_c.path("include")); + mcl.addIncludePath(dep_mcl_c.path("test")); + + const mcl_flags = [_][]const u8{ "-g3", "-Wall", "-Wextra", "-Wformat=2", "-Wcast-qual", "-Wcast-align", "-Wwrite-strings", "-Wfloat-equal", "-Wpointer-arith", "-Wundef", "-m64", "-fomit-frame-pointer", "-DNDEBUG", "-fno-stack-protector", "-O3", "-fpic","-DMCL_USE_LLVM=0", "-DMCL_BINT_ASM=1", "-DMCL_MSM=1" }; + + const mcl_files = if (target.result.isDarwin()) + &[_][]const u8{ "src/base64.ll", "src/asm/bint-x64-amd64.S", "src/fp.cpp" } + else + &[_][]const u8{ "src/asm/x86-64.S","src/asm/bint-x64-amd64.S","src/fp.cpp","src/msm_avx.cpp" }; + + mcl.addCSourceFiles(.{ .root = dep_mcl_c.path(""),.flags = &mcl_flags, .files = mcl_files }); // mcl.installHeadersDirectory(dep_mcl_c.path("src"), "", .{}); // mcl.installHeadersDirectory(dep_mcl_c.path("include"), "", .{}); // mcl.installHeadersDirectory(dep_mcl_c.path("include/mcl"), "", .{}); - // mcl.linkLibC(); - // mcl.linkLibCpp(); - // - // b.installArtifact(mcl); - // - // const dep_bls_c = b.dependency("bls", .{}); - // - // const bls = b.addStaticLibrary(.{ - // .name = "bls", - // .target = target, - // .optimize = optimize, - // }); - // bls.addIncludePath(dep_bls_c.path("src")); - // bls.addIncludePath(dep_bls_c.path("include")); - // bls.addIncludePath(dep_mcl_c.path("src")); - // bls.addIncludePath(dep_mcl_c.path("include")); - // bls.addIncludePath(dep_mcl_c.path("include/mcl")); - // - // const bls_flags = [_][]const u8{ "-g3", "-Wall", "-Wextra", "-Wformat=2", "-Wcast-qual", "-Wcast-align", "-Wwrite-strings", "-Wfloat-equal", "-Wpointer-arith", "-Wundef", "-m64", "-fomit-frame-pointer", "-DNDEBUG", "-fno-stack-protector", "-O3", "-fpic", "-DBLS_ETH" }; - // - // bls.addCSourceFiles(.{ .root = dep_bls_c.path(""), .flags = &bls_flags, .files = &.{ "src/bls_c256.cpp", "src/bls_c384.cpp", "src/bls_c384_256.cpp", "src/bls_c512.cpp", "src/mylib.c" } }); + mcl.linkLibC(); + mcl.linkLibCpp(); + + b.installArtifact(mcl); + + const dep_bls_c = b.dependency("bls", .{}); + + const bls = b.addStaticLibrary(.{ + .name = "bls", + .target = target, + .optimize = optimize, + }); + bls.addIncludePath(dep_bls_c.path("test")); + bls.addIncludePath(dep_bls_c.path("include")); + bls.addIncludePath(dep_mcl_c.path("include")); + + const bls_flags = [_][]const u8{ "-g3", "-Wall", "-Wextra", "-Wformat=2", "-Wcast-qual", "-Wcast-align", "-Wwrite-strings", "-Wfloat-equal", "-Wpointer-arith", "-Wundef", "-m64", "-fomit-frame-pointer", "-DNDEBUG", "-fno-stack-protector", "-O3", "-fpic", "-DBLS_ETH" }; + + bls.addCSourceFiles(.{ .root = dep_bls_c.path(""), .flags = &bls_flags, .files = &.{ "src/bls_c384_256.cpp" } }); // bls.installHeadersDirectory(dep_mcl_c.path("src"), "", .{}); // bls.installHeadersDirectory(dep_mcl_c.path("include"), "", .{}); // bls.installHeadersDirectory(dep_mcl_c.path("include/mcl"), "", .{}); // bls.installHeadersDirectory(dep_bls_c.path("src"), "", .{}); // bls.installHeadersDirectory(dep_bls_c.path("include"), "", .{}); - // bls.linkLibC(); - // bls.linkLibCpp(); - // - // b.installArtifact(bls); + bls.linkLibC(); + bls.linkLibCpp(); + + b.installArtifact(bls); const lib = b.addStaticLibrary(.{ .name = "zephyrus", @@ -130,23 +132,14 @@ pub fn build(b: *std.Build) void { .target = target, .optimize = optimize, }); - // lib_unit_tests.installHeadersDirectory(b.path("bls/include/"), "", .{}); - // lib_unit_tests.installHeadersDirectory(b.path("bls/mcl/include/"), "", .{}); - lib_unit_tests.addIncludePath(b.path("bls/include/")); - lib_unit_tests.addIncludePath(b.path("bls/mcl/include/")); - lib_unit_tests.addObjectFile(b.path("bls/mcl/lib/libmcl.a")); - lib_unit_tests.addObjectFile(b.path("bls/lib/libbls384_256.a")); + lib_unit_tests.addIncludePath(dep_mcl_c.path("test")); + lib_unit_tests.addIncludePath(dep_mcl_c.path("include")); + lib_unit_tests.addIncludePath(dep_bls_c.path("test")); + lib_unit_tests.addIncludePath(dep_bls_c.path("include")); + lib_unit_tests.linkLibrary(mcl); + lib_unit_tests.linkLibrary(bls); lib_unit_tests.linkLibC(); lib_unit_tests.linkLibCpp(); - // lib_unit_tests.addIncludePath(dep_mcl_c.path("src")); - // lib_unit_tests.addIncludePath(dep_mcl_c.path("include")); - // lib_unit_tests.addIncludePath(dep_mcl_c.path("include/mcl")); - // lib_unit_tests.addIncludePath(dep_bls_c.path("src")); - // lib_unit_tests.addIncludePath(dep_bls_c.path("include")); - // lib_unit_tests.linkLibrary(mcl); - // lib_unit_tests.linkLibrary(bls); - // lib_unit_tests.linkLibC(); - // lib_unit_tests.linkLibCpp(); // lib_unit_tests.root_module.addImport("zabi", ssz_dep.module("zabi")); @@ -158,15 +151,14 @@ pub fn build(b: *std.Build) void { .optimize = optimize, }); - // exe_unit_tests.addIncludePath(dep_mcl_c.path("src")); - // exe_unit_tests.addIncludePath(dep_mcl_c.path("include")); - // exe_unit_tests.addIncludePath(dep_mcl_c.path("include/mcl")); - // exe_unit_tests.addIncludePath(dep_bls_c.path("src")); - // exe_unit_tests.addIncludePath(dep_bls_c.path("include")); - // exe_unit_tests.linkLibrary(mcl); - // exe_unit_tests.linkLibrary(bls); - // exe_unit_tests.linkLibC(); - // exe_unit_tests.linkLibCpp(); + exe_unit_tests.addIncludePath(dep_mcl_c.path("test")); + exe_unit_tests.addIncludePath(dep_mcl_c.path("include")); + exe_unit_tests.addIncludePath(dep_bls_c.path("test")); + exe_unit_tests.addIncludePath(dep_bls_c.path("include")); + exe_unit_tests.linkLibrary(mcl); + exe_unit_tests.linkLibrary(bls); + exe_unit_tests.linkLibC(); + exe_unit_tests.linkLibCpp(); const run_exe_unit_tests = b.addRunArtifact(exe_unit_tests); diff --git a/src/bls/bls.zig b/src/bls/bls.zig index 4c3343f..d65b672 100644 --- a/src/bls/bls.zig +++ b/src/bls/bls.zig @@ -1,31 +1,22 @@ -const BLS = struct { - const curves = enum { - bls_c256, - bls_c384, - bls_c384_256, - }; +const std = @import("std"); +const bls = @cImport({ + @cDefine("BLS_ETH", "1"); + @cInclude("bls/bls384_256.h"); +}); - fn blsLibrary() type { - return struct { - pub usingnamespace @cImport({ - @cDefine("BLS_ETH", "1"); - @cInclude("bls/bls384_256.h"); - @cInclude("bls/bls.h"); - }); - }; - } - const bls = blsLibrary(); - - const ID_SIZE = 32; - const SECRETKEY_SIZE = 32; - const PUBLICKEY_SIZE = 64; - const SIGNATURE_SIZE = 32; +var mutex = std.Thread.Mutex{}; - pub fn init() void { - if (bls.blsInit(bls.MCL_BLS12_381, bls.MCLBN_COMPILED_TIME_VAR) != 0) @panic("BLS library mismatch"); +pub fn init() void { + mutex.lock(); + defer mutex.unlock(); + std.debug.print(" {}\n", .{bls.MCL_BLS12_381}); + std.debug.print(" {}\n", .{bls.MCLBN_COMPILED_TIME_VAR}); + const res = bls.blsInit(bls.MCL_BLS12_381, bls.MCLBN_COMPILED_TIME_VAR); + if (res != 0) { + std.debug.print("{}\n", .{res}); + @panic("blsInit failed"); } -}; - +} test "test init" { - BLS.init(); + init(); } From b3a0763441422d7746d42a9e27525033611929ae Mon Sep 17 00:00:00 2001 From: Chen Kai <281165273grape@gmail.com> Date: Sun, 20 Oct 2024 22:07:14 +0800 Subject: [PATCH 4/5] add bls Signed-off-by: Chen Kai <281165273grape@gmail.com> --- build.zig | 120 ++++++++++++++++++++++++++++++------------------------ 1 file changed, 66 insertions(+), 54 deletions(-) diff --git a/build.zig b/build.zig index 96f9cfd..3668643 100644 --- a/build.zig +++ b/build.zig @@ -15,55 +15,56 @@ pub fn build(b: *std.Build) void { // set a preferred release mode, allowing the user to decide how to optimize. const optimize = b.standardOptimizeOption(.{}); - const dep_mcl_c = b.dependency("mcl", .{}); - - const mcl = b.addStaticLibrary(.{ - .name = "mcl", - .target = target, - .optimize = optimize, - }); - mcl.addIncludePath(dep_mcl_c.path("include")); - mcl.addIncludePath(dep_mcl_c.path("test")); - - const mcl_flags = [_][]const u8{ "-g3", "-Wall", "-Wextra", "-Wformat=2", "-Wcast-qual", "-Wcast-align", "-Wwrite-strings", "-Wfloat-equal", "-Wpointer-arith", "-Wundef", "-m64", "-fomit-frame-pointer", "-DNDEBUG", "-fno-stack-protector", "-O3", "-fpic","-DMCL_USE_LLVM=0", "-DMCL_BINT_ASM=1", "-DMCL_MSM=1" }; - - const mcl_files = if (target.result.isDarwin()) - &[_][]const u8{ "src/base64.ll", "src/asm/bint-x64-amd64.S", "src/fp.cpp" } - else - &[_][]const u8{ "src/asm/x86-64.S","src/asm/bint-x64-amd64.S","src/fp.cpp","src/msm_avx.cpp" }; - - mcl.addCSourceFiles(.{ .root = dep_mcl_c.path(""),.flags = &mcl_flags, .files = mcl_files }); + // const dep_mcl_c = b.dependency("mcl", .{}); + // + // const mcl = b.addStaticLibrary(.{ + // .name = "mcl", + // .target = target, + // .optimize = optimize, + // }); + // mcl.addIncludePath(dep_mcl_c.path("include")); + // mcl.addIncludePath(dep_mcl_c.path("test")); + // + // const mcl_flags = [_][]const u8{ "-g3", "-Wall", "-Wextra", "-Wformat=2", "-Wcast-qual", "-Wcast-align", "-Wwrite-strings", "-Wfloat-equal", "-Wpointer-arith", "-Wundef", "-m64", "-fomit-frame-pointer", "-DNDEBUG", "-fno-stack-protector", "-O3", "-fpic","-DMCL_USE_LLVM=0", "-DMCL_BINT_ASM=1", "-DMCL_MSM=1" }; + // + // const mcl_files = if (target.result.isDarwin()) + // &[_][]const u8{ "src/base64.ll", "src/asm/bint-x64-amd64.S", "src/fp.cpp" } + // else + // &[_][]const u8{ "src/asm/x86-64.S","src/asm/bint-x64-amd64.S","src/fp.cpp","src/msm_avx.cpp" }; + // + // mcl.addCSourceFiles(.{ .root = dep_mcl_c.path(""),.flags = &mcl_flags, .files = mcl_files }); // mcl.installHeadersDirectory(dep_mcl_c.path("src"), "", .{}); // mcl.installHeadersDirectory(dep_mcl_c.path("include"), "", .{}); // mcl.installHeadersDirectory(dep_mcl_c.path("include/mcl"), "", .{}); - mcl.linkLibC(); - mcl.linkLibCpp(); - - b.installArtifact(mcl); - - const dep_bls_c = b.dependency("bls", .{}); - - const bls = b.addStaticLibrary(.{ - .name = "bls", - .target = target, - .optimize = optimize, - }); - bls.addIncludePath(dep_bls_c.path("test")); - bls.addIncludePath(dep_bls_c.path("include")); - bls.addIncludePath(dep_mcl_c.path("include")); - - const bls_flags = [_][]const u8{ "-g3", "-Wall", "-Wextra", "-Wformat=2", "-Wcast-qual", "-Wcast-align", "-Wwrite-strings", "-Wfloat-equal", "-Wpointer-arith", "-Wundef", "-m64", "-fomit-frame-pointer", "-DNDEBUG", "-fno-stack-protector", "-O3", "-fpic", "-DBLS_ETH" }; - - bls.addCSourceFiles(.{ .root = dep_bls_c.path(""), .flags = &bls_flags, .files = &.{ "src/bls_c384_256.cpp" } }); + // mcl.linkLibC(); + // mcl.linkLibCpp(); + // + // b.installArtifact(mcl); + // + // const dep_bls_c = b.dependency("bls", .{}); + // + // const bls = b.addStaticLibrary(.{ + // .name = "bls", + // .target = target, + // .optimize = optimize, + // }); + // bls.addIncludePath(dep_bls_c.path("test")); + // bls.addIncludePath(dep_bls_c.path("include")); + // bls.addIncludePath(dep_mcl_c.path("include")); + // + // const bls_flags = [_][]const u8{ "-g3", "-Wall", "-Wextra", "-Wformat=2", "-Wcast-qual", "-Wcast-align", "-Wwrite-strings", "-Wfloat-equal", "-Wpointer-arith", "-Wundef", "-m64", "-fomit-frame-pointer", "-DNDEBUG", "-fno-stack-protector", "-O3", "-fpic", "-DBLS_ETH" }; + // + // bls.addCSourceFiles(.{ .root = dep_bls_c.path(""), .flags = &bls_flags, .files = &.{ "src/bls_c384_256.cpp" } }); // bls.installHeadersDirectory(dep_mcl_c.path("src"), "", .{}); // bls.installHeadersDirectory(dep_mcl_c.path("include"), "", .{}); // bls.installHeadersDirectory(dep_mcl_c.path("include/mcl"), "", .{}); // bls.installHeadersDirectory(dep_bls_c.path("src"), "", .{}); // bls.installHeadersDirectory(dep_bls_c.path("include"), "", .{}); - bls.linkLibC(); - bls.linkLibCpp(); + // bls.linkLibC(); + // bls.linkLibCpp(); + // + // b.installArtifact(bls); - b.installArtifact(bls); const lib = b.addStaticLibrary(.{ .name = "zephyrus", @@ -132,12 +133,23 @@ pub fn build(b: *std.Build) void { .target = target, .optimize = optimize, }); - lib_unit_tests.addIncludePath(dep_mcl_c.path("test")); - lib_unit_tests.addIncludePath(dep_mcl_c.path("include")); - lib_unit_tests.addIncludePath(dep_bls_c.path("test")); - lib_unit_tests.addIncludePath(dep_bls_c.path("include")); - lib_unit_tests.linkLibrary(mcl); - lib_unit_tests.linkLibrary(bls); + // lib_unit_tests.addIncludePath(dep_mcl_c.path("test")); + // lib_unit_tests.addIncludePath(dep_mcl_c.path("include")); + // lib_unit_tests.addIncludePath(dep_bls_c.path("test")); + // lib_unit_tests.addIncludePath(dep_bls_c.path("include")); + // lib_unit_tests.linkLibrary(mcl); + // lib_unit_tests.linkLibrary(bls); + // lib_unit_tests.linkLibC(); + // lib_unit_tests.linkLibCpp(); + + lib_unit_tests.addIncludePath(b.path("bls/include/")); + lib_unit_tests.addIncludePath(b.path("bls/mcl/include/")); + lib_unit_tests.addIncludePath(b.path("bls/mcl/test/")); + lib_unit_tests.addIncludePath(b.path("bls/test/")); + // lib_unit_tests.addLibraryPath(b.path("bls/mcl/lib/")); + // lib_unit_tests.addLibraryPath(b.path("bls/lib/")); + lib_unit_tests.addObjectFile(b.path("bls/lib/libbls384_256.a")); + lib_unit_tests.addObjectFile(b.path("bls/mcl/lib/libmcl.a")); lib_unit_tests.linkLibC(); lib_unit_tests.linkLibCpp(); @@ -151,14 +163,14 @@ pub fn build(b: *std.Build) void { .optimize = optimize, }); - exe_unit_tests.addIncludePath(dep_mcl_c.path("test")); - exe_unit_tests.addIncludePath(dep_mcl_c.path("include")); - exe_unit_tests.addIncludePath(dep_bls_c.path("test")); - exe_unit_tests.addIncludePath(dep_bls_c.path("include")); - exe_unit_tests.linkLibrary(mcl); - exe_unit_tests.linkLibrary(bls); - exe_unit_tests.linkLibC(); - exe_unit_tests.linkLibCpp(); + // exe_unit_tests.addIncludePath(dep_mcl_c.path("test")); + // exe_unit_tests.addIncludePath(dep_mcl_c.path("include")); + // exe_unit_tests.addIncludePath(dep_bls_c.path("test")); + // exe_unit_tests.addIncludePath(dep_bls_c.path("include")); + // exe_unit_tests.linkLibrary(mcl); + // exe_unit_tests.linkLibrary(bls); + // exe_unit_tests.linkLibC(); + // exe_unit_tests.linkLibCpp(); const run_exe_unit_tests = b.addRunArtifact(exe_unit_tests); From d1901719518751bdb5a5023c8685dbc850f778d1 Mon Sep 17 00:00:00 2001 From: Chen Kai <281165273grape@gmail.com> Date: Mon, 21 Oct 2024 14:13:51 +0800 Subject: [PATCH 5/5] use bls release lib Signed-off-by: Chen Kai <281165273grape@gmail.com> --- build.zig | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/build.zig b/build.zig index 3668643..0e2c3ee 100644 --- a/build.zig +++ b/build.zig @@ -142,14 +142,17 @@ pub fn build(b: *std.Build) void { // lib_unit_tests.linkLibC(); // lib_unit_tests.linkLibCpp(); - lib_unit_tests.addIncludePath(b.path("bls/include/")); - lib_unit_tests.addIncludePath(b.path("bls/mcl/include/")); - lib_unit_tests.addIncludePath(b.path("bls/mcl/test/")); - lib_unit_tests.addIncludePath(b.path("bls/test/")); + // lib_unit_tests.addIncludePath(b.path("bls-eth-go-binary/bls/include/bls/")); + lib_unit_tests.addIncludePath(b.path("bls-eth-go-binary/bls/include/")); + // lib_unit_tests.addIncludePath(b.path("bls/mcl/include/")); + // lib_unit_tests.addIncludePath(b.path("bls/mcl/test/")); + // lib_unit_tests.addIncludePath(b.path("bls/test/")); + // lib_unit_tests.addLibraryPath(b.path("bls/mcl/lib/")); // lib_unit_tests.addLibraryPath(b.path("bls/lib/")); - lib_unit_tests.addObjectFile(b.path("bls/lib/libbls384_256.a")); - lib_unit_tests.addObjectFile(b.path("bls/mcl/lib/libmcl.a")); + lib_unit_tests.addObjectFile(b.path("bls-eth-go-binary/bls/lib/linux/amd64/libbls384_256.a")); + // lib_unit_tests.addObjectFile(b.path("bls-eth-go-binary/bls/lib/darwin/amd64/libmcl.a")); + // lib_unit_tests.addObjectFile(b.path("bls/mcl/lib/libmcl.a")); lib_unit_tests.linkLibC(); lib_unit_tests.linkLibCpp();