CMakeLists.txt 4.6 KB

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