Skip to content

Commit fc01581

Browse files
committed
Enable Emscripten optimizations
1 parent 3c6d23d commit fc01581

File tree

7 files changed

+87
-16
lines changed

7 files changed

+87
-16
lines changed

Diff for: .babelrc

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"presets": ["env"]
3+
}

Diff for: .gitignore

+4-1
Original file line numberDiff line numberDiff line change
@@ -1 +1,4 @@
1-
tests/build
1+
node_modules/
2+
package-lock.json
3+
pre.js
4+
tests/build/

Diff for: .travis.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ cache:
1313

1414
before_script:
1515
- docker run -dit --name emscripten -v $(pwd):/src trzeci/emscripten-slim bash
16-
- npm install puppeteer
16+
- npm install
1717

1818
script:
1919
- docker exec -it emscripten bash tests/run.sh --no-test

Diff for: emcc-cvmfs

+30-13
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,37 @@
11
#!/bin/bash
22

3+
set -e
4+
5+
OUTPUT_JS="a.out.js"
6+
7+
i=1
8+
while [ "$i" -le "$#" ]; do
9+
eval "arg=\${$i}"
10+
if [[ $arg == "-o" ]]; then
11+
i=$((i + 1))
12+
eval "OUTPATH=\${$i}"
13+
OUTFILE=$(basename $OUTPATH)
14+
if [[ $OUTFILE == *.html || $OUTFILE == *.js ]]; then
15+
OUTPUT_JS=$(dirname $OUTPATH)/${OUTFILE%*.*}.js
16+
else
17+
echo "Please specify either an HTML or JavaScript output." && exit -1
18+
fi
19+
break
20+
fi
21+
i=$((i + 1))
22+
done
23+
324
SRC_DIR="$( cd "$( dirname "$0" )" && pwd )"
4-
CVMFS_DIR=$SRC_DIR/cvmfs
525
FS_DIR=$SRC_DIR/fs
6-
THIRD_PARTY_DIR=$SRC_DIR/third_party
26+
27+
$SRC_DIR/generate-pre.sh
728

829
emcc $* \
9-
-s WASM=0 \
10-
--pre-js $THIRD_PARTY_DIR/jsrsasign-all-min.js \
11-
--pre-js $THIRD_PARTY_DIR/sha3.js \
12-
--pre-js $THIRD_PARTY_DIR/pako_inflate.min.js \
13-
--pre-js $THIRD_PARTY_DIR/sql.js \
14-
--pre-js $CVMFS_DIR/cvmfs.js \
15-
--pre-js $CVMFS_DIR/fetcher.js \
16-
--pre-js $CVMFS_DIR/master_keys.js \
17-
--pre-js $CVMFS_DIR/repo.js \
18-
--pre-js $CVMFS_DIR/util.js \
1930
--js-library $FS_DIR/library_cvmfs.js \
20-
--js-library $FS_DIR/library_fs.js
31+
--js-library $FS_DIR/library_fs.js \
32+
--pre-js $SRC_DIR/pre.js
33+
34+
OUTPUT_JS_TMP=$OUTPUT_JS.tmp
35+
cat $SRC_DIR/third_party/sql.js > $OUTPUT_JS_TMP
36+
cat $OUTPUT_JS >> $OUTPUT_JS_TMP
37+
mv $OUTPUT_JS_TMP $OUTPUT_JS

Diff for: generate-pre.sh

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
#!/bin/bash
2+
3+
set -e
4+
5+
SRC_DIR="$( cd "$( dirname "$0" )" && pwd )"
6+
CVMFS_DIR=$SRC_DIR/cvmfs
7+
THIRD_PARTY_DIR=$SRC_DIR/third_party
8+
PRE_JS=$SRC_DIR/pre.js
9+
10+
FILES_CHANGED=0
11+
12+
pre_files=($CVMFS_DIR/*.js $THIRD_PARTY_DIR/*.js)
13+
for file in ${pre_files[*]}; do
14+
if [[ $file != *sql.js && $file -nt $PRE_JS ]]; then
15+
FILES_CHANGED=1
16+
break
17+
fi
18+
done
19+
20+
[[ FILES_CHANGED -eq 0 ]] && exit 0
21+
22+
echo "Generating pre.js"
23+
24+
> $PRE_JS
25+
26+
for file in ${pre_files[*]}; do
27+
if [[ $file != *sql.js && $file != *sha3.js ]]; then
28+
cat $file >> $PRE_JS
29+
fi
30+
done
31+
32+
npx babel $PRE_JS -o $PRE_JS.babel
33+
mv $PRE_JS.babel $PRE_JS
34+
35+
# somehow, babel messes up transpiling sha3.js correctly, but sha3.js
36+
# also dosn't crash Emscripten's optimizer, so we can just prepend it
37+
cat $THIRD_PARTY_DIR/sha3.js >> $PRE_JS

Diff for: package.json

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"devDependencies": {
3+
"babel-cli": "^6.26.0",
4+
"babel-preset-env": "^1.7.0",
5+
"puppeteer": "^1.4.0"
6+
}
7+
}

Diff for: tests/run.sh

+5-1
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,15 @@ if [ $COMPILE -eq 1 ]; then
2929
mkdir -p $JS_BUILD_DIR
3030
mkdir -p $C_BUILD_DIR
3131

32+
$SRC_DIR/generate-pre.sh
33+
3234
echo -n "Compiling JavaScript tests... "
3335
for testfile in $JS_DIR/*.js; do
3436
testfile=$(basename $testfile)
3537
[ $testfile == "common.js" ] && continue
36-
38+
3739
$SRC_DIR/emcc-cvmfs \
40+
-s WASM=0 \
3841
--post-js $JS_DIR/common.js \
3942
--post-js $JS_DIR/$testfile \
4043
--shell-file $TEST_DIR/test_container.html \
@@ -49,6 +52,7 @@ if [ $COMPILE -eq 1 ]; then
4952
testfile=$(basename $testfile)
5053

5154
$SRC_DIR/emcc-cvmfs \
55+
-s WASM=0 \
5256
-s NO_EXIT_RUNTIME=0 \
5357
--shell-file $TEST_DIR/test_container.html \
5458
-o $C_BUILD_DIR/${testfile%*.*}.html \

0 commit comments

Comments
 (0)