|
1 | 1 | #!/usr/bin/env bash
|
2 |
| -set -ex |
| 2 | + |
| 3 | +set -euo pipefail |
| 4 | +set -x |
3 | 5 |
|
4 | 6 | working_dir="$(pwd)"
|
5 | 7 | script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
|
6 | 8 |
|
7 |
| -# Ensure apt-get is current, because otherwise bootstrapping might fail |
8 |
| -sudo apt-get update -y |
| 9 | +mode="${1:-release}" |
| 10 | +mozconfig="${working_dir}/mozconfig-${mode}" |
| 11 | +objdir="obj-$mode" |
| 12 | +outdir="$mode" |
| 13 | + |
| 14 | +cat << EOF > "$mozconfig" |
| 15 | +ac_add_options --enable-project=js |
| 16 | +ac_add_options --enable-application=js |
| 17 | +ac_add_options --target=wasm32-unknown-wasi |
| 18 | +ac_add_options --disable-stdcxx-compat |
| 19 | +ac_add_options --without-system-zlib |
| 20 | +ac_add_options --without-intl-api |
| 21 | +ac_add_options --disable-jit |
| 22 | +ac_add_options --disable-shared-js |
| 23 | +ac_add_options --disable-shared-memory |
| 24 | +ac_add_options --disable-tests |
| 25 | +ac_add_options --disable-clang-plugin |
| 26 | +ac_add_options --enable-jitspew |
| 27 | +ac_add_options --enable-optimize |
| 28 | +ac_add_options --enable-js-streams |
| 29 | +ac_add_options --prefix=${working_dir}/${objdir}/dist |
| 30 | +mk_add_options MOZ_OBJDIR=${working_dir}/${objdir} |
| 31 | +EOF |
| 32 | + |
| 33 | +case "$mode" in |
| 34 | + release) |
| 35 | + echo "ac_add_options --disable-debug" >> "$mozconfig" |
| 36 | + ;; |
| 37 | + |
| 38 | + debug) |
| 39 | + echo "ac_add_options --enable-debug" >> "$mozconfig" |
| 40 | + ;; |
| 41 | + |
| 42 | + *) |
| 43 | + echo "Unknown build type: $mode" |
| 44 | + exit 1 |
| 45 | + ;; |
| 46 | +esac |
| 47 | + |
9 | 48 |
|
10 | 49 | # Ensure the Rust version matches that used by Gecko, and can compile to WASI
|
11 |
| -rustup update 1.57.0 |
12 |
| -rustup default 1.57.0 |
13 | 50 | rustup target add wasm32-wasi
|
14 | 51 |
|
15 |
| -if [[ ! -a gecko-dev ]] |
16 |
| -then |
| 52 | +fetch_commits= |
| 53 | +if [[ ! -a gecko-dev ]]; then |
17 | 54 |
|
18 | 55 | # Clone Gecko repository at the required revision
|
19 | 56 | mkdir gecko-dev
|
20 |
| - cd gecko-dev |
21 | 57 |
|
22 |
| - git init |
23 |
| - git remote add --no-tags -t wasi-embedding origin $(cat $script_dir/gecko-repository) |
24 |
| - cd .. |
| 58 | + git -C gecko-dev init |
| 59 | + git -C gecko-dev remote add --no-tags -t wasi-embedding \ |
| 60 | + origin "$(cat "$script_dir/gecko-repository")" |
| 61 | + |
| 62 | + fetch_commits=1 |
25 | 63 | fi
|
26 | 64 |
|
27 |
| -cd gecko-dev |
28 |
| -git fetch --depth 1 origin $(cat $script_dir/gecko-revision) |
29 |
| -git checkout FETCH_HEAD |
| 65 | +target_rev="$(cat "$script_dir/gecko-revision")" |
| 66 | +if [[ -n "$fetch_commits" ]] || \ |
| 67 | + [[ "$(git -C gecko-dev rev-parse HEAD)" != "$target_rev" ]]; then |
| 68 | + git -C gecko-dev fetch --depth 1 origin "$target_rev" |
| 69 | + git -C gecko-dev checkout FETCH_HEAD |
| 70 | +fi |
30 | 71 |
|
31 |
| -# Use Gecko's build system bootstrapping to ensure all dependencies are installed |
32 |
| -./mach bootstrap --application-choice=js |
| 72 | +# Use Gecko's build system bootstrapping to ensure all dependencies are |
| 73 | +# installed |
| 74 | +cd gecko-dev |
| 75 | +./mach --no-interactive bootstrap --application-choice=js --no-system-changes |
33 | 76 |
|
34 |
| -# ... except, that doesn't install the wasi-sysroot, which we need, so we do that manually. |
| 77 | +# ... except, that doesn't install the wasi-sysroot, which we need, so we do |
| 78 | +# that manually. |
35 | 79 | cd ~/.mozbuild
|
36 | 80 | python3 \
|
37 |
| - ${working_dir}/gecko-dev/mach \ |
| 81 | + "${working_dir}/gecko-dev/mach" \ |
| 82 | + --no-interactive \ |
38 | 83 | artifact \
|
39 | 84 | toolchain \
|
40 | 85 | --bootstrap \
|
41 | 86 | --from-build \
|
42 | 87 | sysroot-wasm32-wasi
|
43 | 88 |
|
44 |
| -cd ${working_dir} |
45 |
| - |
46 |
| -mode="release" |
47 |
| -flags="--optimize --no-debug --build-only" |
48 |
| -if [[ $1 == 'debug' ]] |
49 |
| -then |
50 |
| - mode="debug" |
51 |
| - flags="--optimize --debug" |
52 |
| -fi |
53 |
| -rust_lib_dir=$mode |
54 |
| -objdir=obj-$mode |
55 |
| -outdir=$mode |
56 |
| - |
57 |
| -echo $flags $rust_lib_dir |
| 89 | +cd "$working_dir" |
58 | 90 |
|
59 | 91 | # Build SpiderMonkey for WASI
|
60 |
| -MOZ_FETCHES_DIR=~/.mozbuild CC=~/.mozbuild/clang/bin/clang gecko-dev/js/src/devtools/automation/autospider.py --objdir=$objdir $flags wasi |
| 92 | +MOZCONFIG="${mozconfig}" \ |
| 93 | +MOZ_FETCHES_DIR=~/.mozbuild \ |
| 94 | +CC=~/.mozbuild/clang/bin/clang \ |
| 95 | + python3 "${working_dir}/gecko-dev/mach" \ |
| 96 | + --no-interactive \ |
| 97 | + build |
61 | 98 |
|
62 | 99 | # Copy header, object, and static lib files
|
63 |
| -rm -rf $outdir |
64 |
| -mkdir -p $outdir/lib |
| 100 | +rm -rf "$outdir" |
| 101 | +mkdir -p "$outdir/lib" |
| 102 | + |
| 103 | +cd "$objdir" |
| 104 | +cp -Lr dist/include "../$outdir" |
| 105 | + |
| 106 | +while read -r file; do |
| 107 | + cp "$file" "../$outdir/lib" |
| 108 | +done < "$script_dir/object-files.list" |
65 | 109 |
|
66 |
| -cd $objdir |
67 |
| -cp -Lr dist/include ../$outdir |
68 |
| -cp $(cat $script_dir/object-files.list) ../$outdir/lib |
69 |
| -cp js/src/build/libjs_static.a wasm32-wasi/${rust_lib_dir}/libjsrust.a ../$outdir/lib |
| 110 | +cp js/src/build/libjs_static.a "wasm32-wasi/${mode}/libjsrust.a" "../$outdir/lib" |
0 commit comments