You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

105 lines
3.9 KiB

1 year ago
  1. # /cmake/IosOptions.cmake functions
  2. # functions are called from root cmake
  3. # it is necessary once use: include(<path to>/cmake/IosOptions.cmake)
  4. function(set_ios_options)
  5. set(FULL_VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH} PARENT_SCOPE)
  6. # boolean is not recognized for some reason
  7. option(IOS_BUILD_ONLY_ACTIVE_ARCH "To build for only active architecture, not universal binary for every valid arch" OFF)
  8. option(IOS_BUILD_WITH_BITCODE "To build iOS targets with bitcode enabled" ON)
  9. if(IOS_BUILD_ONLY_ACTIVE_ARCH)
  10. set(IOS_ONLY_ACTIVE_ARCH_XCODE_FORMAT YES PARENT_SCOPE)
  11. else()
  12. set(IOS_ONLY_ACTIVE_ARCH_XCODE_FORMAT NO PARENT_SCOPE)
  13. endif()
  14. if(IOS_BUILD_WITH_BITCODE)
  15. set(IOS_ENABLE_BITCODE_XCODE_FORMAT YES PARENT_SCOPE)
  16. else()
  17. set(IOS_ENABLE_BITCODE_XCODE_FORMAT NO PARENT_SCOPE)
  18. endif()
  19. endfunction()
  20. # OUTPUT_NAME parameter is optional, if it is empty please pass ""
  21. # example: set_ios_framework_properties(SDK "ru.visionlabs.FaceEngine" ${FULL_VERSION} "fsdk" ${XCODE_PUBLIC_INCLUDES})
  22. # of if OUTPUT_NAME is empty:
  23. # example: set_ios_framework_properties("PhotoMaker" "ru.visionlabs.PhotoMaker" ${FULL_VERSION} "" ${XCODE_PUBLIC_INCLUDES})
  24. # ${XCODE_PUBLIC_INCLUDES} is optional BUT better to pass it!
  25. function(set_ios_framework_properties _TARGET_NAME _BUNDLE_IDENTIFIER _FULL_VERSION _OUT_NAME)
  26. # setting _FULL_VERSION in internal scope
  27. set(_HEADERS ${ARGN})
  28. if(_FULL_VERSION STREQUAL "..")
  29. set(_FULL_VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH})
  30. endif()
  31. if(IOS_BUILD_WITH_BITCODE)
  32. target_compile_options(${_TARGET_NAME} PRIVATE -fembed-bitcode)
  33. set_target_properties(${_TARGET_NAME} PROPERTIES XCODE_ATTRIBUTE_BITCODE_GENERATION_MODE bitcode)
  34. endif()
  35. set_target_properties(${_TARGET_NAME} PROPERTIES
  36. FRAMEWORK TRUE
  37. # "current version" in semantic format in Mach-O binary file
  38. VERSION "${_FULL_VERSION}"
  39. # "compatibility version" in semantic format in Mach-O binary file
  40. SOVERSION "${_FULL_VERSION}"
  41. # 3 flags for info.plist:
  42. MACOSX_FRAMEWORK_BUNDLE_VERSION "${_FULL_VERSION}"
  43. MACOSX_FRAMEWORK_IDENTIFIER "${_BUNDLE_IDENTIFIER}"
  44. MACOSX_FRAMEWORK_SHORT_VERSION_STRING "${_FULL_VERSION}"
  45. XCODE_ATTRIBUTE_ENABLE_BITCODE ${IOS_ENABLE_BITCODE_XCODE_FORMAT}
  46. ## stripping
  47. XCODE_ATTRIBUTE_STRIP_STYLE "non-global"
  48. XCODE_ATTRIBUTE_SEPARATE_STRIP YES
  49. XCODE_ATTRIBUTE_DEPLOYMENT_POSTPROCESSING YES
  50. # set minimum required version for framework to work
  51. XCODE_ATTRIBUTE_IPHONEOS_DEPLOYMENT_TARGET 8.0
  52. # build lib for every valid arch
  53. XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH ${IOS_ONLY_ACTIVE_ARCH_XCODE_FORMAT}
  54. XCODE_ATTRIBUTE_ARCHS "armv7 armv7s arm64"
  55. XCODE_ATTRIBUTE_VALID_ARCHS "armv7 armv7s arm64"
  56. XCODE_ATTRIBUTE_DEBUG_INFORMATION_FORMAT "dwarf-with-dsym"
  57. PUBLIC_HEADER "${_HEADERS}"
  58. XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "iPhone Developer"
  59. # very important, dont delete
  60. XCODE_ATTRIBUTE_INSTALL_PATH "@rpath"
  61. XCODE_ATTRIBUTE_LD_RUNPATH_SEARCH_PATHS "@loader_path"
  62. INSTALL_NAME_DIR "@rpath"
  63. MACOSX_RPATH YES
  64. )
  65. # output name of framework, optional,
  66. if(_OUT_NAME)
  67. set_target_properties(${_TARGET_NAME} PROPERTIES
  68. OUTPUT_NAME ${_OUT_NAME})
  69. endif()
  70. endfunction()
  71. function(set_ios_stat_lib_properties STAT_LIB_NAME)
  72. if(IOS_BUILD_WITH_BITCODE)
  73. target_compile_options(${STAT_LIB_NAME} PRIVATE -fembed-bitcode)
  74. endif()
  75. set_target_properties(
  76. ${STAT_LIB_NAME}
  77. PROPERTIES
  78. # stripping makes binary smaller. its important for large libraries
  79. XCODE_ATTRIBUTE_STRIP_STYLE "non-global"
  80. XCODE_ATTRIBUTE_SEPARATE_STRIP YES
  81. XCODE_ATTRIBUTE_DEPLOYMENT_POSTPROCESSING YES
  82. XCODE_ATTRIBUTE_IPHONEOS_DEPLOYMENT_TARGET 8.0
  83. # build lib for every valid arch
  84. XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH ${IOS_ONLY_ACTIVE_ARCH_XCODE_FORMAT}
  85. XCODE_ATTRIBUTE_ARCHS "armv7 armv7s arm64"
  86. XCODE_ATTRIBUTE_VALID_ARCHS "armv7 armv7s arm64"
  87. )
  88. endfunction()
  89. function(install_ios_target SDK_NAME)
  90. install(TARGETS ${SDK_NAME}
  91. FRAMEWORK DESTINATION Frameworks)
  92. endfunction()