1
0

XcodeBundles.cmake 5.4 KB

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