From f323b27b7bde3e03c461c3cabf7f0ea591f0746d Mon Sep 17 00:00:00 2001 From: pmp-p Date: Tue, 19 Nov 2024 10:00:48 +0100 Subject: [PATCH] 24.0.1 --- lang/gosdk.sh | 13 ++++ python-nim-sdk.sh => lang/nimsdk.sh | 64 +++++++++--------- lang/rustsdk.sh | 20 ++++++ python-wasi-sdk.sh | 59 +++++++++++----- wasisdk/bin/wasi | 100 ++++++++++++++++++++++++++-- 5 files changed, 205 insertions(+), 51 deletions(-) create mode 100755 lang/gosdk.sh rename python-nim-sdk.sh => lang/nimsdk.sh (81%) create mode 100755 lang/rustsdk.sh diff --git a/lang/gosdk.sh b/lang/gosdk.sh new file mode 100755 index 0000000..35262f4 --- /dev/null +++ b/lang/gosdk.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +export ${SDKROOT:-/tmp/sdk} + +pushd ${SDKROOT} + . ${CONFIG:-config} + + GOARCHIVE=go1.23.2.linux-amd64.tar.gz + wget -c https://go.dev/dl/${GOARCHIVE} + tar xvfz ${GOARCHIVE} && rm ${GOARCHIVE} + ./go/bin/go telemetry off +popd + diff --git a/python-nim-sdk.sh b/lang/nimsdk.sh similarity index 81% rename from python-nim-sdk.sh rename to lang/nimsdk.sh index 0c9e3b8..815e3c8 100755 --- a/python-nim-sdk.sh +++ b/lang/nimsdk.sh @@ -1,55 +1,56 @@ #!/bin/bash -SDKROOT=${SDKROOT:-/opt/python-wasm-sdk} -CONFIG=$(realpath ${CONFIG:-${SDKROOT}/config}) -. $CONFIG +export ${SDKROOT:-/tmp/sdk} -if [ -d ${NIMSDK} ] -then - echo " +pushd ${SDKROOT} + . ${CONFIG:-config} + if [ -d ${NIMSDK} ] + then + echo " - will not overwrite existing working directory - NIMSDK=${NIMSDK} + will not overwrite existing working directory + NIMSDK=${NIMSDK} -" -else - mkdir ${NIMSDK} -fi + " + else + mkdir ${NIMSDK} + fi -pushd ${NIMSDK} - if [ -d $NIM_VERSION/bin ] - then - echo " + + pushd ${NIMSDK} + if [ -d $NIM_VERSION/bin ] + then + echo " will not overwrite existing Nim build found in ${NIMSDK}/$NIM_VERSION/bin " - else - if echo $NIM_URL|grep -q nim-lang\.org - then - echo ERROR download/install release from $NIM_URL else - $GITGET devel $NIM_URL $NIM_VERSION - pushd $NIM_VERSION - chmod +x *sh - CC=clang CXX=clang++ ./build_all.sh - rm -rf build csources_v2 nimcache - popd + if echo $NIM_URL|grep -q nim-lang\.org + then + echo ERROR download/install release from $NIM_URL + else + $GITGET devel $NIM_URL $NIM_VERSION + pushd $NIM_VERSION + chmod +x *sh + CC=clang CXX=clang++ ./build_all.sh + rm -rf build csources_v2 nimcache + popd + fi fi - fi # --usenimcache - mkdir -p ${NIMSDK}/nim + mkdir -p ${NIMSDK}/nim - cat > ${NIMSDK}/nim/config.nims < ${NIMSDK}/nim/config.nims < nimsdk_env.sh < nimsdk_env.sh < getrust +bash ./getrust -y -t wasm32-unknown-unknown --default-toolchain nightly + +. $SDKROOT/rust/env + + +rustup target add wasm32-unknown-unknown +rustup target add wasm32-unknown-emscripten +rustup target add wasm32-wasip1 + + diff --git a/python-wasi-sdk.sh b/python-wasi-sdk.sh index a6ff6f6..c6dc80d 100755 --- a/python-wasi-sdk.sh +++ b/python-wasi-sdk.sh @@ -4,15 +4,38 @@ reset # TODO: check how dbg tools work with default settings # https://developer.chrome.com/blog/wasm-debugging-2020/ +if command -v python3 +then + SYS_PYTHON=$(command -v python3) +else + SYS_PYTHON=$(command -v python) +fi -. /etc/lsb-release -DISTRIB="${DISTRIB_ID}-${DISTRIB_RELEASE}" +DISTRIB_RELEASE="any" -SDKROOT=${SDKROOT:-/opt/python-wasm-sdk} +# is it linux enough ? +if [ -f /etc/lsb-release ] +then + . /etc/lsb-release + export PLATFORM=linux +else + # or not + export DISTRIB_ID=$($SYS_PYTHON -E -c "print(__import__('sys').platform)") + echo no /etc/lsb-release found, please identify platform '$DISTRIB_ID' + DISTRIB="${DISTRIB_ID}-${DISTRIB_RELEASE}" + exit 1 +fi -export SDKROOT +export DISTRIB="${DISTRIB_ID}-${DISTRIB_RELEASE}" + +export SDKROOT=${SDKROOT:-/tmp/sdk} + +# default is behave like a CI +export CI={CI:-true} + +# maybe have ci flavours later export CIVER=${CIVER:-$DISTRIB} -export CI=true + if echo $0|grep -q python-wasm-sdk\.sh then @@ -24,19 +47,20 @@ else emsdk=false BUILDS=3.13 wasisdk=true + gosdk=true + rustsdk=true nimsdk=true fi -if $wasisdk -then - echo " * adding wasi-sdk to wasm-sdk" -fi - -if $nimsdk -then - echo " * adding nim-sdk to wasm-sdk" -fi +for lang in wasisdk gosdk rustsdk nimsdk +do + if ${!lang:-false} + then + echo " * adding ${lang} to wasm-sdk" + fi +done +read if [ -d ${SDKROOT} ] then @@ -148,8 +172,11 @@ END then echo "keeping installed wasmtime and wasi binaries" else - #wget https://github.com/bytecodealliance/wasmtime/releases/download/v22.0.0/wasmtime-v22.0.0-x86_64-linux.tar.xz \ - wget https://github.com/bytecodealliance/wasmtime/releases/download/v23.0.2/wasmtime-v23.0.2-$(arch)-linux.tar.xz \ + #wget https://github.com/bytecodealliance/wasmtime/releases/download/v22.0.0/wasmtime-v22.0.0-x86_64-linux.tar.xz + +# TODO: window only has a zip archive, better use wasmtime-py instead. + + wget https://github.com/bytecodealliance/wasmtime/releases/download/v26.0.1/wasmtime-v26.0.1-$(arch)-$(PLATFORM).tar.xz \ -O-|xzcat|tar xfv - mv -vf $(find wasmtime*|grep /wasmtime$) ${SDKROOT}/devices/$(arch)/usr/bin fi diff --git a/wasisdk/bin/wasi b/wasisdk/bin/wasi index f978774..54ac800 100755 --- a/wasisdk/bin/wasi +++ b/wasisdk/bin/wasi @@ -1,8 +1,9 @@ -#!/bin/bash +#!/usr/bin/python3 # https://stackoverflow.com/questions/20530105/how-to-specify-a-custom-stdlib-directory-for-llvm # https://stackoverflow.com/questions/60712261/how-to-prevent-osx-gcc-to-always-search-usr-local-include +""" if ${CONFIGURE:-false} then CXX_LIBS= @@ -11,15 +12,13 @@ then CXX=clang++ CC=clang else - WASI_CFG="--sysroot=${WASI_SDK_PREFIX}/share/wasi-sysroot -iwithsysroot /include/c++/v1" - # -I${WASISDK}/hotfix using upstream/share/wasi-sysroot/include/wasm32-wasi instead if echo "${@}"|grep -q \\-fno-builtin then WASI_PATCH="" else - WASI_PATCH="-include ${WASISDK}/hotfix/patch.h -isystem ${WASISDK}/hotfix" + fi WASI_DEF="-D_GNU_SOURCE -D_WASI_EMULATED_MMAN -D_WASI_EMULATED_SIGNAL -D_WASI_EMULATED_PROCESS_CLOCKS -D_WASI_EMULATED_GETPID" @@ -56,4 +55,97 @@ else $CC "${@}" ${WASI_LNK} -Wno-unused-function fi fi +""" + + +import sys +import os +from pathlib import Path + + +def dbg(*argv, **kw): + kw.setdefault("file", sys.stderr) + return print(*argv, **kw) + +SDKROOT = Path(os.environ.get("SDKROOT", "/opt/python-wasm-sdk")) +WASISDK = Path(os.environ.get("WASISDK", "/opt/python-wasm-sdk/emsdk")) +WASI_SDK_PREFIX=Path(os.environ.get("WASI_SDK_PREFIX", "/opt/python-wasm-sdk/wasisdk/upstream")) +PREFIX = Path(os.environ.get("PREFIX", "/opt/python-wasm-sdk/devices/wasisdk/usr")) + +#dbg(sys.argv) + +exe = sys.argv.pop(0) + + +WASI_CFG="--sysroot=${WASI_SDK_PREFIX}/share/wasi-sysroot -iwithsysroot /include/c++/v1" +WASI_PATCH=f"-include {WASISDK}/hotfix/patch.h -isystem {WASISDK}/hotfix" +WASI_DEF= "-D_GNU_SOURCE -D_WASI_EMULATED_MMAN -D_WASI_EMULATED_SIGNAL -D_WASI_EMULATED_PROCESS_CLOCKS -D_WASI_EMULATED_GETPID" + +WASI_CFLAGS = os.getenv("WASI_CFLAGS","") + +if WASI_CFLAGS: + WASI_DEF=f"{WASI_DEF} {WASI_CFLAGS}" + + +if exe.endswith('c++'): + mode = "++" + args= ["clang++"] + fixargs = True +elif exe.endswith('cpp'): + mode = "-cpp" + args = ["clang-cpp"] + args.extend(WASI_DEF.split(' ')) + args.extend(sys.argv) + fixargs = False +else: + mode = "" + args = ["clang"] + fixargs = True + + +if fixargs: + for arg in sys.argv: + + if arg in ("-v", "--version"): + dbg(*sys.argv) + args=[exe] + args.extend(sys.argv) + break + + if arg == '-Wl,--start-group': + continue + if arg == '-Wl,--end-group': + continue + + if arg == '-fno-builtin': + WASI_PATCH="" + + args.append(arg) + else: + + if 0: + dbg("="*80) + dbg(*sys.argv) + dbg("="*80) + dbg(*args) + dbg("_"*80) + + WASI_CFG="--sysroot=${WASI_SDK_PREFIX}/share/wasi-sysroot -iwithsysroot /include/c++/v1" + + if WASI_PATCH: + args.extend(WASI_PATCH.split(' ')) + args.extend("-lwasi-emulated-getpid -lwasi-emulated-mman -lwasi-emulated-signal -lwasi-emulated-process-clocks".split(' ')) + args.extend(WASI_DEF.split(' ')) + + args.extend( "-fPIC -fno-rtti -fno-exceptions -z stack-size=131072".split(' ') ) + args.extend("-Wno-unknown-pragmas -Wno-unused-but-set-variable -Wno-unused-command-line-argument -Wno-unsupported-floating-point-opt -Wno-nullability-completeness".split(' ')) + # pg + args.append("-Wno-missing-prototypes") + # hotpatch + args.append("-Wno-unused-function") + + +exe = f"{WASI_SDK_PREFIX}/bin/clang{mode}" +#dbg(exe,len(args),*args) +os.execv(exe, args)