Set up packaging for web build
This commit is contained in:
parent
4204022390
commit
805826c160
8 changed files with 103 additions and 2 deletions
|
|
@ -1,4 +1,7 @@
|
|||
# On web SDL is provided by emsdk itself
|
||||
if(NOT CMAKE_SYSTEM_NAME STREQUAL Emscripten)
|
||||
find_package(SDL2 REQUIRED)
|
||||
endif()
|
||||
|
||||
file(GLOB_RECURSE PSEMEK_SDL2_HEADERS RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "include/*.hpp")
|
||||
file(GLOB_RECURSE PSEMEK_SDL2_SOURCES RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "source/*.cpp")
|
||||
|
|
|
|||
|
|
@ -10,7 +10,11 @@ if(PSEMEK_PACKAGE_MODE)
|
|||
elseif(ANDROID)
|
||||
set(PSEMEK_PACKAGE_SUFFIX_RAW android)
|
||||
elseif(UNIX)
|
||||
set(PSEMEK_PACKAGE_SUFFIX_RAW linux)
|
||||
if (CMAKE_SYSTEM_NAME STREQUAL Emscripten)
|
||||
set(PSEMEK_PACKAGE_SUFFIX_RAW web)
|
||||
else()
|
||||
set(PSEMEK_PACKAGE_SUFFIX_RAW linux)
|
||||
endif()
|
||||
else()
|
||||
message(FATAL "Uknown system for packaging")
|
||||
endif()
|
||||
|
|
@ -84,7 +88,19 @@ function(psemek_add_executable_impl target is_application)
|
|||
if(NOT ANDROID)
|
||||
get_filename_component(_OUTPUT_DIRECTORY "${_OUTPUT_PATH}" DIRECTORY)
|
||||
|
||||
set(_COPY_FILES $<TARGET_FILE:${target}> ${PSEMEK_PACKAGE_COPY_FILES})
|
||||
set(_TARGET_FILE $<TARGET_FILE:${target}>)
|
||||
|
||||
set(_TARGET_RUNTIME)
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL Emscripten)
|
||||
set(_TARGET_PARENT $<PATH:GET_PARENT_PATH,${_TARGET_FILE}>)
|
||||
set(_TARGET_STEM $<PATH:GET_STEM,${_TARGET_FILE}>)
|
||||
set(_TARGET_NOEXT "${_TARGET_PARENT}/${_TARGET_STEM}")
|
||||
|
||||
list(APPEND _TARGET_RUNTIME ${_TARGET_NOEXT}.js)
|
||||
list(APPEND _TARGET_RUNTIME ${_TARGET_NOEXT}.wasm)
|
||||
endif()
|
||||
|
||||
set(_COPY_FILES ${_TARGET_FILE} ${_TARGET_RUNTIME} ${PSEMEK_PACKAGE_COPY_FILES})
|
||||
|
||||
if(PSEMEK_GRAPHICS_API STREQUAL WEBGPU)
|
||||
list(APPEND _COPY_FILES ${PSEMEK_PACKAGE_COPY_FILES_WEBGPU})
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ if [ "$#" -ne 2 ]; then
|
|||
echo " linux"
|
||||
echo " windows"
|
||||
echo " android"
|
||||
echo " web"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
|
|
@ -15,6 +16,7 @@ case ${1} in
|
|||
linux) ;;
|
||||
windows) ;;
|
||||
android) ;;
|
||||
web) ;;
|
||||
*)
|
||||
echo "Unknown platform: ${1}"
|
||||
exit -1
|
||||
|
|
|
|||
16
package/web/Dockerfile
Normal file
16
package/web/Dockerfile
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
FROM lisyarus/psemek:package-linux
|
||||
|
||||
# Install emsdk - the version the build was tested at
|
||||
WORKDIR /home
|
||||
RUN git clone --branch 3.1.46 https://github.com/emscripten-core/emsdk.git
|
||||
WORKDIR /home/emsdk
|
||||
RUN ./emsdk install 3.1.46
|
||||
RUN ./emsdk activate 3.1.46
|
||||
WORKDIR /home
|
||||
COPY env-helper.sh .
|
||||
# Source emsdk env variables when running the container
|
||||
ENTRYPOINT ["/home/env-helper.sh"]
|
||||
|
||||
# Install toolchain file & main packaging script
|
||||
COPY toolchain-host.cmake .
|
||||
COPY package.sh .
|
||||
7
package/web/build.sh
Executable file
7
package/web/build.sh
Executable file
|
|
@ -0,0 +1,7 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
|
||||
cd "$(dirname "$0")"
|
||||
|
||||
docker build -t lisyarus/psemek:package-web .
|
||||
6
package/web/env-helper.sh
Executable file
6
package/web/env-helper.sh
Executable file
|
|
@ -0,0 +1,6 @@
|
|||
#!/bin/bash
|
||||
|
||||
# emsdk provides some environment variables that need to be sourced from a file
|
||||
source /home/emsdk/emsdk_env.sh
|
||||
|
||||
exec "$@"
|
||||
25
package/web/package.sh
Executable file
25
package/web/package.sh
Executable file
|
|
@ -0,0 +1,25 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
|
||||
mkdir -p /home/build-host
|
||||
cd /home/build-host
|
||||
cmake ../source -DCMAKE_TOOLCHAIN_FILE=/home/toolchain-host.cmake -DCMAKE_INSTALL_PREFIX=/home/tools
|
||||
cmake --build . -t install -j
|
||||
|
||||
mkdir -p /home/build-target
|
||||
cd /home/build-target
|
||||
rm -rf ./*
|
||||
# Use emsdk wrapper for cmake - it sets some env variables to select the
|
||||
# right toolchain.
|
||||
emcmake cmake \
|
||||
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
|
||||
-DPSEMEK_PACKAGE_MODE=ON \
|
||||
-DPSEMEK_PACKAGE_HOST=OFF \
|
||||
-DPSEMEK_PACKAGE_TARGET=ON \
|
||||
-DPSEMEK_STACKTRACE=OFF \
|
||||
-DPSEMEK_PACKAGE_TOOLS_PATH=/home/tools \
|
||||
-DPSEMEK_PACKAGE_COPY_FILES= \
|
||||
-DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=BOTH \
|
||||
../source
|
||||
cmake --build . -j
|
||||
26
package/web/toolchain-host.cmake
Normal file
26
package/web/toolchain-host.cmake
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
set(CMAKE_C_COMPILER gcc)
|
||||
set(CMAKE_CXX_COMPILER g++)
|
||||
set(CMAKE_BUILD_TYPE Release)
|
||||
|
||||
set(PSEMEK_PACKAGE_MODE ON)
|
||||
set(PSEMEK_PACKAGE_ROOT "${CMAKE_CURRENT_LIST_DIR}")
|
||||
set(PSEMEK_PACKAGE_HOST ON)
|
||||
set(PSEMEK_PACKAGE_TARGET OFF)
|
||||
set(PSEMEK_PACKAGE_TOOLS_PATH "${PSEMEK_PACKAGE_ROOT}/tools")
|
||||
set(PSEMEK_STACKTRACE OFF)
|
||||
|
||||
set(PSEMEK_PACKAGE_COPY_FILES
|
||||
${PSEMEK_PACKAGE_ROOT}/sdl2/install/lib/libSDL2-2.0.so.0
|
||||
)
|
||||
|
||||
set(PSEMEK_PACKAGE_COPY_FILES_FREETYPE
|
||||
${PSEMEK_PACKAGE_ROOT}/libfreetype.so.6
|
||||
)
|
||||
|
||||
list(APPEND CMAKE_PREFIX_PATH
|
||||
"${PSEMEK_PACKAGE_ROOT}/sdl2/install"
|
||||
)
|
||||
|
||||
set(WGPU_NATIVE_ROOT
|
||||
"${PSEMEK_PACKAGE_ROOT}/wgpu-native/install"
|
||||
)
|
||||
Loading…
Add table
Reference in a new issue