porting web to emcmake
This commit is contained in:
parent
d1cab1f3b3
commit
8089bcc0f3
2
.gitignore
vendored
2
.gitignore
vendored
@ -401,3 +401,5 @@ jumpingbird.data
|
||||
build
|
||||
build-emcmake
|
||||
thirdparty1
|
||||
|
||||
proj-web/build
|
||||
|
||||
141
proj-web/CMakeLists.txt
Normal file
141
proj-web/CMakeLists.txt
Normal file
@ -0,0 +1,141 @@
|
||||
cmake_minimum_required(VERSION 3.15)
|
||||
|
||||
project(space-game001 CXX)
|
||||
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
|
||||
# Список исходных файлов
|
||||
set(SOURCES
|
||||
../src/main.cpp
|
||||
../src/Game.cpp
|
||||
../src/Environment.cpp
|
||||
../src/BoneAnimatedModel.cpp
|
||||
../src/TextModel.cpp
|
||||
../src/Projectile.cpp
|
||||
../src/SparkEmitter.cpp
|
||||
../src/UiManager.cpp
|
||||
../src/render/Renderer.cpp
|
||||
../src/render/ShaderManager.cpp
|
||||
../src/render/TextureManager.cpp
|
||||
../src/render/FrameBuffer.cpp
|
||||
../src/render/OpenGlExtensions.cpp
|
||||
../src/utils/Utils.cpp
|
||||
../src/utils/TaskManager.cpp
|
||||
../src/utils/Perlin.cpp
|
||||
../src/planet/PlanetData.cpp
|
||||
../src/planet/PlanetObject.cpp
|
||||
../src/planet/StoneObject.cpp
|
||||
)
|
||||
|
||||
add_executable(space-game001 ${SOURCES})
|
||||
|
||||
# Пути к инклудам
|
||||
target_include_directories(space-game001 PRIVATE
|
||||
../src
|
||||
./src
|
||||
../thirdparty1/eigen-5.0.0
|
||||
../thirdparty1/boost_1_90_0
|
||||
./thirdparty/libzip-1.11.3/build-emcmake/install/include
|
||||
)
|
||||
|
||||
# Пути к либам и сами либы
|
||||
target_link_directories(space-game001 PRIVATE
|
||||
./thirdparty/libzip-1.11.3/build-emcmake/install/lib
|
||||
)
|
||||
target_link_libraries(space-game001 zip z)
|
||||
|
||||
|
||||
set(EMSCRIPTEN_FLAGS
|
||||
"-sUSE_SDL=2"
|
||||
"-sUSE_SDL_IMAGE=2"
|
||||
"-sUSE_LIBPNG=1"
|
||||
"-pthread"
|
||||
"-sUSE_PTHREADS=1"
|
||||
"-fexceptions"
|
||||
)
|
||||
|
||||
# Добавляем флаги компиляции
|
||||
target_compile_options(space-game001 PRIVATE
|
||||
${EMSCRIPTEN_FLAGS}
|
||||
"-O2"
|
||||
)
|
||||
|
||||
# Специфичные флаги только для линковки
|
||||
set(EMSCRIPTEN_LINK_FLAGS
|
||||
${EMSCRIPTEN_FLAGS} # SDL и Pthreads нужны и здесь
|
||||
"-O2"
|
||||
"-sPTHREAD_POOL_SIZE=4"
|
||||
"-sTOTAL_MEMORY=4294967296"
|
||||
"-sINITIAL_MEMORY=3221225472"
|
||||
"-sMAXIMUM_MEMORY=4294967296"
|
||||
"-sALLOW_MEMORY_GROWTH=1"
|
||||
"--preload-file resources.zip"
|
||||
)
|
||||
|
||||
# Используем современный target_link_options вместо set_target_properties
|
||||
target_link_options(space-game001 PRIVATE ${EMSCRIPTEN_LINK_FLAGS})
|
||||
|
||||
# Объединяем флаги в строку и применяем к таргету
|
||||
string(REPLACE ";" " " EMSCRIPTEN_LINK_FLAGS_STR "${EMSCRIPTEN_LINK_FLAGS}")
|
||||
|
||||
set_target_properties(space-game001 PROPERTIES
|
||||
LINK_FLAGS "${EMSCRIPTEN_LINK_FLAGS_STR}"
|
||||
SUFFIX ".html"
|
||||
)
|
||||
|
||||
# Добавляем те же флаги для компиляции (pthread, exceptions и т.д.)
|
||||
target_compile_options(space-game001 PRIVATE -O2 -pthread -fexceptions)
|
||||
|
||||
# 1. Определяем пути
|
||||
set(RESOURCES_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../resources")
|
||||
set(RESOURCES_ZIP "${CMAKE_CURRENT_BINARY_DIR}/resources.zip")
|
||||
|
||||
get_filename_component(RESOURCES_PARENT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/.." ABSOLUTE)
|
||||
|
||||
# 2. Создаем команду для запаковки
|
||||
add_custom_command(
|
||||
OUTPUT "${RESOURCES_ZIP}"
|
||||
# Указываем "resources" как объект упаковки
|
||||
COMMAND ${CMAKE_COMMAND} -E tar "cf" "${RESOURCES_ZIP}" --format=zip "resources"
|
||||
# Запускаем из корня проекта, чтобы путь "resources" был валидным
|
||||
WORKING_DIRECTORY "${RESOURCES_PARENT_DIR}"
|
||||
DEPENDS "${RESOURCES_PARENT_DIR}/resources"
|
||||
COMMENT "Packing resources folder into ${RESOURCES_ZIP}..."
|
||||
)
|
||||
|
||||
# 3. Создаем таргет-пустышку, чтобы CMake знал, что нужно запустить команду
|
||||
add_custom_target(pack_resources DEPENDS "${RESOURCES_ZIP}")
|
||||
|
||||
# 4. Делаем основной проект зависимым от архивации
|
||||
add_dependencies(space-game001 pack_resources)
|
||||
|
||||
# Определяем путь к директории установки (относительно папки билда)
|
||||
set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/public")
|
||||
|
||||
# 1. Устанавливаем основной HTML файл
|
||||
install(TARGETS space-game001
|
||||
RUNTIME DESTINATION .
|
||||
)
|
||||
|
||||
# 2. Устанавливаем сопутствующие файлы (JS, WASM и сгенерированный архив данных)
|
||||
# Emscripten создает их в той же папке, что и таргет
|
||||
install(FILES
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/space-game001.js"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/space-game001.wasm"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/space-game001.data"
|
||||
DESTINATION .
|
||||
)
|
||||
|
||||
install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/space-game001plain.html"
|
||||
DESTINATION .
|
||||
)
|
||||
|
||||
# Если вам все еще нужен сам resources.zip отдельно в папке public:
|
||||
#install(FILES "${RESOURCES_ZIP}" DESTINATION .)
|
||||
|
||||
add_custom_command(TARGET space-game001 POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} --install .
|
||||
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
|
||||
COMMENT "Automatically deploying to public directory..."
|
||||
)
|
||||
33
proj-web/README.md
Normal file
33
proj-web/README.md
Normal file
@ -0,0 +1,33 @@
|
||||
# how to build
|
||||
|
||||
|
||||
Activate the environment:
|
||||
```
|
||||
C:\Work\Projects\emsdk\emsdk.bat activate latest
|
||||
C:\Work\Projects\emsdk\emsdk_env.bat
|
||||
```
|
||||
|
||||
|
||||
Optionally clear cache:
|
||||
```
|
||||
emcc --clear-cache
|
||||
embuilder build sdl2 sdl2_ttf sdl2_image sdl2_image_jpg sdl2_image_png
|
||||
```
|
||||
|
||||
Build:
|
||||
```
|
||||
mkdir build
|
||||
cd build
|
||||
emcmake cmake -G Ninja -DCMAKE_MAKE_PROGRAM="../thirdparty/ninja.exe" ..
|
||||
cmake --build .
|
||||
```
|
||||
|
||||
Optionally install:
|
||||
```
|
||||
cmake --install .
|
||||
```
|
||||
|
||||
Run:
|
||||
```
|
||||
emrun --no_browser --port 8080 public
|
||||
```
|
||||
BIN
proj-web/thirdparty/ninja.exe
vendored
Normal file
BIN
proj-web/thirdparty/ninja.exe
vendored
Normal file
Binary file not shown.
@ -13,7 +13,7 @@
|
||||
namespace ZL
|
||||
{
|
||||
#ifdef EMSCRIPTEN
|
||||
const char* CONST_ZIP_FILE = "space-game001.zip";
|
||||
const char* CONST_ZIP_FILE = "resources.zip";
|
||||
#else
|
||||
const char* CONST_ZIP_FILE = "";
|
||||
#endif
|
||||
|
||||
Loading…
Reference in New Issue
Block a user