CMakeLists.txt 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  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. vcmi_install_conan_deps("\${CMAKE_INSTALL_PREFIX}")
  80. add_custom_command(TARGET vcmiclient POST_BUILD
  81. COMMAND ios/set_build_version.sh "$<TARGET_BUNDLE_CONTENT_DIR:vcmiclient>"
  82. COMMAND ${CMAKE_COMMAND} --install "${CMAKE_BINARY_DIR}" --component "${CMAKE_INSTALL_DEFAULT_COMPONENT_NAME}" --config "$<CONFIG>" --prefix "$<TARGET_BUNDLE_CONTENT_DIR:vcmiclient>"
  83. COMMAND ios/rpath_remove_symlinks.sh
  84. COMMAND ios/codesign.sh
  85. WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
  86. )
  87. install(TARGETS vcmiclient DESTINATION Payload COMPONENT app) # for ipa generation with cpack
  88. elseif(ANDROID)
  89. find_program(androidDeployQt androiddeployqt
  90. PATHS "${qtBinDir}"
  91. )
  92. vcmi_install_conan_deps("\${CMAKE_INSTALL_PREFIX}/${LIB_DIR}")
  93. add_custom_target(android_deploy ALL
  94. COMMAND ${CMAKE_COMMAND} --install "${CMAKE_BINARY_DIR}" --config "$<CONFIG>" --prefix "${androidQtBuildDir}"
  95. COMMAND "${androidDeployQt}" --input "${CMAKE_BINARY_DIR}/androiddeployqt.json" --output "${androidQtBuildDir}" --android-platform "android-${ANDROID_TARGET_SDK_VERSION}" --verbose $<$<NOT:$<CONFIG:Debug>>:--release> ${ANDROIDDEPLOYQT_OPTIONS}
  96. COMMAND_EXPAND_LISTS
  97. VERBATIM
  98. COMMENT "Create android package"
  99. )
  100. add_dependencies(android_deploy vcmiclient)
  101. else()
  102. install(TARGETS vcmiclient DESTINATION ${BIN_DIR})
  103. endif()
  104. #install icons and desktop file on Linux
  105. if(NOT WIN32 AND NOT APPLE AND NOT ANDROID)
  106. #FIXME: move to client makefile?
  107. foreach(iconSize 16 22 32 48 64 128 256 512 1024 2048)
  108. install(FILES "icons/vcmiclient.${iconSize}x${iconSize}.png"
  109. DESTINATION "share/icons/hicolor/${iconSize}x${iconSize}/apps"
  110. RENAME vcmiclient.png
  111. )
  112. endforeach()
  113. install(FILES icons/vcmiclient.svg
  114. DESTINATION share/icons/hicolor/scalable/apps
  115. RENAME vcmiclient.svg
  116. )
  117. install(FILES icons/vcmiclient.desktop
  118. DESTINATION share/applications
  119. )
  120. endif()