Add Xbox UWP build workflow

This commit is contained in:
Caorthann
2026-08-04 15:36:35 +01:00
parent 3b490bc42f
commit ad9b03fe56
28 changed files with 1311 additions and 572 deletions
+57 -9
View File
@@ -12,6 +12,31 @@ set(SDL2_ROOT "${THIRD_PARTY_ROOT}/sdl2")
set(ANGLE_ROOT "${THIRD_PARTY_ROOT}/angle")
set(RUNTIME_ROOT "${THIRD_PARTY_ROOT}/runtime")
set(GEN1RECOMP_VERSION "0.0.0" CACHE STRING "Gen1Recomp release version")
if(NOT GEN1RECOMP_VERSION MATCHES "^[0-9]+\\.[0-9]+\\.[0-9]+$")
message(FATAL_ERROR "GEN1RECOMP_VERSION must use X.Y.Z format.")
endif()
string(REPLACE "." ";" VERSION_PARTS "${GEN1RECOMP_VERSION}")
foreach(part IN LISTS VERSION_PARTS)
if(part GREATER 65535)
message(FATAL_ERROR "MSIX version components cannot exceed 65535.")
endif()
endforeach()
set(GEN1RECOMP_UWP_PUBLISHER "CN=Gen1Recomp" CACHE STRING
"Publisher subject from the MSIX signing certificate")
set(UWP_PUBLISHER_XML "${GEN1RECOMP_UWP_PUBLISHER}")
string(REPLACE "&" "&" UWP_PUBLISHER_XML "${UWP_PUBLISHER_XML}")
string(REPLACE "\"" """ UWP_PUBLISHER_XML "${UWP_PUBLISHER_XML}")
string(REPLACE "<" "&lt;" UWP_PUBLISHER_XML "${UWP_PUBLISHER_XML}")
string(REPLACE ">" "&gt;" UWP_PUBLISHER_XML "${UWP_PUBLISHER_XML}")
set(UWP_PACKAGE_VERSION "${GEN1RECOMP_VERSION}.0")
set(PACKAGE_MANIFEST "${CMAKE_CURRENT_BINARY_DIR}/Package.appxmanifest")
configure_file(
"${CMAKE_CURRENT_LIST_DIR}/Package.appxmanifest.in"
"${PACKAGE_MANIFEST}"
@ONLY
)
set(REQUIRED_FILES
"${THIRD_PARTY_ROOT}/manifest.json"
"${LOVE_ROOT}/lib/lovestatic.lib"
@@ -32,19 +57,28 @@ foreach(path IN LISTS REQUIRED_FILES)
endif()
endforeach()
set(GEN1RECOMP_LOVE "${GAME_ROOT}/.bazinga/work/game.love" CACHE FILEPATH
"Path to the game.love payload produced by scripts/pack_love.sh")
if(NOT EXISTS "${GEN1RECOMP_LOVE}")
message(FATAL_ERROR
"Missing game.love payload: ${GEN1RECOMP_LOVE}\n"
"Build it with scripts/build_xbox_uwp.sh or scripts/pack_love.sh.")
endif()
set(GAME_ARCHIVE "${CMAKE_CURRENT_BINARY_DIR}/gen1recomp.love")
set_source_files_properties("${GAME_ARCHIVE}" PROPERTIES GENERATED TRUE)
add_custom_target(gen1recomp_love ALL
COMMAND powershell -NoProfile -ExecutionPolicy Bypass -File
"${CMAKE_CURRENT_LIST_DIR}/scripts/package-game.ps1"
-SourceRoot "${GAME_ROOT}" -Output "${GAME_ARCHIVE}"
BYPRODUCTS "${GAME_ARCHIVE}"
add_custom_command(
OUTPUT "${GAME_ARCHIVE}"
COMMAND "${CMAKE_COMMAND}" -E copy_if_different
"${GEN1RECOMP_LOVE}" "${GAME_ARCHIVE}"
DEPENDS "${GEN1RECOMP_LOVE}"
VERBATIM
)
add_custom_target(gen1recomp_love ALL DEPENDS "${GAME_ARCHIVE}")
set_source_files_properties("${GAME_ARCHIVE}" PROPERTIES GENERATED TRUE)
add_custom_target(verify_uwp_dependencies
COMMAND powershell -NoProfile -ExecutionPolicy Bypass -File
"${CMAKE_CURRENT_LIST_DIR}/scripts/verify-dependencies.ps1"
"${GAME_ROOT}/scripts/xbox-uwp/verify_dependencies.ps1"
VERBATIM
)
@@ -53,6 +87,7 @@ add_dependencies(${PROJECT_NAME} gen1recomp_love verify_uwp_dependencies)
set_target_properties(${PROJECT_NAME} PROPERTIES
CXX_STANDARD 17
CXX_STANDARD_REQUIRED YES
VS_GLOBAL_DefaultLanguage "en-US"
VS_SDK_REFERENCES "Microsoft.VCLibs, Version=14.0"
)
target_include_directories(${PROJECT_NAME} PRIVATE "${SDL2_ROOT}/include/SDL2")
@@ -65,7 +100,7 @@ target_link_libraries(${PROJECT_NAME} PRIVATE
)
set(PACKAGE_ROOT_FILES
"${CMAKE_CURRENT_LIST_DIR}/Package.appxmanifest"
"${PACKAGE_MANIFEST}"
"${GAME_ARCHIVE}"
"${LOVE_ROOT}/bin/love.dll"
"${LOVE_ROOT}/bin/lua51.dll"
@@ -74,6 +109,7 @@ set(PACKAGE_ROOT_FILES
"${ANGLE_ROOT}/bin/libGLESv2.dll"
"${ANGLE_ROOT}/bin/d3dcompiler_47.dll"
)
set_source_files_properties("${PACKAGE_MANIFEST}" PROPERTIES GENERATED TRUE)
set(RUNTIME_NAMES
brotlicommon.dll brotlidec.dll bz2.dll fmt.dll freetype.dll libpng16.dll
@@ -98,4 +134,16 @@ set_source_files_properties(${PACKAGE_ASSETS} PROPERTIES
VS_DEPLOYMENT_CONTENT TRUE
VS_DEPLOYMENT_LOCATION "Assets"
)
target_sources(${PROJECT_NAME} PRIVATE ${PACKAGE_ROOT_FILES} ${PACKAGE_ASSETS})
file(GLOB PACKAGE_LICENSES CONFIGURE_DEPENDS "${THIRD_PARTY_ROOT}/licenses/*.txt")
set_source_files_properties(${PACKAGE_LICENSES} PROPERTIES
VS_TOOL_OVERRIDE "Content"
VS_COPY_TO_OUT_DIR Always
VS_DEPLOYMENT_CONTENT TRUE
VS_DEPLOYMENT_LOCATION "licenses"
)
target_sources(${PROJECT_NAME} PRIVATE
${PACKAGE_ROOT_FILES}
${PACKAGE_ASSETS}
${PACKAGE_LICENSES}
)