diff --git a/azure-pipelines.yml b/azure-pipelines.yml index ba265ee1..e13253b5 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -7,19 +7,19 @@ pr: none jobs: - job: "wasi" pool: - vmImage: "ubuntu-18.04" + vmImage: "ubuntu-20.04" steps: - script: | - sudo apt-get install build-essential curl cmake + sudo apt-get install build-essential curl cmake llvm lld displayName: Install system packages - script: | curl https://get.wasmer.io -sSfL | sh displayName: Install wasmer - script: | - curl -sL -o - https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-12/wasi-sdk-12.0-linux.tar.gz | tar xz -f - -C /opt/ - sudo mv /opt/wasi-sdk-* /opt/wasi-sdk - sudo ln -s /opt/wasi-sdk/share/*sysroot* /opt/wasi-sysroot - displayName: Install the WASI SDK + curl -sL -o - https://ziglang.org/download/0.8.0/zig-linux-x86_64-0.8.0.tar.xz | tar xJ -f - -C /opt/ + sudo mv /opt/zig-* /opt/zig + env PATH=/opt/zig/bin:/opt/zig:$PATH + displayName: Install the Zig SDK - script: | env WASMER_DIR=${HOME}/.wasmer PATH=${HOME}/.wasmer/bin:/opt/wasi-sdk/bin:${HOME}/.cargo/bin:$PATH dist-build/wasm32-wasi.sh displayName: Compile libsodium diff --git a/configure.ac b/configure.ac index 124366c1..993662e1 100644 --- a/configure.ac +++ b/configure.ac @@ -818,7 +818,9 @@ dnl Checks for functions and headers AC_FUNC_ALLOCA AS_IF([test "x$EMSCRIPTEN" = "x"],[ AC_CHECK_FUNCS([arc4random arc4random_buf]) - AC_CHECK_FUNCS([mmap mlock madvise mprotect]) + AS_IF([test "x$WASI" = "x"],[ + AC_CHECK_FUNCS([mmap mlock madvise mprotect]) + ]) AC_MSG_CHECKING(for getrandom with a standard API) AC_LINK_IFELSE([AC_LANG_PROGRAM([[ @@ -867,7 +869,10 @@ AS_IF([test "x$WASI" = "x"],[ ]) AC_CHECK_FUNCS([posix_memalign nanosleep]) -AC_CHECK_FUNCS([memset_s explicit_bzero explicit_memset]) + +AS_IF([test "x$WASI" = "x"],[ + AC_CHECK_FUNCS([memset_s explicit_bzero explicit_memset]) +]) AC_SUBST([LIBTOOL_EXTRA_FLAGS]) diff --git a/dist-build/wasm32-wasi.sh b/dist-build/wasm32-wasi.sh index 4142a99f..36d39dfa 100755 --- a/dist-build/wasm32-wasi.sh +++ b/dist-build/wasm32-wasi.sh @@ -1,37 +1,20 @@ #! /bin/sh -if [ -z "$WASI_LIBC" ]; then - for path in /opt/wasi-libc /opt/wasi-sysroot; do - if [ -d "$path" ]; then - export WASI_LIBC="$path" - break - fi - done -fi -if [ -z "$WASI_LIBC" ]; then - echo "Set WASI_LIBC to the path to the WASI libc sysroot" >&2 - exit 1 -fi - -export PATH="/usr/local/opt/llvm/bin:$PATH" +export PATH="/opt/zig/bin:/opt/zig:/usr/local/opt/llvm/bin:$PATH" export PREFIX="$(pwd)/libsodium-wasm32-wasi" mkdir -p $PREFIX || exit 1 -export CC="clang" -export CFLAGS="-DED25519_NONDETERMINISTIC=1 --target=wasm32-wasi --sysroot=${WASI_LIBC} -O2" +export CC="zig cc" +export CFLAGS="-DED25519_NONDETERMINISTIC=1 --target=wasm32-wasi -O2" export LDFLAGS="-s -Wl,--stack-first" -export NM="llvm-nm" -export AR="llvm-ar" -export RANLIB="llvm-ranlib" +export AR="zig ar" +export RANLIB="zig ranlib" export STRIP="llvm-strip" make distclean >/dev/null -grep -q -F -- 'wasi' build-aux/config.sub || - sed -i -e 's/-nacl\*)/-nacl*|-wasi)/' build-aux/config.sub - if [ "x$1" = "x--bench" ]; then export BENCHMARKS=1 export CPPFLAGS="-DBENCHMARKS -DITERATIONS=100" @@ -43,10 +26,13 @@ else export LIBSODIUM_ENABLE_MINIMAL_FLAG="" fi -./configure ${LIBSODIUM_ENABLE_MINIMAL_FLAG} \ - --prefix="$PREFIX" --with-sysroot="$WASI_LIBC" \ +if ! ./configure ${LIBSODIUM_ENABLE_MINIMAL_FLAG} \ + --prefix="$PREFIX" \ --host=wasm32-wasi \ - --disable-ssp --disable-shared || exit 1 + --disable-ssp --disable-shared --without-pthreads; then + cat config.log + exit 1 +fi NPROCESSORS=$(getconf NPROCESSORS_ONLN 2>/dev/null || getconf _NPROCESSORS_ONLN 2>/dev/null) PROCESSORS=${NPROCESSORS:-3}