feat: 支持 Linux 客户端打包与跨平台运行
This commit is contained in:
+45
-25
@@ -27,6 +27,7 @@ set(TRANSLATION_TS "${CMAKE_SOURCE_DIR}/i18n/update-client_zh_CN.ts")
|
||||
set(TRANSLATION_QM "${CMAKE_SOURCE_DIR}/i18n/update-client_zh_CN.qm")
|
||||
set(TRANSLATION_SCAN_DIRS
|
||||
"${CMAKE_SOURCE_DIR}/Common"
|
||||
"${CMAKE_SOURCE_DIR}/Bootstrap"
|
||||
"${CMAKE_SOURCE_DIR}/Launcher"
|
||||
"${CMAKE_SOURCE_DIR}/Updater"
|
||||
"${CMAKE_SOURCE_DIR}/MainApp"
|
||||
@@ -55,36 +56,50 @@ add_custom_target(update_client_lupdate
|
||||
)
|
||||
|
||||
# Local-only third-party dependencies. The thirdparty directory is ignored by Git.
|
||||
# Override OpenSSL when it is not copied into thirdparty:
|
||||
# -DSIMCAE_OPENSSL_ROOT=<OpenSSL-Win64 root>
|
||||
# Windows can use thirdparty/OpenSSL-Win64. Linux normally uses system OpenSSL.
|
||||
set(THIRDPARTY_DIR "${CMAKE_SOURCE_DIR}/thirdparty" CACHE PATH "Local third-party dependency root")
|
||||
set(SIMCAE_OPENSSL_ROOT "${THIRDPARTY_DIR}/OpenSSL-Win64" CACHE PATH "OpenSSL Win64 root")
|
||||
|
||||
# OpenSSL manual config. The project expects the Windows OpenSSL layout.
|
||||
if(NOT EXISTS "${SIMCAE_OPENSSL_ROOT}/include/openssl")
|
||||
message(FATAL_ERROR
|
||||
"OpenSSL not found: ${SIMCAE_OPENSSL_ROOT}\n"
|
||||
"Copy OpenSSL-Win64 to thirdparty/OpenSSL-Win64, or configure with "
|
||||
"-DSIMCAE_OPENSSL_ROOT=<OpenSSL-Win64 root>."
|
||||
)
|
||||
endif()
|
||||
set(OPENSSL_INC "${SIMCAE_OPENSSL_ROOT}/include")
|
||||
set(OPENSSL_LIB_DEBUG "${SIMCAE_OPENSSL_ROOT}/lib/VC/x64/MDd")
|
||||
set(OPENSSL_LIB_RELEASE "${SIMCAE_OPENSSL_ROOT}/lib/VC/x64/MD")
|
||||
foreach(OPENSSL_LIB_DIR IN ITEMS "${OPENSSL_LIB_DEBUG}" "${OPENSSL_LIB_RELEASE}")
|
||||
if(NOT EXISTS "${OPENSSL_LIB_DIR}")
|
||||
message(FATAL_ERROR "OpenSSL library directory not found: ${OPENSSL_LIB_DIR}")
|
||||
if(WIN32)
|
||||
set(SIMCAE_OPENSSL_ROOT "${THIRDPARTY_DIR}/OpenSSL-Win64" CACHE PATH "OpenSSL Win64 root")
|
||||
if(NOT EXISTS "${SIMCAE_OPENSSL_ROOT}/include/openssl")
|
||||
message(FATAL_ERROR
|
||||
"OpenSSL not found: ${SIMCAE_OPENSSL_ROOT}\n"
|
||||
"Copy OpenSSL-Win64 to thirdparty/OpenSSL-Win64, or configure with "
|
||||
"-DSIMCAE_OPENSSL_ROOT=<OpenSSL-Win64 root>."
|
||||
)
|
||||
endif()
|
||||
endforeach()
|
||||
set(OPENSSL_INC "${SIMCAE_OPENSSL_ROOT}/include")
|
||||
set(OPENSSL_LIB_DEBUG "${SIMCAE_OPENSSL_ROOT}/lib/VC/x64/MDd")
|
||||
set(OPENSSL_LIB_RELEASE "${SIMCAE_OPENSSL_ROOT}/lib/VC/x64/MD")
|
||||
foreach(OPENSSL_LIB_DIR IN ITEMS "${OPENSSL_LIB_DEBUG}" "${OPENSSL_LIB_RELEASE}")
|
||||
if(NOT EXISTS "${OPENSSL_LIB_DIR}")
|
||||
message(FATAL_ERROR "OpenSSL library directory not found: ${OPENSSL_LIB_DIR}")
|
||||
endif()
|
||||
endforeach()
|
||||
set(SIMCAE_OPENSSL_LINK_LIBRARIES
|
||||
$<$<CONFIG:Debug>:${OPENSSL_LIB_DEBUG}/libssl.lib>
|
||||
$<$<CONFIG:Debug>:${OPENSSL_LIB_DEBUG}/libcrypto.lib>
|
||||
$<$<NOT:$<CONFIG:Debug>>:${OPENSSL_LIB_RELEASE}/libssl.lib>
|
||||
$<$<NOT:$<CONFIG:Debug>>:${OPENSSL_LIB_RELEASE}/libcrypto.lib>
|
||||
)
|
||||
else()
|
||||
find_package(OpenSSL REQUIRED)
|
||||
set(OPENSSL_INC "${OPENSSL_INCLUDE_DIR}")
|
||||
set(SIMCAE_OPENSSL_LINK_LIBRARIES OpenSSL::SSL OpenSSL::Crypto)
|
||||
endif()
|
||||
|
||||
add_compile_definitions(HAVE_OPENSSL=1)
|
||||
|
||||
# 统一输出目录
|
||||
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/out/lib)
|
||||
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/out/bin)
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/out/bin)
|
||||
# 统一输出目录。Windows 保持历史 out/bin;Linux 单独输出,避免和 Windows DLL/PDB 混在一起。
|
||||
if(UNIX AND NOT APPLE)
|
||||
set(SIMCAE_OUTPUT_ROOT ${CMAKE_SOURCE_DIR}/out/linux)
|
||||
else()
|
||||
set(SIMCAE_OUTPUT_ROOT ${CMAKE_SOURCE_DIR}/out)
|
||||
endif()
|
||||
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${SIMCAE_OUTPUT_ROOT}/lib)
|
||||
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${SIMCAE_OUTPUT_ROOT}/bin)
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${SIMCAE_OUTPUT_ROOT}/bin)
|
||||
|
||||
# Bootstrap 不依赖 Qt,可在 Updater 退出后替换 Updater 与 Qt 运行库
|
||||
# Bootstrap 使用 Qt 实现跨平台更新交接,避免直接依赖 Win32 API。
|
||||
add_subdirectory(Bootstrap)
|
||||
|
||||
# 先编译公共库
|
||||
@@ -99,7 +114,11 @@ add_subdirectory(MainApp)
|
||||
set_property(DIRECTORY ${CMAKE_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT Launcher)
|
||||
|
||||
# Copy config templates and static resources to output bin folder.
|
||||
set(APP_CONFIG_SOURCE_FILE "${CMAKE_SOURCE_DIR}/config/app_config.example.json")
|
||||
if(UNIX AND NOT APPLE AND EXISTS "${CMAKE_SOURCE_DIR}/config/app_config.linux.example.json")
|
||||
set(APP_CONFIG_SOURCE_FILE "${CMAKE_SOURCE_DIR}/config/app_config.linux.example.json")
|
||||
else()
|
||||
set(APP_CONFIG_SOURCE_FILE "${CMAKE_SOURCE_DIR}/config/app_config.example.json")
|
||||
endif()
|
||||
set(CONFIG_SOURCE_DIR "${CMAKE_SOURCE_DIR}/config")
|
||||
set(MANIFEST_PUBLIC_KEY_FILE "${CONFIG_SOURCE_DIR}/manifest_public_key.pem")
|
||||
set(INI_TARGET_FOLDER "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}")
|
||||
@@ -130,6 +149,7 @@ add_dependencies(MainApp copy_client_resources)
|
||||
add_dependencies(Launcher update_client_translations)
|
||||
add_dependencies(Updater update_client_translations)
|
||||
add_dependencies(MainApp update_client_translations)
|
||||
add_dependencies(Bootstrap update_client_translations)
|
||||
|
||||
# Install rules for packaging
|
||||
if(EXISTS "${APP_CONFIG_SOURCE_FILE}")
|
||||
|
||||
Reference in New Issue
Block a user