mirror of
https://github.com/bryanthaboi/gen1recomp.git
synced 2026-08-12 08:21:02 +02:00
150 lines
5.2 KiB
CMake
150 lines
5.2 KiB
CMake
cmake_minimum_required(VERSION 3.24)
|
|
project(Gen1RecompUWP LANGUAGES CXX)
|
|
|
|
if(NOT CMAKE_SYSTEM_NAME STREQUAL "WindowsStore")
|
|
message(FATAL_ERROR "Configure with a WindowsStore preset.")
|
|
endif()
|
|
|
|
get_filename_component(GAME_ROOT "${CMAKE_CURRENT_LIST_DIR}/../.." ABSOLUTE)
|
|
set(THIRD_PARTY_ROOT "${CMAKE_CURRENT_LIST_DIR}/third_party")
|
|
set(LOVE_ROOT "${THIRD_PARTY_ROOT}/love")
|
|
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 "<" "<" UWP_PUBLISHER_XML "${UWP_PUBLISHER_XML}")
|
|
string(REPLACE ">" ">" 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"
|
|
"${LOVE_ROOT}/lib/liblove.lib"
|
|
"${LOVE_ROOT}/lib/lua51.lib"
|
|
"${LOVE_ROOT}/bin/love.dll"
|
|
"${LOVE_ROOT}/bin/lua51.dll"
|
|
"${SDL2_ROOT}/include/SDL2/SDL.h"
|
|
"${SDL2_ROOT}/lib/SDL2.lib"
|
|
"${SDL2_ROOT}/bin/SDL2.dll"
|
|
"${ANGLE_ROOT}/bin/libEGL.dll"
|
|
"${ANGLE_ROOT}/bin/libGLESv2.dll"
|
|
"${ANGLE_ROOT}/bin/d3dcompiler_47.dll"
|
|
)
|
|
foreach(path IN LISTS REQUIRED_FILES)
|
|
if(NOT EXISTS "${path}")
|
|
message(FATAL_ERROR "Missing UWP dependency: ${path}")
|
|
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")
|
|
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
|
|
"${GAME_ROOT}/scripts/xbox-uwp/verify_dependencies.ps1"
|
|
VERBATIM
|
|
)
|
|
|
|
add_executable(${PROJECT_NAME} WIN32 "app/main.cpp")
|
|
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")
|
|
target_link_libraries(${PROJECT_NAME} PRIVATE
|
|
"${LOVE_ROOT}/lib/lovestatic.lib"
|
|
"${LOVE_ROOT}/lib/liblove.lib"
|
|
"${SDL2_ROOT}/lib/SDL2.lib"
|
|
"${LOVE_ROOT}/lib/lua51.lib"
|
|
WindowsApp.lib
|
|
)
|
|
|
|
set(PACKAGE_ROOT_FILES
|
|
"${PACKAGE_MANIFEST}"
|
|
"${GAME_ARCHIVE}"
|
|
"${LOVE_ROOT}/bin/love.dll"
|
|
"${LOVE_ROOT}/bin/lua51.dll"
|
|
"${SDL2_ROOT}/bin/SDL2.dll"
|
|
"${ANGLE_ROOT}/bin/libEGL.dll"
|
|
"${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
|
|
OpenAL32.dll theora.dll theoradec.dll vorbis.dll vorbisfile.dll ogg.dll z.dll
|
|
)
|
|
foreach(name IN LISTS RUNTIME_NAMES)
|
|
set(runtime "${RUNTIME_ROOT}/bin/${name}")
|
|
if(NOT EXISTS "${runtime}")
|
|
message(FATAL_ERROR "Missing UWP runtime DLL: ${name}")
|
|
endif()
|
|
list(APPEND PACKAGE_ROOT_FILES "${runtime}")
|
|
endforeach()
|
|
|
|
set_source_files_properties(${PACKAGE_ROOT_FILES} PROPERTIES
|
|
VS_COPY_TO_OUT_DIR Always
|
|
VS_DEPLOYMENT_CONTENT TRUE
|
|
VS_DEPLOYMENT_LOCATION "."
|
|
)
|
|
|
|
file(GLOB PACKAGE_ASSETS CONFIGURE_DEPENDS "${CMAKE_CURRENT_LIST_DIR}/Assets/*.png")
|
|
set_source_files_properties(${PACKAGE_ASSETS} PROPERTIES
|
|
VS_DEPLOYMENT_CONTENT TRUE
|
|
VS_DEPLOYMENT_LOCATION "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}
|
|
)
|