Merge pull request #928 from yvt/chore-msvc-paks

Improve the asset building in MSVC

- The pak building step now tracks its dependencies correctly. Consequently, it will not run if the input files are unchanged.
- The build process now copies `PackageInfo.json` to the correct output directory.
master
yvt 2020-12-18 22:54:15 +09:00 committed by GitHub
commit 7c27e5b25c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 57 additions and 24 deletions

View File

@ -120,7 +120,6 @@ GCC 4.9 / Clang 3.2 or later is recommended because OpenSpades relies on C++11 f
* For OpenAL audio: `openal32.dll`
* For YSR audio: `YSRSpades.dll`, `libgcc_s_dw2-1.dll`, `libstdc++-6.dll`, `pthreadGC2.dll`
9. Download the [Non-free pak](https://github.com/yvt/openspades-paks/releases/download/r33/OpenSpadesDevPackage-r33.zip), extract it, and copy `Nonfree/pak000-Nonfree.pak` to the `Resources` folder inside your build output directory, which is probably `E:/Projects/openspades/openspades.msvc/bin/BUILD_TYPE/Resources`. You can also copy the paks contained in `Official Mods/` folder of OpenSpades 0.0.12b to add more fonts and improve localization support of your build.
10. Copy `Resources/PackageInfo.json` to the `Resources` folder inside your build output directory.
### On macOS (with Ninja)
1. Get the latest version of Xcode and the OpenSpades source code. Install the following prerequisites:

View File

@ -34,47 +34,81 @@ if(OPENSPADES_RESOURCES)
endif()
endif(OPENSPADES_NONFREE_RESOURCES)
# TODO: subgroups for script files
file(GLOB_RECURSE GFX_FILES ${CMAKE_CURRENT_SOURCE_DIR}/Gfx/*)
file(GLOB_RECURSE LICENSE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/License/*)
file(GLOB_RECURSE LOCALE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/Locales/*)
file(GLOB_RECURSE MAP_FILES ${CMAKE_CURRENT_SOURCE_DIR}/Maps/*.vxl)
file(GLOB_RECURSE MODEL_FILES ${CMAKE_CURRENT_SOURCE_DIR}/Models/*)
file(GLOB_RECURSE SCRIPT_FILES ${CMAKE_CURRENT_SOURCE_DIR}/Scripts/*.as)
file(GLOB_RECURSE SHADER_FILES ${CMAKE_CURRENT_SOURCE_DIR}/Shaders/*.fs
${CMAKE_CURRENT_SOURCE_DIR}/Shaders/*.program
${CMAKE_CURRENT_SOURCE_DIR}/Shaders/*.vs)
file(GLOB_RECURSE SOUND_FILES ${CMAKE_CURRENT_SOURCE_DIR}/Sounds/*)
file(GLOB_RECURSE TEXTURE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/Textures/*)
set(PAK_IN_FILES
${GFX_FILES} ${LICENSE_FILES} ${LOCALE_FILES} ${MAP_FILES}
${MODEL_FILES} ${SCRIPT_FILES} ${SHADER_FILES} ${SOUND_FILES}
${TEXTURE_FILES})
set(PACKAGE_INFO_IN_FILE ${CMAKE_CURRENT_SOURCE_DIR}/PackageInfo.json)
set(PACKAGE_INFO_OUT_FILE ${CMAKE_CURRENT_BINARY_DIR}/PackageInfo.json)
source_group("Gfx" FILES ${GFX_FILES})
source_group("License Texts" FILES ${LICENSE_FILES})
source_group("Translations" FILES ${LOCALE_FILES})
source_group("Maps" FILES ${MAP_FILES})
source_group("Models" FILES ${MODEL_FILES})
source_group("Scripts" FILES ${SCRIPT_FILES})
source_group("Shaders" FILES ${SHADER_FILES})
source_group("Sounds" FILES ${SOUND_FILES})
source_group("Textures" FILES ${TEXTURE_FILES})
add_custom_target(OpenSpades_Resources ALL
COMMENT "Packing assets"
SOURCES ${SCRIPT_FILES} ${SHADER_FILES}
DEPENDS ${COMPILED_PAK_FILES})
COMMENT "Building assets"
SOURCES ${PAK_IN_FILES} ${PACKAGE_INFO_IN_FILE}
DEPENDS
${PACKAGE_INFO_OUT_FILE}
${COMPILED_PAK_FILES})
if(WIN32)
if(MSVC)
# multi-config
add_custom_command(
OUTPUT ${COMPILED_PAK_FILES}
COMMAND powershell -ExecutionPolicy Bypass ${CMAKE_CURRENT_SOURCE_DIR}/mkpak.ps1
${CMAKE_BINARY_DIR}/bin/$<CONFIGURATION>/Resources
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
else()
add_custom_command(
OUTPUT ${COMPILED_PAK_FILES}
COMMAND powershell -ExecutionPolicy Bypass ${CMAKE_CURRENT_SOURCE_DIR}/mkpak.ps1
${CMAKE_BINARY_DIR}/bin/Resources
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
endif()
add_custom_command(
OUTPUT ${COMPILED_PAK_FILES}
COMMAND powershell -ExecutionPolicy Bypass
${CMAKE_CURRENT_SOURCE_DIR}/mkpak.ps1
${CMAKE_CURRENT_BINARY_DIR}
COMMENT "Building paks"
DEPENDS ${PAK_IN_FILES} ${CMAKE_CURRENT_SOURCE_DIR}/mkpak.ps1
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
elseif (UNIX)
add_custom_command(
OUTPUT ${COMPILED_PAK_FILES}
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/mkpak.sh
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}
COMMENT "Building paks"
DEPENDS ${PAK_IN_FILES} ${CMAKE_CURRENT_SOURCE_DIR}/mkpak.sh
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
endif()
file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/PackageInfo.json
DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
add_custom_command(
OUTPUT ${PACKAGE_INFO_OUT_FILE}
DEPENDS ${PACKAGE_INFO_IN_FILE}
COMMENT "Copying PackageInfo.json"
COMMAND ${CMAKE_COMMAND} -E copy
${PACKAGE_INFO_IN_FILE} ${PACKAGE_INFO_OUT_FILE})
if (WIN32 AND MSVC)
# copy the output files to the multi-config binary directory
# (you can't use generator expressions (`$<...>`) in `add_custom_command`'s
# `OUTPUT` parameter; it's not supported by CMake.)
add_custom_command(
TARGET OpenSpades_Resources POST_BUILD
COMMENT "Copying assets to the currently-selected configuration's build directory"
COMMAND
${CMAKE_COMMAND} -E make_directory
${CMAKE_BINARY_DIR}/bin/$<CONFIGURATION>/Resources
COMMAND
${CMAKE_COMMAND} -E copy_if_different
${COMPILED_PAK_FILES} ${PACKAGE_INFO_OUT_FILE}
${CMAKE_BINARY_DIR}/bin/$<CONFIGURATION>/Resources)
endif (WIN32 AND MSVC)
endif()
if(UNIX AND NOT APPLE)