Skip to content

Commit

Permalink
24.0.1
Browse files Browse the repository at this point in the history
  • Loading branch information
pmp-p committed Nov 19, 2024
1 parent c3f4ca8 commit f323b27
Show file tree
Hide file tree
Showing 5 changed files with 205 additions and 51 deletions.
13 changes: 13 additions & 0 deletions lang/gosdk.sh
Original file line number Diff line number Diff line change
@@ -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

64 changes: 33 additions & 31 deletions python-nim-sdk.sh → lang/nimsdk.sh
Original file line number Diff line number Diff line change
@@ -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 <<END
cat > ${NIMSDK}/nim/config.nims <<END
echo " ==== python-nim-sdk ======"
import std/strformat
Expand Down Expand Up @@ -151,7 +152,7 @@ switch("out", fmt"out.{ARCH}")
END

cat > nimsdk_env.sh <<END
cat > nimsdk_env.sh <<END
if [[ -z \${NIMSDK_ENV+z} ]]
then
export NIMSDK_ENV=true
Expand Down Expand Up @@ -190,5 +191,6 @@ else
fi
END

popd
popd

popd
20 changes: 20 additions & 0 deletions lang/rustsdk.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#!/bin/bash

export ${SDKROOT:-/tmp/sdk}

pushd ${SDKROOT}
. ${CONFIG:-config}
. wasm32-bi-emscripten-shell.sh
popd

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs > 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


59 changes: 43 additions & 16 deletions python-wasi-sdk.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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
Expand Down
100 changes: 96 additions & 4 deletions wasisdk/bin/wasi
Original file line number Diff line number Diff line change
@@ -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=
Expand All @@ -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"
Expand Down Expand Up @@ -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)

0 comments on commit f323b27

Please sign in to comment.