Skip to content

Commit 2918032

Browse files
committed
scripts/emcc.sh: cache lto .a files in build/emsdk-cache
1 parent ad8769c commit 2918032

File tree

2 files changed

+44
-10
lines changed

2 files changed

+44
-10
lines changed

Makefile

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@
22
CC=clang
33
EMSDK_VERSION=3.1.7
44
EMSDK_DOCKER_IMAGE=emscripten/emsdk:$(EMSDK_VERSION)
5-
EMCC=EMSDK_VERSION=$(EMSDK_VERSION) EMSDK_DOCKER_IMAGE=$(EMSDK_DOCKER_IMAGE) scripts/emcc.sh
5+
EMCC=EMSDK_VERSION=$(EMSDK_VERSION) EMSDK_DOCKER_IMAGE=$(EMSDK_DOCKER_IMAGE) EMSDK_DOCKER_CACHE=$(THIS_DIR)/$(BUILD_EMSDK_CACHE)/$(EMSDK_VERSION) scripts/emcc.sh
66
GENERATE_TS=$(VARIANT_GENERATE_TS_ENV) npx ts-node generate.ts
77
PRETTIER=npx prettier
8+
THIS_DIR := $(dir $(abspath $(firstword $(MAKEFILE_LIST))))
89

910
DEBUG_MAKE=1
1011

@@ -40,6 +41,7 @@ WRAPPER_ROOT=c
4041
BUILD_ROOT=build
4142
BUILD_WRAPPER=$(BUILD_ROOT)/wrapper
4243
BUILD_QUICKJS=$(BUILD_ROOT)/quickjs
44+
BUILD_EMSDK_CACHE=$(BUILD_ROOT)/emsdk-cache
4345
BUILD_TS=ts/generated
4446

4547
# QuickJS
@@ -174,15 +176,15 @@ NATIVE: $(BUILD_WRAPPER)/test.$(VARIANT).exe
174176

175177
$(BUILD_WRAPPER)/test.$(VARIANT).exe: $(BUILD_WRAPPER)/test.$(VARIANT).o $(BUILD_WRAPPER)/interface.$(VARIANT).o $(VARIANT_QUICKJS_OBJS)
176178
$(MKDIRP)
177-
$(CC) $(VARIANT_CFLAGS) -o $@ $<
179+
$(CC) $(VARIANT_CFLAGS) -o $@ $<
178180

179181
$(BUILD_WRAPPER)/test.$(VARIANT).o: $(WRAPPER_ROOT)/test.c $(WRAPPER_ROOT)/interface.h
180182
$(MKDIRP)
181-
$(CC) $(VARIANT_CFLAGS) -o $@ $<
183+
$(CC) $(VARIANT_CFLAGS) -o $@ $<
182184

183185
$(BUILD_WRAPPER)/%.NATIVE_$(RELEASE)_$(SYNC).o: $(WRAPPER_ROOT)/%.c
184186
$(MKDIRP)
185-
$(CC) $(VARIANT_CFLAGS) -o $@ $<
187+
$(CC) $(VARIANT_CFLAGS) -o $@ $<
186188

187189
$(BUILD_QUICKJS)/%.NATIVE_$(RELEASE)_$(SYNC).o: $(QUICKJS_ROOT)/%.c
188190
$(MKDIRP)
@@ -195,7 +197,7 @@ $(WRAPPER_ROOT)/interface.h: $(WRAPPER_ROOT)/interface.c generate.ts
195197
###############################################################################
196198
# WASM variants
197199
WASM: $(BUILD_TS)/emscripten-module.$(VARIANT).js $(BUILD_TS)/emscripten-module.$(VARIANT).d.ts GENERATE
198-
GENERATE: $(BUILD_TS)/ffi.$(VARIANT).ts
200+
GENERATE: $(BUILD_TS)/ffi.$(VARIANT).ts
199201
WASM_SYMBOLS=$(BUILD_WRAPPER)/symbols.json $(BUILD_WRAPPER)/asyncify-remove.json $(BUILD_WRAPPER)/asyncify-imports.json
200202

201203
$(BUILD_TS)/emscripten-module.$(VARIANT).js: $(BUILD_WRAPPER)/interface.$(VARIANT).o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | scripts/emcc.sh
@@ -228,4 +230,4 @@ $(BUILD_WRAPPER)/asyncify-remove.json:
228230

229231
$(BUILD_WRAPPER)/asyncify-imports.json:
230232
$(MKDIRP)
231-
$(GENERATE_TS) async-callback-symbols $@
233+
$(GENERATE_TS) async-callback-symbols $@

scripts/emcc.sh

Lines changed: 36 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,46 @@
22
# Use system emcc if installed, otherwise use Docker.
33
set -eo pipefail
44

5-
if [[ -z "$EMSDK_USE_DOCKER" ]] && command -v emcc > /dev/null ; then
6-
if emcc --version | grep "$EMSDK_VERSION" > /dev/null ; then
5+
if [[ -z "$EMSDK_USE_DOCKER" ]] && command -v emcc >/dev/null; then
6+
if emcc --version | grep "$EMSDK_VERSION" >/dev/null; then
77
exec emcc "$@"
88
fi
99
fi
1010

11+
if [[ -z "$EMSDK_CACHE" ]]; then
12+
echo "EMSDK_CACHE must be set to a path"
13+
fi
14+
1115
DOCKER_ARGV=(
12-
run --rm -v "$(pwd):$(pwd)" -u "$(id -u):$(id -g)" -w "$(pwd)" "${EMSDK_DOCKER_IMAGE}" emcc "$@"
16+
run --rm
17+
-v "$(pwd):$(pwd)"
18+
-u "$(id -u):$(id -g)"
19+
-w "$(pwd)"
20+
)
21+
22+
if [[ -n "$EMSDK_DOCKER_CACHE" ]]; then
23+
# There are some files that are not pre-build in the Docker image,
24+
# and take a while to be automatically generated by emsdk.
25+
# We cache these on the host inside EMSDK_DOCKER_CACHE.
26+
EMSDK_DOCKER_CACHE_PATHS=(
27+
sysroot/lib/wasm32-emscripten/lto
28+
sysroot/lib/wasm32-emscripten/thinlto
29+
sysroot/lib/wasm32-emscripten/pic
30+
)
31+
for dir in "${EMSDK_DOCKER_CACHE_PATHS[@]}"; do
32+
host="$EMSDK_DOCKER_CACHE/$dir"
33+
guest="/emsdk/upstream/emscripten/cache/$dir"
34+
35+
mkdir -p "$host"
36+
DOCKER_ARGV+=(
37+
-v "$host:$guest"
38+
)
39+
done
40+
fi
41+
42+
DOCKER_ARGV+=(
43+
"${EMSDK_DOCKER_IMAGE}" emcc "$@"
1344
)
45+
1446
set -x
15-
exec docker "${DOCKER_ARGV[@]}"
47+
exec docker "${DOCKER_ARGV[@]}"

0 commit comments

Comments
 (0)