CMakeLists.txt 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. set(clientapp_SRCS
  2. StdInc.cpp
  3. EntryPoint.cpp
  4. )
  5. set(clientapp_HEADERS
  6. StdInc.h
  7. )
  8. if(IOS)
  9. set(clientapp_SRCS ${clientapp_SRCS}
  10. CFocusableHelper.cpp
  11. ios/GameChatKeyboardHandler.m
  12. ios/main.m
  13. ios/startSDL.mm
  14. )
  15. set(clientapp_HEADERS ${clientapp_HEADERS}
  16. CFocusableHelper.h
  17. ios/GameChatKeyboardHandler.h
  18. ios/startSDL.h
  19. )
  20. endif()
  21. assign_source_group(${clientapp_SRCS} ${clientapp_HEADERS})
  22. if(ANDROID)
  23. add_library(vcmiclient SHARED ${clientapp_SRCS} ${clientapp_HEADERS})
  24. set_target_properties(vcmiclient PROPERTIES
  25. OUTPUT_NAME "vcmiclient_${ANDROID_ABI}" # required by Qt
  26. )
  27. else()
  28. add_executable(vcmiclient ${clientapp_SRCS} ${clientapp_HEADERS})
  29. vcmi_create_exe_shim(vcmiclient)
  30. endif()
  31. target_link_libraries(vcmiclient PRIVATE vcmiclientcommon)
  32. if(ENABLE_SINGLE_APP_BUILD AND ENABLE_LAUNCHER)
  33. target_link_libraries(vcmiclient PRIVATE vcmilauncher)
  34. endif()
  35. target_include_directories(vcmiclient
  36. PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}
  37. )
  38. if(WIN32)
  39. set(VCMI_FILE_DESCRIPTION "VCMI Client")
  40. set(VCMI_ORIGINAL_FILENAME "VCMI_client.exe")
  41. set(VCMI_ICON_RESOURCE "IDI_ICON1 ICON \"${CMAKE_CURRENT_SOURCE_DIR}/icons/vcmi.ico\"")
  42. set(client_VERSIONINFO_RC "${CMAKE_CURRENT_BINARY_DIR}/VCMI_client_versioninfo.rc")
  43. configure_file("${CMAKE_SOURCE_DIR}/win/WindowsFileInfo.rc.in" "${client_VERSIONINFO_RC}" @ONLY)
  44. target_sources(vcmiclient PRIVATE "${client_VERSIONINFO_RC}")
  45. set_target_properties(vcmiclient
  46. PROPERTIES
  47. OUTPUT_NAME "VCMI_client"
  48. PROJECT_LABEL "VCMI_client"
  49. )
  50. set_property(DIRECTORY ${CMAKE_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT vcmiclient)
  51. if(NOT ENABLE_DEBUG_CONSOLE)
  52. set_target_properties(vcmiclient PROPERTIES WIN32_EXECUTABLE)
  53. target_link_libraries(vcmiclient SDL2::SDL2main)
  54. endif()
  55. target_compile_definitions(vcmiclient PRIVATE WINDOWS_IGNORE_PACKING_MISMATCH)
  56. elseif(IOS)
  57. set_target_properties(vcmiclient PROPERTIES
  58. MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_LIST_DIR}/ios/Info.plist"
  59. XCODE_ATTRIBUTE_LD_RUNPATH_SEARCH_PATHS "@executable_path/Frameworks"
  60. XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED "$(CODE_SIGNING_ALLOWED_FOR_APPS)"
  61. XCODE_ATTRIBUTE_ASSETCATALOG_COMPILER_APPICON_NAME AppIcon
  62. )
  63. foreach(XCODE_RESOURCE LaunchScreen.storyboard Images.xcassets Settings.bundle vcmi_logo.png)
  64. set(XCODE_RESOURCE_PATH ios/${XCODE_RESOURCE})
  65. target_sources(vcmiclient PRIVATE ${XCODE_RESOURCE_PATH})
  66. set_source_files_properties(${XCODE_RESOURCE_PATH} PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
  67. # workaround to prevent CMAKE_SKIP_PRECOMPILE_HEADERS being added as compile flag
  68. if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.22.0" AND CMAKE_VERSION VERSION_LESS "3.25.0")
  69. set_source_files_properties(${XCODE_RESOURCE_PATH} PROPERTIES LANGUAGE CXX)
  70. endif()
  71. endforeach()
  72. set(CMAKE_EXE_LINKER_FLAGS "-Wl,-e,_client_main")
  73. endif()
  74. vcmi_set_output_dir(vcmiclient "")
  75. enable_pch(vcmiclient)
  76. if(IOS)
  77. add_custom_command(TARGET vcmiclient POST_BUILD
  78. COMMAND ios/set_build_version.sh "$<TARGET_BUNDLE_CONTENT_DIR:vcmiclient>"
  79. COMMAND ${CMAKE_COMMAND} --install "${CMAKE_BINARY_DIR}" --component "${CMAKE_INSTALL_DEFAULT_COMPONENT_NAME}" --config "$<CONFIG>" --prefix "$<TARGET_BUNDLE_CONTENT_DIR:vcmiclient>"
  80. COMMAND ios/rpath_remove_symlinks.sh
  81. COMMAND ios/codesign.sh
  82. WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
  83. )
  84. install(TARGETS vcmiclient DESTINATION Payload COMPONENT app) # for ipa generation with cpack
  85. elseif(ANDROID)
  86. find_program(androidDeployQt androiddeployqt
  87. PATHS "${qtBinDir}"
  88. )
  89. add_custom_target(android_deploy ALL
  90. COMMAND ${CMAKE_COMMAND} --install "${CMAKE_BINARY_DIR}" --config "$<CONFIG>" --prefix "${androidQtBuildDir}"
  91. COMMAND ${CMAKE_COMMAND} -E env "ORG_GRADLE_PROJECT_SDL_JAVA_SRC_DIR=${SDL_JAVA_SRC_DIR}" --
  92. "${androidDeployQt}" --input "${CMAKE_BINARY_DIR}/androiddeployqt.json" --output "${androidQtBuildDir}" --android-platform "android-${ANDROID_TARGET_SDK_VERSION}" --verbose $<$<NOT:$<CONFIG:Debug>>:--release> ${ANDROIDDEPLOYQT_OPTIONS}
  93. COMMAND_EXPAND_LISTS
  94. VERBATIM
  95. COMMENT "Create android package"
  96. )
  97. add_dependencies(android_deploy vcmiclient)
  98. else()
  99. install(TARGETS vcmiclient DESTINATION ${BIN_DIR})
  100. endif()
  101. #install icons and desktop file on Linux
  102. if(NOT WIN32 AND NOT APPLE AND NOT ANDROID)
  103. foreach(iconSize 16 22 32 48 64 128 256 512 1024 2048)
  104. install(FILES "icons/vcmiclient.${iconSize}x${iconSize}.png"
  105. DESTINATION "share/icons/hicolor/${iconSize}x${iconSize}/apps"
  106. RENAME vcmiclient.png
  107. )
  108. endforeach()
  109. install(FILES icons/vcmiclient.svg
  110. DESTINATION share/icons/hicolor/scalable/apps
  111. RENAME vcmiclient.svg
  112. )
  113. install(FILES icons/vcmiclient.desktop
  114. DESTINATION share/applications
  115. )
  116. endif()