33
44if [[ -z ${WASISDK+z} ]]
55then
6+ pushd ${SDKROOT:-/ opt/ python-wasm-sdk}
67 . ${CONFIG:- config}
78
89 export WASISDK=" ${SDKROOT} /wasisdk"
910 export WASI_SDK_PREFIX=" ${WASISDK} /upstream"
11+ export WASI_SYSROOT=" ${WASI_SDK_PREFIX} /share/wasi-sysroot"
1012
1113
1214
1315 if [ -d ${WASI_SDK_PREFIX} ]
1416 then
1517 echo "
1618 * using wasisdk from $( realpath wasisdk/upstream)
17- with sys python $SYS_PYTHON
19+ with sys python $SYS_PYTHON and host python $HPY
20+
1821" 1>&2
1922 else
2023 pushd wasisdk
@@ -31,28 +34,116 @@ then
3134 ln ${SDKROOT} /wasisdk/bin/wasi ${SDKROOT} /wasisdk/bin/wasi-c++
3235 popd
3336
37+ $HPIP install cmake wasmtime
38+
39+ # /opt/python-wasm-sdk/devices/x86_64/usr/lib/python3.11/site-packages/cmake/data/share/cmake-3.27/Modules/Platform/
40+ cp -v wasisdk/share/cmake/WASI.cmake ${SDKROOT} /devices/$( arch) /usr/lib/python${PYBUILD} /site-packages/cmake/data/share/cmake-* /Modules/Platform/
41+
42+ cat > ${SDKROOT} /devices/$( arch) /usr/lib/python${PYBUILD} /site-packages/cmake/data/share/cmake-* /Modules/Platform/WASI.cmake << END
43+ # Cmake toolchain description file for the Makefile
44+
45+ set(CMAKE_TOOLCHAIN_FILE ${WASISDK} /share/cmake/wasi-sdk.cmake)
46+
47+ # This is arbitrary, AFAIK, for now.
48+ cmake_minimum_required(VERSION 3.5.0)
49+ set(CMAKE_SYSTEM_NAME WASI)
50+ set(CMAKE_SYSTEM_VERSION 1)
51+ set(CMAKE_SYSTEM_PROCESSOR wasm32)
52+ set(triple wasm32-wasi)
53+
54+ set(WASI True)
55+ option(BUILD_SHARED_LIBS "Build using shared libraries" OFF)
56+ set_property(GLOBAL PROPERTY CXX_EXCEPTIONS OFF)
57+ set_property(GLOBAL PROPERTY CXX_RTTI OFF)
58+ set(CMAKE_POSITION_INDEPENDENT_CODE TRUE)
59+ set(COMPILER_SUPPORTS_FEXCEPTIONS FALSE)
60+ #add_compile_options(-fpic)
61+ #add_compile_options(-fno-exceptions)
62+
63+
64+ # Make HandleLLVMOptions.cmake happy.
65+ # TODO(sbc): We should probably fix llvm or libcxxabi instead.
66+ # See: https://reviews.llvm.org/D33753
67+ # set(UNIX 1)
68+
69+ set(CMAKE_CROSSCOMPILING 1)
70+
71+
72+ if(WIN32)
73+ set(WASI_HOST_EXE_SUFFIX ".exe")
74+ else()
75+ set(WASI_HOST_EXE_SUFFIX "")
76+ endif()
77+
78+ set(CMAKE_C_COMPILER ${WASISDK} /bin/wasi-c)
79+ set(CMAKE_CXX_COMPILER ${WASISDK} /bin/wasi-c++)
80+ set(CMAKE_ASM_COMPILER ${WASI_SDK_PREFIX} /bin/clang\$ {WASI_HOST_EXE_SUFFIX})
81+ set(CMAKE_AR ${WASI_SDK_PREFIX} /bin/llvm-ar\$ {WASI_HOST_EXE_SUFFIX})
82+ set(CMAKE_RANLIB ${WASI_SDK_PREFIX} /bin/llvm-ranlib\$ {WASI_HOST_EXE_SUFFIX})
83+ set(CMAKE_C_COMPILER_TARGET \$ {triple})
84+ set(CMAKE_CXX_COMPILER_TARGET \$ {triple})
85+ set(CMAKE_ASM_COMPILER_TARGET \$ {triple})
86+
87+ # Don't look in the sysroot for executables to run during the build
88+ set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
89+ # Only look in the sysroot (not in the host paths) for the rest
90+ set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
91+ set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
92+ set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
93+
94+ END
95+
96+ pushd ${WASI_SYSROOT}
97+ wget " https://github.com/vmware-labs/webassembly-language-runtimes/releases/download/libs%2Flibpng%2F1.6.39%2B20230629-ccb4cb0/libpng-1.6.39-wasi-sdk-20.0.tar.gz" -O-| tar xvfz -
98+ wget " https://github.com/vmware-labs/webassembly-language-runtimes/releases/download/libs%2Fzlib%2F1.2.13%2B20230623-2993864/libz-1.2.13-wasi-sdk-20.0.tar.gz" -O-| tar xvfz -
99+ popd
100+
101+
34102 fi
35103
104+ popd
105+
36106 export PATH=" ${WASISDK} /bin:${WASI_SDK_PREFIX} /bin:$PATH "
37107
38- export WASI_SYSROOT =" ${WASI_SDK_PREFIX} /share /wasi-sysroot "
108+ export PREFIX =" ${SDKROOT} /devices /wasi/usr "
39109
40- export CC=" ${WASISDK} /bin/wasi-c"
41- export CPP=" ${WASISDK} /bin/wasi-cpp"
42- export CXX=" ${WASISDK} /bin/wasi++"
110+ # instruct pkg-config to use wasi target root
111+ export PKG_CONFIG_PATH=" ${PREFIX} /lib/pkgconfig:${WASI_SYSROOT} /lib/wasm32-wasi/pkgconfig"
112+
113+ # for thirparty prebuilts .pc in sdk
114+ export PKG_CONFIG_LIBDIR=" ${WASI_SYSROOT} /lib/wasm32-wasi/pkgconfig:${WASI_SYSROOT} /share/pkgconfig"
115+ export PKG_CONFIG_SYSROOT_DIR=" ${WASI_SYSROOT} "
116+
117+
118+ export PS1=" [PyDK:wasi] \w $ "
43119
44120
45121 export LDSHARED=" ${WASI_SDK_PREFIX} /bin/wasm-ld"
46122 export AR=" ${WASI_SDK_PREFIX} /bin/llvm-ar"
47123 export RANLIB=" ${WASI_SDK_PREFIX} /bin/ranlib"
48124
125+ WASI_CFG=" --sysroot=${WASI_SDK_PREFIX} /share/wasi-sysroot -I${WASISDK} /hotfix"
126+ WASI_DEF=" -D_WASI_EMULATED_MMAN -D_WASI_EMULATED_SIGNAL -D_WASI_EMULATED_PROCESS_CLOCKS -D_WASI_EMULATED_GETPID"
49127
50- # instruct pkg-config to use wasi target root
51- export PKG_CONFIG_PATH=" ${SDKROOT} /devices/wasi/usr/lib/pkgconfig"
128+ # wasi assembly
129+ WASI_ALL=" ${WASI_CFG} ${WASI_DEF} -fPIC -fno-rtti -fno-exceptions"
130+
131+
132+ WASI_ALL=" $WASI_ALL -Wno-unused-but-set-variable -Wno-unused-command-line-argument -Wno-unsupported-floating-point-opt"
133+
134+ # wasi linking
135+ WASI_LNK=" -lwasi-emulated-getpid -lwasi-emulated-mman -lwasi-emulated-signal -lwasi-emulated-process-clocks -lc++experimental -fno-exceptions"
136+
137+ # export CC="${WASISDK}/bin/wasi-c"
138+ # export CPP="${WASISDK}/bin/wasi-cpp"
139+ # export CXX="${WASISDK}/bin/wasi++"
140+
141+ CXX_lIBS=" -lc++ -lc++abi -lc++experimental"
142+
143+ export CC=" ${WASI_SDK_PREFIX} /bin/clang ${WASI_ALL} "
144+ export CXX=" ${WASI_SDK_PREFIX} /bin/clang++ ${WASI_ALL} ${CXX_lIBS} "
145+ export CPP=" ${WASI_SDK_PREFIX} /bin/clang-cpp ${WASI_CFG} ${WASI_DEF} "
52146
53- # for thirparty prebuilts .pc in sdk
54- export PKG_CONFIG_LIBDIR=" ${WASI_SYSROOT} /lib/pkgconfig:${WASI_SYSROOT} /share/pkgconfig"
55- export PKG_CONFIG_SYSROOT_DIR=" ${WASI_SYSROOT} "
56147
57148
58149
0 commit comments