diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 87f66a0859..28e1e30e0d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -627,6 +627,28 @@ jobs: name: OpenRCT2-${{ needs.build_variables.outputs.name }}-Android path: artifacts if-no-files-found: error + emscripten: + name: Emscripten + runs-on: ubuntu-latest + needs: [check-code-formatting, build_variables] + container: openrct2/openrct2-build:19-emscripten + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: ccache + uses: hendrikmuhs/ccache-action@v1.2.13 + with: + key: emscripten + - name: Install GCC problem matcher + uses: ammaraskar/gcc-problem-matcher@master + - name: Build OpenRCT2 + run: | + . scripts/setenv + build-emscripten + - name: Upload artifacts (CI) + uses: actions/upload-artifact@v4 + with: + name: OpenRCT2-${{ needs.build_variables.outputs.name }}-emscripten release: name: Release runs-on: ubuntu-latest diff --git a/scripts/build-emscripten b/scripts/build-emscripten new file mode 100755 index 0000000000..8336910dde --- /dev/null +++ b/scripts/build-emscripten @@ -0,0 +1,36 @@ +#!/bin/bash + +mkdir -p build +cd build + +START_DIR=$(pwd) +SPEEXDSP_ROOT=/ext/speexdsp +ICU_ROOT=/ext/icu/icu4c/source +LIBZIP_ROOT=/ext/libzip +JSON_DIR=/usr/include/nlohmann/ + +emcmake cmake ../ \ + -G Ninja \ + -DDISABLE_NETWORK=ON \ + -DDISABLE_HTTP=ON \ + -DDISABLE_TTF=ON \ + -DDISABLE_FLAC=ON \ + -DDISABLE_DISCORD_RPC=ON \ + -DCMAKE_SYSTEM_NAME=Emscripten \ + -DCMAKE_BUILD_TYPE=Release \ + -DSPEEXDSP_INCLUDE_DIR="$SPEEXDSP_ROOT/include/" \ + -DSPEEXDSP_LIBRARY="$SPEEXDSP_ROOT/libspeexdsp/.libs/libspeexdsp.a" \ + -DICU_INCLUDE_DIR="$ICU_ROOT/common" \ + -DICU_DATA_LIBRARIES=$ICU_ROOT/lib/libicuuc.so \ + -DICU_DT_LIBRARY_RELEASE="$ICU_ROOT/stubdata/libicudata.so" \ + -DLIBZIP_LIBRARIES="$LIBZIP_ROOT/build/lib/libzip.a" \ + -DEMSCRIPTEN_FLAGS="-s USE_SDL=2 -s USE_BZIP2=1 -s USE_LIBPNG=1 -pthread -O3" \ + -DEMSCRIPTEN_LDFLAGS="-Wno-pthreads-mem-growth -s ASYNCIFY -s FULL_ES3 -s SAFE_HEAP=0 -s ALLOW_MEMORY_GROWTH=1 -s MAXIMUM_MEMORY=4GB -s INITIAL_MEMORY=2GB -s MAX_WEBGL_VERSION=2 -s PTHREAD_POOL_SIZE=120 -pthread -sEXPORTED_RUNTIME_METHODS=FS,callMain,UTF8ToString,stringToNewUTF8 -lidbfs.js --use-preload-plugins -s MODULARIZE=1 -s 'EXPORT_NAME=\"OPENRCT2_WEB\"'" + +emmake ninja + +rm -rf www/ +mkdir -p www/ +cd www/ +cp -r ../openrct2.* ./ +cp -r ../../emscripten/static/* ./