-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathpackage.sh
More file actions
149 lines (122 loc) · 4.26 KB
/
package.sh
File metadata and controls
149 lines (122 loc) · 4.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
#!/bin/bash
set -e
echo "Packaging to WebAssembly..."
MONO_SDK=$HOME/mono/sdks/out
WASM_SDK=$HOME/mono/sdks/wasm
source $WASM_SDK/emsdk_env.sh
BIN_PATH=$1
BUILD_PATH=$2
DLL=$3
echo "-------------- PARAMETERS ------------------"
echo "BIN_PATH ${BIN_PATH}"
echo "BUILD_PATH ${BUILD_PATH}"
echo "DLL ${DLL}"
echo "--------------------------------------------"
shift 3
LIBS_EXT="o"
OUTPUT_PATH=$BIN_PATH/../wasm
DEBUG=""
LINKER=""
COPY_PDB_IF_DEBUG=""
EXEC_MODE=""
FLAGS=""
REMOVE_PDB_IF_RELEASE="rm -f *.pdb"
rm -rf $BUILD_PATH
mkdir -p $BUILD_PATH
cp -r $BIN_PATH/* $BUILD_PATH
cp $BUILD_PATH/*.$LIBS_EXT $BUILD_PATH/managed/
TEMPLATE=$BUILD_PATH/runtime.js
while getopts ":aydlw" opt; do
case ${opt} in
a )
echo "Compiling in aot mode.."
EXEC_MODE="--aot"
;;
y )
echo "Compiling in aot+interpreted mode.."
EXEC_MODE="--aot-interp"
;;
d )
echo "Debug mode activated.."
DEBUG="--debug --debugrt"
REMOVE_PDB_IF_RELEASE=""
COPY_PDB_IF_DEBUG="cp -f $BUILD_PATH/managed/*.pdb $OUTPUT_PATH/managed"
;;
l )
echo "Linker activated.."
LINKER="--linker"
;;
w )
echo "WebGL support activated.."
FLAGS="--extra-emcc-flags=-s \"FULL_ES3=1\""
;;
esac
done
shift $((OPTIND -1))
#FLAGS="--extra-emcc-flags=--ignore-dynamic-linking"
if [ -z "$EXEC_MODE" ] # check if we are in interpreted mode
then
echo "Compiling in interpreted mode..."
fi
STATIC_LIBS=""
PINVOKE_LIBS=""
for l in $BUILD_PATH/*.$LIBS_EXT; do
[ -f "$l" ] || break
file=${l##*/}
name=${file%.*}
STATIC_LIBS=$STATIC_LIBS" --native-lib="$file
PINVOKE_LIBS=$PINVOKE_LIBS$name","
done
if [[ ! -z "$STATIC_LIBS" ]]
then
echo "Static libs to link: ${PINVOKE_LIBS::-1}"
PINVOKE_LIBS="--pinvoke-libs=${PINVOKE_LIBS::-1}"
fi
echo $PINVOKE_LIBS
echo $STATIC_LIBS
cd $BUILD_PATH/managed
# delete unwanted dlls
rm -f mscorlib.*
rm -f WebAssembly.Bindings.*
rm -f WebAssembly.Net.WebSockets.*
eval $REMOVE_PDB_IF_RELEASE
# package code
echo "Configuring interpreted code.."
mono $WASM_SDK/packager.exe --copy=always $DEBUG --out=$BUILD_PATH/publish $LINKER --link-descriptor=$BUILD_PATH/aot-link-descriptor.xml $DLL > /dev/null
TEMPLATE=$BUILD_PATH/publish/runtime.js
echo "Configuring.."
echo mono $WASM_SDK/packager.exe --emscripten-sdkdir=$EMSDK --enable-fs $FLAGS --mono-sdkdir=$MONO_SDK $EXEC_MODE --appdir=$BUILD_PATH/bin --builddir=$BUILD_PATH/obj --template=$TEMPLATE $DEBUG $LINKER --link-descriptor=$BUILD_PATH/aot-link-descriptor.xml $PINVOKE_LIBS $STATIC_LIBS $DLL
mono $WASM_SDK/packager.exe --emscripten-sdkdir=$EMSDK --enable-fs $FLAGS --mono-sdkdir=$MONO_SDK $EXEC_MODE --appdir=$BUILD_PATH/bin --builddir=$BUILD_PATH/obj --template=$TEMPLATE $DEBUG $LINKER --link-descriptor=$BUILD_PATH/aot-link-descriptor.xml $PINVOKE_LIBS $STATIC_LIBS $DLL
# echo "Add WebGL support..."
# sed -i 's/-s FORCE_FILESYSTEM=1/-s FORCE_FILESYSTEM=1 -s FULL_ES3=1/g' $BUILD_PATH/obj/build.ninja
echo "Add WebGPU support..."
sed -i 's/-s FORCE_FILESYSTEM=1/-s FORCE_FILESYSTEM=1 -s LLD_REPORT_UNDEFINED -s USE_WEBGPU=1 -s ENVIRONMENT=web/g' $BUILD_PATH/obj/build.ninja
echo "Compiling & linking.."
cp $BUILD_PATH/*.$LIBS_EXT $BUILD_PATH/obj/
ninja -v -C $BUILD_PATH/obj > $BUILD_PATH/ninja.log
code=$?
if [ $code -ne 0 ]
then
echo "Errors compiling aot code, check $BUILD_PATH/ninja.log"
exit $code
fi
# deploy
echo "Deploying.."
rm -rf $OUTPUT_PATH
cp -r $BIN_PATH $OUTPUT_PATH
rm -r $OUTPUT_PATH/managed
cd $BUILD_PATH/bin
cp -r ./managed $OUTPUT_PATH/
cp *.js $OUTPUT_PATH/
cp *.wasm $OUTPUT_PATH/
eval $COPY_PDB_IF_DEBUG
# debug runtime.js
if [ -n "${DEBUG}" ]; then
sed -i '/^\tonRuntimeInitialized: function () {/a \\t\tvar wasm_setenv = Module.cwrap("mono_wasm_setenv", "void", ["string", "string"]);\n\t\twasm_setenv("MONO_LOG_LEVEL", "debug");\n\t\twasm_setenv("MONO_LOG_MASK", "all");' $OUTPUT_PATH/runtime.js
fi
# WebGPU fix
echo "Fixing wgpu javascript..."
sed -i 's/wgpuComputePipelineGetBindGroupLayout(/function _wgpuComputePipelineGetBindGroupLayout(/g' $OUTPUT_PATH/dotnet.js
sed -i 's/wgpuRenderPipelineGetBindGroupLayout(/function _wgpuRenderPipelineGetBindGroupLayout(/g' $OUTPUT_PATH/dotnet.js
sed -i 's/queue\["writeBuffer"\](buffer, bufferOffset, HEAPU8, data, size);/queue["writeBuffer"](buffer, bufferOffset, HEAPU8.buffer, data, size);/g' $OUTPUT_PATH/dotnet.js
echo "Compilation finished succesfully"