3
3
4
4
if [[ -z ${WASISDK+z} ]]
5
5
then
6
+ pushd ${SDKROOT:-/ opt/ python-wasm-sdk}
6
7
. ${CONFIG:- config}
7
8
8
9
export WASISDK=" ${SDKROOT} /wasisdk"
9
10
export WASI_SDK_PREFIX=" ${WASISDK} /upstream"
11
+ export WASI_SYSROOT=" ${WASI_SDK_PREFIX} /share/wasi-sysroot"
10
12
11
13
12
14
13
15
if [ -d ${WASI_SDK_PREFIX} ]
14
16
then
15
17
echo "
16
18
* using wasisdk from $( realpath wasisdk/upstream)
17
- with sys python $SYS_PYTHON
19
+ with sys python $SYS_PYTHON and host python $HPY
20
+
18
21
" 1>&2
19
22
else
20
23
pushd wasisdk
@@ -31,28 +34,116 @@ then
31
34
ln ${SDKROOT} /wasisdk/bin/wasi ${SDKROOT} /wasisdk/bin/wasi-c++
32
35
popd
33
36
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
+
34
102
fi
35
103
104
+ popd
105
+
36
106
export PATH=" ${WASISDK} /bin:${WASI_SDK_PREFIX} /bin:$PATH "
37
107
38
- export WASI_SYSROOT =" ${WASI_SDK_PREFIX} /share /wasi-sysroot "
108
+ export PREFIX =" ${SDKROOT} /devices /wasi/usr "
39
109
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 $ "
43
119
44
120
45
121
export LDSHARED=" ${WASI_SDK_PREFIX} /bin/wasm-ld"
46
122
export AR=" ${WASI_SDK_PREFIX} /bin/llvm-ar"
47
123
export RANLIB=" ${WASI_SDK_PREFIX} /bin/ranlib"
48
124
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"
49
127
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} "
52
146
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} "
56
147
57
148
58
149
0 commit comments