From 0d2f6d2a7b8f13d753717b3c0a7983fd4beca579 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Sun, 27 Nov 2022 22:12:05 +0100 Subject: [PATCH 1/4] test/default/run.sh compat with GNU find --- test/default/run.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/default/run.sh b/test/default/run.sh index 9e792b50..91e43778 100755 --- a/test/default/run.sh +++ b/test/default/run.sh @@ -1,6 +1,6 @@ #! /bin/sh -find . -type f -perm +100 -print | grep -v run.sh | sort | while read -r x; do +find . -type f -perm -100 -print | grep -v run.sh | sort | while read -r x; do echo "[$x]" if ! "$x"; then echo "*** [$x] FAILED" >&2 From 782b5d49fcea06d1fcd01e06ea15b4e6b4ca099b Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Sun, 27 Nov 2022 22:42:04 +0100 Subject: [PATCH 2/4] build.zig: require at least SSE4.1 when targeting x86_64 --- build.zig | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/build.zig b/build.zig index a70059b8..859f3007 100644 --- a/build.zig +++ b/build.zig @@ -5,6 +5,7 @@ const fs = std.fs; const heap = std.heap; const mem = std.mem; const LibExeObjStep = std.build.LibExeObjStep; +const Target = std.Target; pub fn build(b: *std.build.Builder) !void { const src_path = "src/libsodium"; @@ -135,12 +136,13 @@ pub fn build(b: *std.build.Builder) !void { lib.defineCMacro("HAVE_EMMINTRIN_H", "1"); lib.defineCMacro("HAVE_PMMINTRIN_H", "1"); lib.defineCMacro("HAVE_SMMINTRIN_H", "1"); + lib.defineCMacro("HAVE_TMMINTRIN_H", "1"); lib.defineCMacro("HAVE_WMMINTRIN_H", "1"); }, .aarch64, .aarch64_be => { const cpu_features = target.getCpuFeatures(); - const has_neon = cpu_features.isEnabled(@enumToInt(std.Target.aarch64.Feature.neon)); - const has_crypto = cpu_features.isEnabled(@enumToInt(std.Target.aarch64.Feature.crypto)); + const has_neon = cpu_features.isEnabled(@enumToInt(Target.aarch64.Feature.neon)); + const has_crypto = cpu_features.isEnabled(@enumToInt(Target.aarch64.Feature.crypto)); if (has_neon and has_crypto) { lib.defineCMacro("HAVE_ARMCRYPTO", "1"); } @@ -158,6 +160,15 @@ pub fn build(b: *std.build.Builder) !void { else => {}, } + switch (target.getCpuArch()) { + .x86_64 => { + lib.target.cpu_features_add.addFeature(@enumToInt(Target.x86.Feature.sse4_1)); + lib.target.cpu_features_add.addFeature(@enumToInt(Target.x86.Feature.aes)); + lib.target.cpu_features_add.addFeature(@enumToInt(Target.x86.Feature.pclmul)); + }, + else => {}, + } + var allocator = heap.page_allocator; var walker = try src_dir.walk(allocator); while (try walker.next()) |entry| { From 565bea3602881691fc1d0cadba4f0a1c2aa8ce0f Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Sun, 27 Nov 2022 21:58:43 +0100 Subject: [PATCH 3/4] Remove unneeded path --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 98b45254..7c777512 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -50,7 +50,7 @@ jobs: - name: Compilation with zig run: | - export PATH=/opt/zig/bin:/opt/zig:$PATH + export PATH=/opt/zig:$PATH zig build zig build -Dtarget=x86_64-linux zig build -Dtarget=aarch64-linux From 5bb26cbb9487f870a2ea8352d1b431d7f0921c88 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Sun, 27 Nov 2022 21:58:50 +0100 Subject: [PATCH 4/4] Compile .NET Linux targets with Zig --- .github/workflows/dotnet-core.yml | 205 +++++++++++++++--------------- build.zig | 2 - test/default/Makefile.in | 1 + 3 files changed, 105 insertions(+), 103 deletions(-) diff --git a/.github/workflows/dotnet-core.yml b/.github/workflows/dotnet-core.yml index 0f45beac..7afd9f62 100644 --- a/.github/workflows/dotnet-core.yml +++ b/.github/workflows/dotnet-core.yml @@ -26,146 +26,144 @@ jobs: build-linux-glibc: runs-on: ubuntu-latest - container: - image: ubuntu:16.04 steps: - - name: Set up build environment - run: | - apt-get update && apt-get install -y build-essential + - name: Install Zig + uses: goto-bus-stop/setup-zig@869a4299cf8ac7db4ebffaec36ad82a682f88acb + with: + version: master - uses: actions/checkout@v3 - - name: configure - run: ./configure --disable-dependency-tracking --prefix=$PWD/.libsodium-build - - name: make - run: make - - name: make check - run: make check - - name: make install - run: make install - - name: strip - run: strip --strip-all .libsodium-build/lib/libsodium.so + - name: build + run: | + zig build -Drelease-fast -Dtarget=x86_64-linux-gnu.2.17 + - name: tests + run: cd zig-out/bin && ./run.sh - uses: actions/upload-artifact@v3 with: name: build-linux-x64 - path: .libsodium-build/lib/libsodium.so - - build-linux-glibc-arm64: - runs-on: ubuntu-latest - container: - image: ubuntu:16.04 - options: --privileged - steps: - - name: Set up build environment - run: | - export DEBIAN_FRONTEND=noninteractive - apt-get update && apt-get install -y build-essential qemu binfmt-support qemu-user-static qemu-system-arm gcc-aarch64-linux-gnu libc6-arm64-cross - dpkg --add-architecture arm64 - update-binfmts --enable qemu-aarch64 - update-binfmts --display - ln -s /usr/aarch64-linux-gnu/lib/ld-linux-aarch64.so.* /lib - - uses: actions/checkout@v3 - - name: configure - run: ./configure --disable-dependency-tracking --prefix=$PWD/.libsodium-build --host=aarch64-linux-gnu - - name: make - run: make -j $(nproc) - - name: make check - run: | - env LD_LIBRARY_PATH=/usr/aarch64-linux-gnu/lib make check - - name: make install - run: make install - - name: strip - run: aarch64-linux-gnu-strip --strip-all .libsodium-build/lib/libsodium.so - - uses: actions/upload-artifact@v3 - with: - name: build-linux-arm64 - path: .libsodium-build/lib/libsodium.so + path: zig-out/lib/libsodium.so build-linux-glibc-arm: runs-on: ubuntu-latest - container: - image: ubuntu:16.04 - options: --privileged steps: - - name: Set up build environment + - name: Install Zig + uses: goto-bus-stop/setup-zig@869a4299cf8ac7db4ebffaec36ad82a682f88acb + with: + version: master + - name: Fix ARM support + run: | + curl -L https://raw.githubusercontent.com/ziglang/zig/master/lib/libc/glibc/sysdeps/arm/arm-features.h | sudo tee /opt/hostedtoolcache/zig/zig-linux-x86_64-*/x64/lib/libc/glibc/sysdeps/arm/sysdep.h >/dev/null + - name: Set up emulation environment run: | export DEBIAN_FRONTEND=noninteractive - apt-get update && apt-get install -y build-essential qemu binfmt-support qemu-user-static qemu-system-arm gcc-arm-linux-gnueabihf libc6-armhf-cross - dpkg --add-architecture armhf - update-binfmts --enable qemu-arm - update-binfmts --display - ln -s /usr/arm-linux-gnueabihf/lib/ld-linux-armhf.so.* /lib + 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 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: configure - run: ./configure --disable-dependency-tracking --prefix=$PWD/.libsodium-build --host=arm-linux-gnueabihf - - name: make - run: make -j $(nproc) - - name: make check + - name: build run: | - env LD_LIBRARY_PATH=/usr/arm-linux-gnueabihf/lib make check - - name: make install - run: make install - - name: strip - run: arm-linux-gnueabihf-strip --strip-all .libsodium-build/lib/libsodium.so + zig build -Drelease-fast -Dtarget=arm-linux-gnueabihf.2.23 + - name: tests + run: | + cd zig-out/bin && env LD_LIBRARY_PATH=/usr/arm-linux-gnueabihf/lib ./run.sh - uses: actions/upload-artifact@v3 with: name: build-linux-arm - path: .libsodium-build/lib/libsodium.so + path: zig-out/lib/libsodium.so + + build-linux-glibc-arm64: + runs-on: ubuntu-latest + steps: + - name: Install Zig + uses: goto-bus-stop/setup-zig@869a4299cf8ac7db4ebffaec36ad82a682f88acb + with: + version: master + - name: Set up emulation environment + 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 -Drelease-fast -Dtarget=aarch64-linux-gnu.2.23 + - name: tests + run: | + cd zig-out/bin && env LD_LIBRARY_PATH=/usr/aarch64-linux-gnu/lib ./run.sh + - uses: actions/upload-artifact@v3 + with: + name: build-linux-arm64 + path: zig-out/lib/libsodium.so build-linux-musl: runs-on: ubuntu-latest container: - image: alpine:latest + image: alpine:3.13 steps: - name: Set up build environment run: | apk update - apk add alpine-sdk ca-certificates + apk add alpine-sdk ca-certificates xz + - name: Install Zig + uses: goto-bus-stop/setup-zig@869a4299cf8ac7db4ebffaec36ad82a682f88acb + with: + version: master - uses: actions/checkout@v3 - - name: configure - run: ./configure --disable-dependency-tracking --prefix=$PWD/.libsodium-build - - name: make - run: make - - name: make check - run: make check - - name: make install - run: make install - - name: strip - run: strip --strip-all .libsodium-build/lib/libsodium.so + - name: build + run: | + zig build -Drelease-fast -Dtarget=x86_64-linux-musl + - name: tests + run: | + cd zig-out/bin && ./run.sh - uses: actions/upload-artifact@v3 with: name: build-linux-musl-x64 - path: .libsodium-build/lib/libsodium.so + path: zig-out/lib/libsodium.so + + build-linux-musl-arm: + runs-on: ubuntu-latest + steps: + - name: Install Zig + uses: goto-bus-stop/setup-zig@869a4299cf8ac7db4ebffaec36ad82a682f88acb + with: + version: master + - uses: actions/checkout@v3 + - name: build + run: | + zig build -Drelease-fast -Dtarget=arm-linux-musleabihf + - uses: actions/upload-artifact@v3 + with: + name: build-linux-musl-arm + path: zig-out/lib/libsodium.so build-linux-musl-arm64: runs-on: ubuntu-latest - container: - image: alpine:latest steps: - - name: Set up build environment - run: | - apk update - apk add alpine-sdk ca-certificates + - name: Install Zig + uses: goto-bus-stop/setup-zig@869a4299cf8ac7db4ebffaec36ad82a682f88acb + with: + version: master - uses: actions/checkout@v3 - - name: configure - run: ./configure --disable-dependency-tracking --prefix=$PWD/.libsodium-build --host=aarch64-linux-gnu - - name: make - run: make - - name: make check - run: make check - - name: make install - run: make install - - name: strip - run: strip --strip-all .libsodium-build/lib/libsodium.so + - name: build + run: | + zig build -Drelease-fast -Dtarget=aarch64-linux-musl - uses: actions/upload-artifact@v3 with: name: build-linux-musl-arm64 - path: .libsodium-build/lib/libsodium.so + path: zig-out/lib/libsodium.so build-macos-x64: - runs-on: macos-11 + runs-on: macos-latest steps: - uses: actions/checkout@v3 - name: configure - run: env CFLAGS="-Ofast -arch x86_64 -mmacosx-version-min=10.10" LDFLAGS="-arch x86_64 -mmacosx-version-min=10.10" ./configure --host=arm-apple-darwin20 --prefix=$PWD/.libsodium-build + run: env CFLAGS="-Ofast -arch x86_64 -mmacosx-version-min=10.13" LDFLAGS="-arch x86_64 -mmacosx-version-min=10.13" ./configure --host=arm-apple-darwin20 --prefix=$PWD/.libsodium-build - name: make run: make - name: make check @@ -178,11 +176,11 @@ jobs: path: .libsodium-build/lib/libsodium.dylib build-macos-arm64: - runs-on: macos-11 + runs-on: macos-latest steps: - uses: actions/checkout@v3 - name: configure - run: env CFLAGS="-Ofast -arch arm64 -mmacosx-version-min=10.10" LDFLAGS="-arch arm64 -mmacosx-version-min=10.10" ./configure --host=arm-apple-darwin20 --prefix=$PWD/.libsodium-build + run: env CFLAGS="-Ofast -arch arm64 -mmacosx-version-min=10.13" LDFLAGS="-arch arm64 -mmacosx-version-min=10.13" ./configure --host=arm-apple-darwin20 --prefix=$PWD/.libsodium-build - name: make run: make - name: make install @@ -200,6 +198,7 @@ jobs: - build-linux-glibc-arm - build-linux-glibc-arm64 - build-linux-musl + - build-linux-musl-arm - build-linux-musl-arm64 - build-macos-x64 - build-macos-arm64 @@ -235,6 +234,10 @@ jobs: with: name: build-linux-musl-x64 path: .libsodium-pack/runtimes/linux-musl-x64/native/ + - uses: actions/download-artifact@v3 + with: + name: build-linux-musl-arm + path: .libsodium-pack/runtimes/linux-musl-arm/native/ - uses: actions/download-artifact@v3 with: name: build-linux-musl-arm64 diff --git a/build.zig b/build.zig index 859f3007..79bdd2cf 100644 --- a/build.zig +++ b/build.zig @@ -63,9 +63,7 @@ pub fn build(b: *std.build.Builder) !void { lib.defineCMacro("HAVE_CATCHABLE_ABRT", "1"); lib.defineCMacro("HAVE_CATCHABLE_SEGV", "1"); - lib.defineCMacro("HAVE_GETENTROPY", "1"); lib.defineCMacro("HAVE_GETPID", "1"); - lib.defineCMacro("HAVE_GETRANDOM", "1"); lib.defineCMacro("HAVE_INLINE_ASM", "1"); lib.defineCMacro("HAVE_MADVISE", "1"); lib.defineCMacro("HAVE_MLOCK", "1"); diff --git a/test/default/Makefile.in b/test/default/Makefile.in index a3be3f37..c86f35dd 100644 --- a/test/default/Makefile.in +++ b/test/default/Makefile.in @@ -901,6 +901,7 @@ top_srcdir = @top_srcdir@ valgrind_enabled_tools = @valgrind_enabled_tools@ valgrind_tools = @valgrind_tools@ EXTRA_DIST = \ + run.sh \ cmptest.h \ wasi-test-wrapper.sh \ wintest.bat \