CMakeLists.txt 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  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. target_sources(vcmiclient PRIVATE "VCMI_client.rc")
  40. set_target_properties(vcmiclient
  41. PROPERTIES
  42. OUTPUT_NAME "VCMI_client"
  43. PROJECT_LABEL "VCMI_client"
  44. )
  45. set_property(DIRECTORY ${CMAKE_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT vcmiclient)
  46. if(NOT ENABLE_DEBUG_CONSOLE)
  47. set_target_properties(vcmiclient PROPERTIES WIN32_EXECUTABLE)
  48. target_link_libraries(vcmiclient SDL2::SDL2main)
  49. endif()
  50. target_compile_definitions(vcmiclient PRIVATE WINDOWS_IGNORE_PACKING_MISMATCH)
  51. elseif(IOS)
  52. set_target_properties(vcmiclient PROPERTIES
  53. MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_LIST_DIR}/ios/Info.plist"
  54. XCODE_ATTRIBUTE_LD_RUNPATH_SEARCH_PATHS "@executable_path/Frameworks"
  55. XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED "$(CODE_SIGNING_ALLOWED_FOR_APPS)"
  56. XCODE_ATTRIBUTE_ASSETCATALOG_COMPILER_APPICON_NAME AppIcon
  57. )
  58. foreach(XCODE_RESOURCE LaunchScreen.storyboard Images.xcassets Settings.bundle vcmi_logo.png)
  59. set(XCODE_RESOURCE_PATH ios/${XCODE_RESOURCE})
  60. target_sources(vcmiclient PRIVATE ${XCODE_RESOURCE_PATH})
  61. set_source_files_properties(${XCODE_RESOURCE_PATH} PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
  62. # workaround to prevent CMAKE_SKIP_PRECOMPILE_HEADERS being added as compile flag
  63. if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.22.0" AND CMAKE_VERSION VERSION_LESS "3.25.0")
  64. set_source_files_properties(${XCODE_RESOURCE_PATH} PROPERTIES LANGUAGE CXX)
  65. endif()
  66. endforeach()
  67. set(CMAKE_EXE_LINKER_FLAGS "-Wl,-e,_client_main")
  68. endif()
  69. vcmi_set_output_dir(vcmiclient "")
  70. enable_pch(vcmiclient)
  71. if(IOS)
  72. add_custom_command(TARGET vcmiclient POST_BUILD
  73. COMMAND ios/set_build_version.sh "$<TARGET_BUNDLE_CONTENT_DIR:vcmiclient>"
  74. COMMAND ${CMAKE_COMMAND} --install "${CMAKE_BINARY_DIR}" --component "${CMAKE_INSTALL_DEFAULT_COMPONENT_NAME}" --config "$<CONFIG>" --prefix "$<TARGET_BUNDLE_CONTENT_DIR:vcmiclient>"
  75. COMMAND ios/rpath_remove_symlinks.sh
  76. COMMAND ios/codesign.sh
  77. WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
  78. )
  79. install(TARGETS vcmiclient DESTINATION Payload COMPONENT app) # for ipa generation with cpack
  80. elseif(ANDROID)
  81. find_program(androidDeployQt androiddeployqt
  82. PATHS "${qtBinDir}"
  83. )
  84. add_custom_target(android_deploy ALL
  85. COMMAND ${CMAKE_COMMAND} --install "${CMAKE_BINARY_DIR}" --config "$<CONFIG>" --prefix "${androidQtBuildDir}"
  86. COMMAND ${CMAKE_COMMAND} -E env "ORG_GRADLE_PROJECT_SDL_JAVA_SRC_DIR=${SDL_JAVA_SRC_DIR}" --
  87. "${androidDeployQt}" --input "${CMAKE_BINARY_DIR}/androiddeployqt.json" --output "${androidQtBuildDir}" --android-platform "android-${ANDROID_TARGET_SDK_VERSION}" --verbose $<$<NOT:$<CONFIG:Debug>>:--release> ${ANDROIDDEPLOYQT_OPTIONS}
  88. COMMAND_EXPAND_LISTS
  89. VERBATIM
  90. COMMENT "Create android package"
  91. )
  92. add_dependencies(android_deploy vcmiclient)
  93. else()
  94. install(TARGETS vcmiclient DESTINATION ${BIN_DIR})
  95. endif()
  96. #install icons and desktop file on Linux
  97. if(NOT WIN32 AND NOT APPLE AND NOT ANDROID)
  98. foreach(iconSize 16 22 32 48 64 128 256 512 1024 2048)
  99. install(FILES "icons/vcmiclient.${iconSize}x${iconSize}.png"
  100. DESTINATION "share/icons/hicolor/${iconSize}x${iconSize}/apps"
  101. RENAME vcmiclient.png
  102. )
  103. endforeach()
  104. install(FILES icons/vcmiclient.svg
  105. DESTINATION share/icons/hicolor/scalable/apps
  106. RENAME vcmiclient.svg
  107. )
  108. install(FILES icons/vcmiclient.desktop
  109. DESTINATION share/applications
  110. )
  111. endif()