XcodeBundles.cmake 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. # check if Xcode and CMake have the same understanding of Bundle layout
  2. cmake_minimum_required(VERSION 3.3)
  3. enable_language(C)
  4. if(CMAKE_SYSTEM_NAME STREQUAL "iOS")
  5. set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED "NO")
  6. set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED "NO")
  7. set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "")
  8. set(CMAKE_XCODE_ATTRIBUTE_ENABLE_BITCODE "NO")
  9. endif()
  10. if(CMAKE_SYSTEM_NAME STREQUAL "tvOS" OR CMAKE_SYSTEM_NAME STREQUAL "watchOS")
  11. set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED "NO")
  12. set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED "NO")
  13. set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "")
  14. set(CMAKE_XCODE_ATTRIBUTE_ENABLE_BITCODE "YES")
  15. endif()
  16. # App Bundle
  17. add_executable(AppBundle MACOSX_BUNDLE main.m)
  18. add_custom_target(AppBundleTest ALL
  19. COMMAND ${CMAKE_COMMAND} -E copy
  20. "$<TARGET_FILE:AppBundle>" "$<TARGET_FILE:AppBundle>.old")
  21. add_dependencies(AppBundleTest AppBundle)
  22. # with custom extension
  23. if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
  24. add_executable(AppBundleExt MACOSX_BUNDLE main.m)
  25. set_target_properties(AppBundleExt PROPERTIES BUNDLE_EXTENSION "foo")
  26. install(TARGETS AppBundleExt BUNDLE DESTINATION FooExtension)
  27. add_custom_target(AppBundleExtTest ALL
  28. COMMAND ${CMAKE_COMMAND} -E copy
  29. "$<TARGET_FILE:AppBundleExt>" "$<TARGET_FILE:AppBundleExt>.old")
  30. add_dependencies(AppBundleExtTest AppBundleExt)
  31. endif()
  32. # Shared Framework (not supported for iOS on Xcode < 6)
  33. if(NOT CMAKE_SYSTEM_NAME STREQUAL "iOS" OR NOT XCODE_VERSION VERSION_LESS 6)
  34. add_library(SharedFramework SHARED main.c)
  35. set_target_properties(SharedFramework PROPERTIES FRAMEWORK TRUE)
  36. add_custom_target(SharedFrameworkTest ALL
  37. COMMAND ${CMAKE_COMMAND} -E copy
  38. "$<TARGET_BUNDLE_DIR:SharedFramework>" "$<TARGET_BUNDLE_DIR:SharedFramework>.old"
  39. COMMAND ${CMAKE_COMMAND} -E copy
  40. "$<TARGET_BUNDLE_CONTENT_DIR:SharedFramework>" "$<TARGET_BUNDLE_CONTENT_DIR:SharedFramework>.old"
  41. COMMAND ${CMAKE_COMMAND} -E copy
  42. "$<TARGET_FILE:SharedFramework>" "$<TARGET_FILE:SharedFramework>.old")
  43. add_dependencies(SharedFrameworkTest SharedFramework)
  44. # with custom extension
  45. add_library(SharedFrameworkExt SHARED main.c)
  46. set_target_properties(SharedFrameworkExt PROPERTIES FRAMEWORK TRUE)
  47. set_target_properties(SharedFrameworkExt PROPERTIES BUNDLE_EXTENSION "foo")
  48. install(TARGETS SharedFrameworkExt FRAMEWORK DESTINATION FooExtension)
  49. add_custom_target(SharedFrameworkExtTest ALL
  50. COMMAND ${CMAKE_COMMAND} -E copy
  51. "$<TARGET_BUNDLE_DIR:SharedFrameworkExt>" "$<TARGET_BUNDLE_DIR:SharedFrameworkExt>.old"
  52. COMMAND ${CMAKE_COMMAND} -E copy
  53. "$<TARGET_BUNDLE_CONTENT_DIR:SharedFrameworkExt>" "$<TARGET_BUNDLE_CONTENT_DIR:SharedFrameworkExt>.old"
  54. COMMAND ${CMAKE_COMMAND} -E copy
  55. "$<TARGET_FILE:SharedFrameworkExt>" "$<TARGET_FILE:SharedFrameworkExt>.old")
  56. add_dependencies(SharedFrameworkExtTest SharedFrameworkExt)
  57. endif()
  58. # Static Framework (not supported for Xcode < 6)
  59. if(NOT XCODE_VERSION VERSION_LESS 6)
  60. add_library(StaticFramework STATIC main.c)
  61. set_target_properties(StaticFramework PROPERTIES FRAMEWORK TRUE)
  62. add_custom_target(StaticFrameworkTest ALL
  63. COMMAND ${CMAKE_COMMAND} -E copy
  64. "$<TARGET_BUNDLE_DIR:StaticFramework>" "$<TARGET_BUNDLE_DIR:StaticFramework>.old"
  65. COMMAND ${CMAKE_COMMAND} -E copy
  66. "$<TARGET_BUNDLE_CONTENT_DIR:StaticFramework>" "$<TARGET_BUNDLE_CONTENT_DIR:StaticFramework>.old"
  67. COMMAND ${CMAKE_COMMAND} -E copy
  68. "$<TARGET_FILE:StaticFramework>" "$<TARGET_FILE:StaticFramework>.old")
  69. add_dependencies(StaticFrameworkTest StaticFramework)
  70. # with custom extension
  71. add_library(StaticFrameworkExt STATIC main.c)
  72. set_target_properties(StaticFrameworkExt PROPERTIES FRAMEWORK TRUE)
  73. set_target_properties(StaticFrameworkExt PROPERTIES BUNDLE_EXTENSION "foo")
  74. install(TARGETS StaticFrameworkExt FRAMEWORK DESTINATION StaticFooExtension)
  75. add_custom_target(StaticFrameworkExtTest ALL
  76. COMMAND ${CMAKE_COMMAND} -E copy
  77. "$<TARGET_BUNDLE_DIR:StaticFrameworkExt>" "$<TARGET_BUNDLE_DIR:StaticFrameworkExt>.old"
  78. COMMAND ${CMAKE_COMMAND} -E copy
  79. "$<TARGET_BUNDLE_CONTENT_DIR:StaticFrameworkExt>" "$<TARGET_BUNDLE_CONTENT_DIR:StaticFrameworkExt>.old"
  80. COMMAND ${CMAKE_COMMAND} -E copy
  81. "$<TARGET_FILE:StaticFrameworkExt>" "$<TARGET_FILE:StaticFrameworkExt>.old")
  82. add_dependencies(StaticFrameworkExtTest StaticFrameworkExt)
  83. endif()
  84. # Bundle
  85. if(NOT CMAKE_XCODE_ATTRIBUTE_ENABLE_BITCODE)
  86. add_library(Bundle MODULE main.c)
  87. set_target_properties(Bundle PROPERTIES BUNDLE TRUE)
  88. add_custom_target(BundleTest ALL
  89. COMMAND ${CMAKE_COMMAND} -E copy
  90. "$<TARGET_BUNDLE_DIR:Bundle>" "$<TARGET_BUNDLE_DIR:Bundle>.old"
  91. COMMAND ${CMAKE_COMMAND} -E copy
  92. "$<TARGET_BUNDLE_CONTENT_DIR:Bundle>" "$<TARGET_BUNDLE_CONTENT_DIR:Bundle>.old"
  93. COMMAND ${CMAKE_COMMAND} -E copy
  94. "$<TARGET_FILE:Bundle>" "$<TARGET_FILE:Bundle>.old")
  95. add_dependencies(BundleTest Bundle)
  96. # with custom extension
  97. add_library(BundleExt MODULE main.c)
  98. set_target_properties(BundleExt PROPERTIES BUNDLE TRUE)
  99. set_target_properties(BundleExt PROPERTIES BUNDLE_EXTENSION "foo")
  100. install(TARGETS BundleExt LIBRARY DESTINATION FooExtension)
  101. add_custom_target(BundleExtTest ALL
  102. COMMAND ${CMAKE_COMMAND} -E copy
  103. "$<TARGET_BUNDLE_DIR:BundleExt>" "$<TARGET_BUNDLE_DIR:BundleExt>.old"
  104. COMMAND ${CMAKE_COMMAND} -E copy
  105. "$<TARGET_BUNDLE_CONTENT_DIR:BundleExt>" "$<TARGET_BUNDLE_CONTENT_DIR:BundleExt>.old"
  106. COMMAND ${CMAKE_COMMAND} -E copy
  107. "$<TARGET_FILE:BundleExt>" "$<TARGET_FILE:BundleExt>.old")
  108. add_dependencies(BundleExtTest BundleExt)
  109. endif()