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()