init_target.cmake 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. # This file is part of Desktop App Toolkit,
  2. # a set of libraries for developing nice desktop applications.
  3. #
  4. # For license and copyright information please follow this link:
  5. # https://github.com/desktop-app/legal/blob/master/LEGAL
  6. set(MAXIMUM_CXX_STANDARD cxx_std_20)
  7. function(init_target_folder target_name folder_name)
  8. if (NOT "${folder_name}" STREQUAL "")
  9. set_target_properties(${target_name} PROPERTIES FOLDER ${folder_name})
  10. endif()
  11. endfunction()
  12. function(init_target target_name) # init_target(my_target [cxx_std_..] folder_name)
  13. set(standard ${MAXIMUM_CXX_STANDARD})
  14. foreach (entry ${ARGN})
  15. if (${entry} STREQUAL cxx_std_14 OR ${entry} STREQUAL cxx_std_11 OR ${entry} STREQUAL cxx_std_17)
  16. set(standard ${entry})
  17. else()
  18. init_target_folder(${target_name} ${entry})
  19. endif()
  20. endforeach()
  21. target_compile_features(${target_name} PRIVATE ${standard})
  22. target_link_libraries(${target_name} PRIVATE desktop-app::common_options)
  23. set_target_properties(${target_name} PROPERTIES
  24. XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_WEAK YES
  25. XCODE_ATTRIBUTE_GCC_INLINES_ARE_PRIVATE_EXTERN YES
  26. XCODE_ATTRIBUTE_GCC_SYMBOLS_PRIVATE_EXTERN YES
  27. MSVC_RUNTIME_LIBRARY MultiThreaded$<$<CONFIG:Debug>:Debug>
  28. )
  29. if (DESKTOP_APP_SPECIAL_TARGET)
  30. if (WIN32)
  31. set_property(TARGET ${target_name} APPEND_STRING PROPERTY STATIC_LIBRARY_OPTIONS "$<IF:$<CONFIG:Debug>,,/LTCG>")
  32. elseif (APPLE)
  33. set_target_properties(${target_name} PROPERTIES
  34. XCODE_ATTRIBUTE_GCC_OPTIMIZATION_LEVEL $<IF:$<CONFIG:Debug>,0,fast>
  35. XCODE_ATTRIBUTE_LLVM_LTO $<IF:$<CONFIG:Debug>,NO,YES>
  36. )
  37. else()
  38. set_target_properties(${target_name} PROPERTIES
  39. INTERPROCEDURAL_OPTIMIZATION_RELEASE True
  40. INTERPROCEDURAL_OPTIMIZATION_RELWITHDEBINFO True
  41. INTERPROCEDURAL_OPTIMIZATION_MINSIZEREL True
  42. )
  43. endif()
  44. endif()
  45. endfunction()
  46. # This code is not supposed to run on build machine, only on target machine.
  47. function(init_non_host_target target_name)
  48. init_target(${ARGV})
  49. if (APPLE)
  50. set_target_properties(${target_name} PROPERTIES
  51. OSX_ARCHITECTURES "${DESKTOP_APP_MAC_ARCH}"
  52. )
  53. endif()
  54. endfunction()