2
2
3
3
set -e
4
4
5
- EMSDK_ENV=~ /emsdk/emsdk_env.sh
6
5
EMSDK_VERSION=2.0.22
7
6
8
- ~ /emsdk/emsdk install $EMSDK_VERSION
9
- ~ /emsdk/emsdk activate $EMSDK_VERSION
10
-
11
7
THIS_DIR=$( cd " $( dirname " ${BASH_SOURCE[0]} " ) " && pwd)
12
8
cd " $THIS_DIR "
13
9
@@ -17,35 +13,46 @@ LIBZIP_VERSION=1.5.2 # Ignored at the moment; we use a fork, cf next params
17
13
LIBZIP_REPO=arcanis/libzip
18
14
LIBZIP_COMMIT=664462465d2730d51f04437c90ed7ebcbe19a36f
19
15
20
- [[ -f ./zlib-" $ZLIB_VERSION " /libz.a ]] || (
16
+ ZLIB_ROOT=" $THIS_DIR /zlib-ng-$ZLIB_VERSION "
17
+ LIBZIP_ROOT=" $THIS_DIR /libzip-$LIBZIP_VERSION "
18
+
19
+ [[ -f " $ZLIB_ROOT /build/libz.a" ]] || (
21
20
if ! [[ -e zlib-" $ZLIB_VERSION " .zip ]]; then
22
21
wget -O ./zlib-" $ZLIB_VERSION " .zip " https://github.com/zlib-ng/zlib-ng/archive/refs/tags/$ZLIB_VERSION .zip"
23
22
fi
24
23
25
- if ! [[ -e zlib- " $ZLIB_VERSION " ]]; then
24
+ if ! [[ -e " $ZLIB_ROOT " ]]; then
26
25
unzip ./zlib-" $ZLIB_VERSION " .zip
27
- mv ./zlib-ng-" $ZLIB_VERSION " ./zlib-" $ZLIB_VERSION "
28
26
fi
29
27
30
- cd " $THIS_DIR " /zlib-" $ZLIB_VERSION "
31
-
32
- source " $EMSDK_ENV "
33
-
34
- mkdir -p build
35
- cd build
36
-
37
- CHOST=" wasm32" CFLAGS=" -static" LDFLAGS=" -static" emconfigure ../configure --warn --zlib-compat --static
38
-
39
- emmake make -j2
40
-
28
+ mkdir -p " $ZLIB_ROOT /build"
29
+
30
+ docker run --rm \
31
+ -v " $ZLIB_ROOT :/zlib" \
32
+ -u $( id -u) :$( id -g) \
33
+ --env CHOST=" wasm32" \
34
+ --env CFLAGS=" -static" \
35
+ --env LDFLAGS=" -static" \
36
+ -w " /zlib/build" \
37
+ emscripten/emsdk:$EMSDK_VERSION \
38
+ emconfigure ../configure --warn --zlib-compat --static
39
+
40
+ docker run --rm \
41
+ -v " $ZLIB_ROOT :/zlib" \
42
+ -u $( id -u) :$( id -g) \
43
+ -w " /zlib/build" \
44
+ emscripten/emsdk:$EMSDK_VERSION \
45
+ emmake make -j2
46
+
47
+ cd " $ZLIB_ROOT /build"
41
48
mkdir -p local/lib local/include
42
49
cp libz.a local/lib/
43
50
cp zconf.h ../zlib.h local/include/
44
51
45
52
echo Built zlib
46
53
)
47
54
48
- [[ -f ./libzip- " $LIBZIP_VERSION " /build/lib/libzip.a ]] || (
55
+ [[ -f " $LIBZIP_ROOT /build/lib/libzip.a" ]] || (
49
56
if [[ -n " $LIBZIP_REPO " ]]; then
50
57
if ! [[ -e libzip-" $LIBZIP_VERSION " ]]; then
51
58
git clone https://github.com/" $LIBZIP_REPO " libzip-" $LIBZIP_VERSION "
@@ -64,27 +71,35 @@ LIBZIP_COMMIT=664462465d2730d51f04437c90ed7ebcbe19a36f
64
71
fi
65
72
fi
66
73
67
- cd " $THIS_DIR " /libzip-" $LIBZIP_VERSION "
68
-
69
- source " $EMSDK_ENV "
70
-
71
- mkdir -p build
72
- cd build
74
+ mkdir -p " $LIBZIP_ROOT /build"
73
75
74
- emcmake cmake -Wno-dev \
76
+ docker run --rm \
77
+ -v " $LIBZIP_ROOT :/libzip" \
78
+ -v " $ZLIB_ROOT :/zlib" \
79
+ -u $( id -u) :$( id -g) \
80
+ -w " /libzip/build" \
81
+ emscripten/emsdk:$EMSDK_VERSION \
82
+ emcmake cmake -Wno-dev \
75
83
-DBUILD_SHARED_LIBS=OFF \
76
84
-DENABLE_LOCALTIME=OFF \
77
85
-DENABLE_COMMONCRYPTO=OFF \
78
86
-DENABLE_GNUTLS=OFF \
79
87
-DENABLE_MBEDTLS=OFF \
80
88
-DENABLE_OPENSSL=OFF \
81
89
-DENABLE_WINDOWS_CRYPTO=OFF \
82
- -DZLIB_LIBRARY=" $THIS_DIR " /zlib- " $ZLIB_VERSION " /build/local/lib/libz.a \
83
- -DZLIB_INCLUDE_DIR=" $THIS_DIR " /zlib- " $ZLIB_VERSION " /build/local/include \
90
+ -DZLIB_LIBRARY=/zlib/build/local/lib/libz.a \
91
+ -DZLIB_INCLUDE_DIR=/zlib/build/local/include \
84
92
..
85
93
86
- emmake make zip
94
+ docker run --rm \
95
+ -v " $LIBZIP_ROOT :/libzip" \
96
+ -v " $ZLIB_ROOT :/zlib" \
97
+ -u $( id -u) :$( id -g) \
98
+ -w " /libzip/build" \
99
+ emscripten/emsdk:$EMSDK_VERSION \
100
+ emmake make zip
87
101
102
+ cd " $LIBZIP_ROOT /build"
88
103
mkdir -p local/lib local/include
89
104
cp lib/libzip.a local/lib/
90
105
cp config.h zipconf.h ../lib/zip.h ../lib/compat.h ../lib/zipint.h local/include/
@@ -96,11 +111,16 @@ build() {
96
111
local name=$1
97
112
shift
98
113
99
- source " $EMSDK_ENV "
100
-
101
114
# Options are documented at https://github.com/emscripten-core/emscripten/blob/86131037aa4f1c7bf6021081dd28fae12bdedba1/src/settings.js
102
- emcc \
103
- -o ./build.js \
115
+ docker run --rm \
116
+ -v " $THIS_DIR :/src" \
117
+ -v " $LIBZIP_ROOT :/libzip" \
118
+ -v " $ZLIB_ROOT :/zlib" \
119
+ -u $( id -u) :$( id -g) \
120
+ -w " /src" \
121
+ emscripten/emsdk:$EMSDK_VERSION \
122
+ emcc \
123
+ -o ./$name .js \
104
124
-s WASM=1 \
105
125
-s EXPORTED_FUNCTIONS=" $( cat ./exported.json) " \
106
126
-s EXPORTED_RUNTIME_METHODS=' ["cwrap", "getValue"]' \
@@ -111,26 +131,28 @@ build() {
111
131
-s NODERAWFS=1 \
112
132
-s SINGLE_FILE=1 \
113
133
-s MODULARIZE=1 \
134
+ -s STRICT=1 \
114
135
-s EXPORT_NAME=" createModule" \
115
136
-s NODEJS_CATCH_EXIT=0 \
116
137
-s NODEJS_CATCH_REJECTION=0 \
117
138
" $@ " \
118
- -I. /libzip- " $LIBZIP_VERSION " /build/local/include \
119
- -I. /zlib- " $ZLIB_VERSION " /build/local/include \
139
+ -I/libzip/build/local/include \
140
+ -I/zlib/build/local/include \
120
141
-O3 \
121
142
./lib/* .c \
122
- . /libzip- " $LIBZIP_VERSION " /build/local/lib/libzip.a \
123
- . /zlib- " $ZLIB_VERSION " /build/local/lib/libz.a
143
+ /libzip/build/local/lib/libzip.a \
144
+ /zlib/build/local/lib/libz.a
124
145
125
146
cat > ../sources/" $name " .js \
126
147
<( echo " var frozenFs = Object.assign({}, require('fs'));" ) \
127
- <( sed ' s/require("fs")/frozenFs/g' ./build .js |
148
+ <( sed ' s/require("fs")/frozenFs/g' ./$name .js |
128
149
sed ' s/process\["binding"\]("constants")/({"fs":fs.constants})/g' )
129
150
130
- yarn prettier --write ../sources/" $name " .js
131
-
132
151
echo " Built wasm ($name )"
133
152
}
134
153
135
- build libzipSync -s BINARYEN_ASYNC_COMPILATION=0
136
- build libzipAsync -s BINARYEN_ASYNC_COMPILATION=1
154
+ build libzipSync -s WASM_ASYNC_COMPILATION=0 &
155
+ build libzipAsync -s WASM_ASYNC_COMPILATION=1 &
156
+ wait
157
+
158
+ yarn prettier --write ../sources/* .js
0 commit comments