CMakeLists.txt 4.4 KB

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