diff --git a/.github/workflows/build-libs.yml b/.github/workflows/build-libs.yml index 7f11d742..53f73e3d 100644 --- a/.github/workflows/build-libs.yml +++ b/.github/workflows/build-libs.yml @@ -21,6 +21,10 @@ jobs: arch: x64 target: win-x64 ext: .dll + - os: windows-latest + arch: wasm + target: browser-wasm + ext: .a - os: macos-latest arch: x64-arm64 target: osx @@ -35,6 +39,12 @@ jobs: uses: actions/checkout@v4 - name: Get CMake uses: lukka/get-cmake@v3.29.4 + - name: Setup emscripten + uses: mymindstorm/setup-emsdk@v14 + if: ${{ matrix.target == 'browser-wasm' }} + - name: Get latest ninja + uses: urkle/action-get-ninja@v1 + if: ${{ matrix.target == 'browser-wasm' }} - name: Setup Linux dependencies if: ${{ runner.os == 'Linux' }} run: | @@ -46,7 +56,11 @@ jobs: libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev libgles2-mesa-dev \ libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev libudev-dev fcitx-libs-dev - name: CMake Configure + if: ${{ matrix.target != 'browser-wasm' }} run: cmake -B build -S Platform -DFOSTER_OVERRIDE_TARGET=${{matrix.target}} -D CMAKE_SYSTEM_VERSION=10.0.26100.0 + - name: CMake Configure + if: ${{ matrix.target == 'browser-wasm' }} + run: emcmake cmake -B build -S Platform -DFOSTER_OVERRIDE_TARGET=${{matrix.target}} -D CMAKE_SYSTEM_VERSION=10.0.26100.0 - name: CMake Build run: cmake --build build --config Release - name: Publish Artifact @@ -76,6 +90,11 @@ jobs: with: name: ubuntu-latest-x64-build path: Platform/libs/linux-x64 + - name: Download browser-wasm libs + uses: actions/download-artifact@v4 + with: + name: windows-latest-wasm-build + path: Platform/libs/browser-wasm - name: Display structure of libs run: ls -R working-directory: Platform/libs diff --git a/Framework/Foster.Framework.csproj b/Framework/Foster.Framework.csproj index c6a33e99..daa32692 100644 --- a/Framework/Foster.Framework.csproj +++ b/Framework/Foster.Framework.csproj @@ -3,7 +3,7 @@ Library net9.0 - win-x64;osx-x64;linux-x64 + win-x64;osx-x64;linux-x64;browser-wasm enable enable true @@ -40,6 +40,10 @@ true + + true + + PreserveNewest @@ -59,8 +63,14 @@ True %(Filename)%(Extension) + + PreserveNewest + runtimes\browser-wasm\native + True + %(Filename)%(Extension) + - + diff --git a/Platform/CMakeLists.txt b/Platform/CMakeLists.txt index 23e36418..1182bc77 100644 --- a/Platform/CMakeLists.txt +++ b/Platform/CMakeLists.txt @@ -1,7 +1,7 @@ cmake_minimum_required(VERSION 3.14) project(FosterPlatform C) -# Set flag for building a universal binary on macOS +# Set flag for building a universal binary on macOS if(APPLE) set(CMAKE_OSX_ARCHITECTURES "arm64;x86_64") endif() @@ -58,8 +58,13 @@ if (NOT DEFINED FOSTER_SDL3_LIBS) include(FetchContent) set(FETCHCONTENT_QUIET FALSE) set(SDL_TEST_LIBRARY OFF) - set(SDL_SHARED ON) - set(SDL_STATIC OFF) + if (FOSTER_TARGET STREQUAL "browser-wasm") + set(SDL_SHARED OFF) + set(SDL_STATIC ON) + else() + set(SDL_SHARED ON) + set(SDL_STATIC OFF) + endif() FetchContent_Declare( SDL3 @@ -68,7 +73,11 @@ if (NOT DEFINED FOSTER_SDL3_LIBS) GIT_PROGRESS TRUE ) FetchContent_MakeAvailable(SDL3) - set(FOSTER_SDL3_LIBS SDL3-shared) + if (FOSTER_TARGET STREQUAL "browser-wasm") + set(FOSTER_SDL3_LIBS SDL3-static) + else() + set(FOSTER_SDL3_LIBS SDL3-shared) + endif() set(FOSTER_SDL3_INCLUDE ${SDL3_SOURCE_DIRS}/include) endif()