diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 124fc753..eaab1409 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -43,7 +43,7 @@ jobs:
- name: Install Zig
uses: goto-bus-stop/setup-zig@d866436887ad1b24590684f9d00480376663dd36
with:
- version: 0.11.0
+ version: 0.12.0
- name: Autogen
run: ./autogen.sh -s
diff --git a/.github/workflows/dotnet-core.yml b/.github/workflows/dotnet-core.yml
index c5bb34fe..dee44f42 100644
--- a/.github/workflows/dotnet-core.yml
+++ b/.github/workflows/dotnet-core.yml
@@ -7,10 +7,10 @@ on:
- next
jobs:
- build-windows:
+ build-windows-msvc:
runs-on: windows-latest
steps:
- - uses: actions/checkout@v3
+ - uses: actions/checkout@v4
- name: buildbase.bat
run: buildbase.bat ..\vs2022\libsodium.sln 17
working-directory: builds/msvc/build/
@@ -24,17 +24,26 @@ jobs:
name: build-win-x86
path: bin/Win32/Release/v143/dynamic/libsodium.dll
- build-linux-glibc:
+ build-others:
runs-on: ubuntu-latest
steps:
- name: Install Zig
- uses: goto-bus-stop/setup-zig@d866436887ad1b24590684f9d00480376663dd36
+ uses: goto-bus-stop/setup-zig@2a9625d550eefc3a9b1a43d342ad655f563f8241
with:
- version: 0.11.0
- - uses: actions/checkout@v3
- - name: build
+ version: 0.12.0
+ - uses: actions/checkout@v4
+
+ - name: build-win-arm64
run: |
- zig build -Doptimize=ReleaseFast -Dtarget=x86_64-linux-gnu.2.17 -Dcpu=sandybridge
+ rm -fr zig-out zig-cache; zig build -Doptimize=ReleaseFast -Dtarget=aarch64-windows; ls -lR zig-out
+ - uses: actions/upload-artifact@v3
+ with:
+ name: build-win-arm64
+ path: zig-out/lib/libsodium.dll
+
+ - name: build-linux-x64
+ run: |
+ rm -fr zig-out zig-cache; zig build -Doptimize=ReleaseFast -Dtarget=x86_64-linux-gnu.2.17
- name: tests
run: cd zig-out/bin && ./run.sh
- uses: actions/upload-artifact@v3
@@ -42,26 +51,23 @@ jobs:
name: build-linux-x64
path: zig-out/lib/libsodium.so
- build-linux-glibc-arm:
- runs-on: ubuntu-latest
- steps:
- - name: Install Zig
- uses: goto-bus-stop/setup-zig@d866436887ad1b24590684f9d00480376663dd36
- with:
- version: 0.11.0
- - name: Set up emulation environment
+ - name: Set up arm and aarch64 emulation environment
run: |
export DEBIAN_FRONTEND=noninteractive
sudo apt-get update
- sudo apt-get install -y build-essential qemu binfmt-support qemu-user-static qemu-system-arm gcc-arm-linux-gnueabihf libc6-armhf-cross
+ sudo apt-get install -y build-essential qemu binfmt-support qemu-user-static qemu-system-arm gcc-arm-linux-gnueabihf libc6-armhf-cross gcc-aarch64-linux-gnu libc6-arm64-cross
sudo dpkg --add-architecture armhf
sudo update-binfmts --enable qemu-arm
sudo update-binfmts --display
sudo ln -s /usr/arm-linux-gnueabihf/lib/ld-linux-armhf.so.* /lib
- - uses: actions/checkout@v3
- - name: build
+ sudo dpkg --add-architecture arm64
+ sudo update-binfmts --enable qemu-aarch64
+ sudo update-binfmts --display
+ sudo ln -s /usr/aarch64-linux-gnu/lib/ld-linux-aarch64.so.* /lib
+
+ - name: build-linux-arm
run: |
- zig build -Doptimize=ReleaseFast -Dtarget=arm-linux-gnueabihf.2.23 -Dcpu=baseline
+ rm -fr zig-out zig-cache; zig build -Doptimize=ReleaseFast -Dtarget=arm-linux-gnueabihf.2.23
- name: tests
run: |
cd zig-out/bin && env LD_LIBRARY_PATH=/usr/arm-linux-gnueabihf/lib ./run.sh
@@ -70,26 +76,9 @@ jobs:
name: build-linux-arm
path: zig-out/lib/libsodium.so
- build-linux-glibc-arm64:
- runs-on: ubuntu-latest
- steps:
- - name: Install Zig
- uses: goto-bus-stop/setup-zig@d866436887ad1b24590684f9d00480376663dd36
- with:
- version: 0.11.0
- - name: Set up emulation environment
+ - name: build-linux-arm64
run: |
- export DEBIAN_FRONTEND=noninteractive
- sudo apt-get update
- sudo apt-get install -y qemu binfmt-support qemu-user-static qemu-system-arm gcc-aarch64-linux-gnu libc6-arm64-cross
- sudo dpkg --add-architecture arm64
- sudo update-binfmts --enable qemu-aarch64
- sudo update-binfmts --display
- sudo ln -s /usr/aarch64-linux-gnu/lib/ld-linux-aarch64.so.* /lib
- - uses: actions/checkout@v3
- - name: build
- run: |
- zig build -Doptimize=ReleaseFast -Dtarget=aarch64-linux-gnu.2.23 -Dcpu=baseline
+ rm -fr zig-out zig-cache; zig build -Doptimize=ReleaseFast -Dtarget=aarch64-linux-gnu.2.23
- name: tests
run: |
cd zig-out/bin && env LD_LIBRARY_PATH=/usr/aarch64-linux-gnu/lib ./run.sh
@@ -98,67 +87,34 @@ jobs:
name: build-linux-arm64
path: zig-out/lib/libsodium.so
- build-linux-musl:
- runs-on: ubuntu-latest
- container:
- image: alpine:3.13
- steps:
- - name: Set up build environment
+ - name: build-linux-musl-x64
run: |
- apk update
- apk add alpine-sdk ca-certificates xz
- - name: Install Zig
- uses: goto-bus-stop/setup-zig@d866436887ad1b24590684f9d00480376663dd36
- with:
- version: 0.11.0
- - uses: actions/checkout@v3
- - name: build
- run: |
- zig build -Doptimize=ReleaseFast -Dtarget=x86_64-linux-musl -Dcpu=sandybridge
- - name: tests
- run: |
- cd zig-out/bin && ./run.sh
+ rm -fr zig-out zig-cache; zig build -Doptimize=ReleaseFast -Dtarget=x86_64-linux-musl
- uses: actions/upload-artifact@v3
with:
name: build-linux-musl-x64
- path: zig-out/lib/libsodium.so
+ path: zig-out/lib/libsodium.a
- build-linux-musl-arm:
- runs-on: ubuntu-latest
- steps:
- - name: Install Zig
- uses: goto-bus-stop/setup-zig@d866436887ad1b24590684f9d00480376663dd36
- with:
- version: 0.11.0
- - uses: actions/checkout@v3
- - name: build
+ - name: build-linux-musl-arm
run: |
- zig build -Doptimize=ReleaseFast -Dtarget=arm-linux-musleabihf -Dcpu=baseline
+ rm -fr zig-out zig-cache; zig build -Doptimize=ReleaseFast -Dtarget=arm-linux-musleabihf
- uses: actions/upload-artifact@v3
with:
name: build-linux-musl-arm
- path: zig-out/lib/libsodium.so
+ path: zig-out/lib/libsodium.a
- build-linux-musl-arm64:
- runs-on: ubuntu-latest
- steps:
- - name: Install Zig
- uses: goto-bus-stop/setup-zig@d866436887ad1b24590684f9d00480376663dd36
- with:
- version: 0.11.0
- - uses: actions/checkout@v3
- - name: build
+ - name: build-linux-musl-arm64
run: |
- zig build -Doptimize=ReleaseFast -Dtarget=aarch64-linux-musl -Dcpu=baseline
+ rm -fr zig-out zig-cache; zig build -Doptimize=ReleaseFast -Dtarget=aarch64-linux-musl
- uses: actions/upload-artifact@v3
with:
name: build-linux-musl-arm64
- path: zig-out/lib/libsodium.so
+ path: zig-out/lib/libsodium.a
build-macos-x64:
runs-on: macos-latest
steps:
- - uses: actions/checkout@v3
+ - uses: actions/checkout@v4
- name: configure
run: env CFLAGS="-Ofast -arch x86_64 -mmacosx-version-min=10.15" LDFLAGS="-arch x86_64 -mmacosx-version-min=10.15" ./configure --host=arm-apple-darwin20 --prefix=$PWD/.libsodium-build
- name: make
@@ -175,7 +131,7 @@ jobs:
build-macos-arm64:
runs-on: macos-latest
steps:
- - uses: actions/checkout@v3
+ - uses: actions/checkout@v4
- name: configure
run: env CFLAGS="-Ofast -arch arm64 -mmacosx-version-min=10.15" LDFLAGS="-arch arm64 -mmacosx-version-min=10.15" ./configure --host=arm-apple-darwin20 --prefix=$PWD/.libsodium-build
- name: make
@@ -190,13 +146,8 @@ jobs:
pack:
runs-on: ubuntu-latest
needs:
- - build-windows
- - build-linux-glibc
- - build-linux-glibc-arm
- - build-linux-glibc-arm64
- - build-linux-musl
- - build-linux-musl-arm
- - build-linux-musl-arm64
+ - build-windows-msvc
+ - build-others
- build-macos-x64
- build-macos-arm64
container:
@@ -206,7 +157,7 @@ jobs:
DOTNET_SKIP_FIRST_TIME_EXPERIENCE: 1
DOTNET_SYSTEM_GLOBALIZATION_INVARIANT: 1
steps:
- - uses: actions/checkout@v3
+ - uses: actions/checkout@v4
- uses: actions/download-artifact@v3
with:
name: build-win-x64
@@ -215,6 +166,10 @@ jobs:
with:
name: build-win-x86
path: .libsodium-pack/runtimes/win-x86/native/
+ - uses: actions/download-artifact@v3
+ with:
+ name: build-win-arm64
+ path: .libsodium-pack/runtimes/win-arm64/native/
- uses: actions/download-artifact@v3
with:
name: build-linux-x64
@@ -267,7 +222,7 @@ jobs:
DOTNET_SKIP_FIRST_TIME_EXPERIENCE: 1
DOTNET_SYSTEM_GLOBALIZATION_INVARIANT: 1
steps:
- - uses: actions/checkout@v3
+ - uses: actions/checkout@v4
- uses: actions/download-artifact@v3
with:
name: nuget-package
diff --git a/build.zig b/build.zig
index 0033c88b..4b06f316 100644
--- a/build.zig
+++ b/build.zig
@@ -168,12 +168,12 @@ pub fn build(b: *std.Build) !void {
}
const static_lib = b.addStaticLibrary(.{
- .name = "sodium",
+ .name = if (target.result.isMinGW()) "libsodium-static" else "sodium",
.target = target,
.optimize = optimize,
});
const shared_lib = b.addSharedLibrary(.{
- .name = if (target.result.isMinGW()) "sodium_shared" else "sodium",
+ .name = if (target.result.isMinGW()) "libsodium" else "sodium",
.target = target,
.optimize = optimize,
.strip = optimize != .Debug and !target.result.isMinGW(),
@@ -208,129 +208,7 @@ pub fn build(b: *std.Build) !void {
initLibConfig(target, lib);
- const MFlags = enum {
- sse2,
- ssse3,
- sse41,
- avx,
- avx2,
- avx512f,
- aes,
- pclmul,
- rdrnd,
- crypto,
-
- fn f(flag: @This()) Target.Cpu.Feature.Set.Index {
- return switch (flag) {
- .sse2 => @intFromEnum(Target.x86.Feature.sse2),
- .ssse3 => @intFromEnum(Target.x86.Feature.ssse3),
- .sse41 => @intFromEnum(Target.x86.Feature.sse4_1),
- .avx => @intFromEnum(Target.x86.Feature.avx),
- .avx2 => @intFromEnum(Target.x86.Feature.avx2),
- .avx512f => @intFromEnum(Target.x86.Feature.avx512f),
- .aes => @intFromEnum(Target.x86.Feature.aes),
- .pclmul => @intFromEnum(Target.x86.Feature.pclmul),
- .rdrnd => @intFromEnum(Target.x86.Feature.rdrnd),
- .crypto => @intFromEnum(Target.aarch64.Feature.crypto),
- };
- }
- };
-
- const MLib = struct {
- name: []const u8,
- count: usize,
- sources: []const []const u8,
- flags: []const MFlags,
- arches: []const std.Target.Cpu.Arch,
- lib: *Compile = undefined,
- };
-
- var mlibs: [8]MLib = .{
- .{
- .name = "armcrypto",
- .count = 3,
- .sources = &.{
- "crypto_aead/aegis128l/aegis128l_armcrypto.c",
- "crypto_aead/aegis256/aegis256_armcrypto.c",
- "crypto_aead/aes256gcm/armcrypto/aead_aes256gcm_armcrypto.c",
- },
- .flags = &.{.aes},
- .arches = &.{ .aarch64, .aarch64_be, .aarch64_32 },
- },
-
- .{
- .name = "sse2",
- .count = 1,
- .sources = &.{
- "crypto_stream/salsa20/xmm6int/salsa20_xmm6int-sse2.c",
- },
- .flags = &.{.sse2},
- .arches = &.{ .x86_64, .x86 },
- },
- .{
- .name = "ssse3",
- .count = 3,
- .sources = &.{
- "crypto_generichash/blake2b/ref/blake2b-compress-ssse3.c",
- "crypto_pwhash/argon2/argon2-fill-block-ssse3.c",
- "crypto_stream/chacha20/dolbeau/chacha20_dolbeau-ssse3.c",
- },
- .flags = &.{ .sse2, .ssse3 },
- .arches = &.{ .x86_64, .x86 },
- },
- .{
- .name = "sse41",
- .count = 1,
- .sources = &.{
- "crypto_generichash/blake2b/ref/blake2b-compress-sse41.c",
- },
- .flags = &.{ .sse2, .ssse3, .sse41 },
- .arches = &.{ .x86_64, .x86 },
- },
- .{
- .name = "avx2",
- .count = 4,
- .sources = &.{
- "crypto_generichash/blake2b/ref/blake2b-compress-avx2.c",
- "crypto_pwhash/argon2/argon2-fill-block-avx2.c",
- "crypto_stream/chacha20/dolbeau/chacha20_dolbeau-avx2.c",
- "crypto_stream/salsa20/xmm6int/salsa20_xmm6int-avx2.c",
- },
- .flags = &.{ .sse2, .ssse3, .sse41, .avx, .avx2 },
- .arches = &.{.x86_64},
- },
- .{
- .name = "avx512f",
- .count = 1,
- .sources = &.{
- "crypto_pwhash/argon2/argon2-fill-block-avx512f.c",
- },
- .flags = &.{ .sse2, .ssse3, .sse41, .avx, .avx2, .avx512f },
- .arches = &.{.x86_64},
- },
- .{
- .name = "aesni",
- .count = 3,
- .sources = &.{
- "crypto_aead/aegis128l/aegis128l_aesni.c",
- "crypto_aead/aegis256/aegis256_aesni.c",
- "crypto_aead/aes256gcm/aesni/aead_aes256gcm_aesni.c",
- },
- .flags = &.{ .avx, .aes, .pclmul },
- .arches = &.{.x86_64},
- },
- .{
- .name = "mrdrnd",
- .count = 1,
- .sources = &.{
- "randombytes/internal/randombytes_internal_random.c",
- },
- .flags = &.{.rdrnd},
- .arches = &.{ .x86_64, .x86 },
- },
- };
-
- const base_flags = &.{
+ const flags = &.{
"-fvisibility=hidden",
"-fno-strict-aliasing",
"-fno-strict-overflow",
@@ -340,61 +218,15 @@ pub fn build(b: *std.Build) !void {
const allocator = heap.page_allocator;
- // compile CPU-specific library code
- for (&mlibs) |*mlib| {
- var target2 = target;
- for (mlib.arches) |arch| {
- if (target.result.cpu.arch == arch) {
- for (mlib.flags) |flag| {
- target2.query.cpu_features_add.addFeature(flag.f());
- }
- break;
- }
- }
-
- mlib.lib = b.addStaticLibrary(.{
- .name = mlib.name,
- .target = target2,
- .optimize = optimize,
- });
- const elib = mlib.lib;
- initLibConfig(target, elib);
-
- var flags = std.ArrayList([]const u8).init(allocator);
- defer flags.deinit();
- try flags.appendSlice(base_flags);
-
- for (mlib.sources) |path| {
- const full_path = try fmt.allocPrint(allocator, "{s}/{s}", .{ src_path, path });
- elib.addCSourceFiles(.{
- .files = &.{full_path},
- .flags = flags.items,
- });
- }
- lib.linkLibrary(elib);
- }
-
- // compile generic library code
var walker = try src_dir.walk(allocator);
- files: while (try walker.next()) |entry| {
- var flags = std.ArrayList([]const u8).init(allocator);
- defer flags.deinit();
- try flags.appendSlice(base_flags);
-
+ while (try walker.next()) |entry| {
const name = entry.basename;
-
if (mem.endsWith(u8, name, ".c")) {
- for (mlibs) |mlib| {
- for (mlib.sources) |path| {
- if (mem.eql(u8, entry.path, path)) continue :files;
- }
- }
-
const full_path = try fmt.allocPrint(allocator, "{s}/{s}", .{ src_path, entry.path });
lib.addCSourceFiles(.{
.files = &.{full_path},
- .flags = flags.items,
+ .flags = flags,
});
} else if (mem.endsWith(u8, name, ".S")) {
const full_path = try fmt.allocPrint(allocator, "{s}/{s}", .{ src_path, entry.path });
diff --git a/packaging/dotnet-core/libsodium.pkgproj b/packaging/dotnet-core/libsodium.pkgproj
index e50bba80..d11238b8 100644
--- a/packaging/dotnet-core/libsodium.pkgproj
+++ b/packaging/dotnet-core/libsodium.pkgproj
@@ -27,12 +27,13 @@
+
-
-
-
+
+
+