# /cmake/IosOptions.cmake functions # functions are called from root cmake # it is necessary once use: include(/cmake/IosOptions.cmake) function(set_ios_options) set(FULL_VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH} PARENT_SCOPE) # boolean is not recognized for some reason option(IOS_BUILD_ONLY_ACTIVE_ARCH "To build for only active architecture, not universal binary for every valid arch" OFF) option(IOS_BUILD_WITH_BITCODE "To build iOS targets with bitcode enabled" ON) if(IOS_BUILD_ONLY_ACTIVE_ARCH) set(IOS_ONLY_ACTIVE_ARCH_XCODE_FORMAT YES PARENT_SCOPE) else() set(IOS_ONLY_ACTIVE_ARCH_XCODE_FORMAT NO PARENT_SCOPE) endif() if(IOS_BUILD_WITH_BITCODE) set(IOS_ENABLE_BITCODE_XCODE_FORMAT YES PARENT_SCOPE) else() set(IOS_ENABLE_BITCODE_XCODE_FORMAT NO PARENT_SCOPE) endif() endfunction() # OUTPUT_NAME parameter is optional, if it is empty please pass "" # example: set_ios_framework_properties(SDK "ru.visionlabs.FaceEngine" ${FULL_VERSION} "fsdk" ${XCODE_PUBLIC_INCLUDES}) # of if OUTPUT_NAME is empty: # example: set_ios_framework_properties("PhotoMaker" "ru.visionlabs.PhotoMaker" ${FULL_VERSION} "" ${XCODE_PUBLIC_INCLUDES}) # ${XCODE_PUBLIC_INCLUDES} is optional BUT better to pass it! function(set_ios_framework_properties _TARGET_NAME _BUNDLE_IDENTIFIER _FULL_VERSION _OUT_NAME) # setting _FULL_VERSION in internal scope set(_HEADERS ${ARGN}) if(_FULL_VERSION STREQUAL "..") set(_FULL_VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}) endif() if(IOS_BUILD_WITH_BITCODE) target_compile_options(${_TARGET_NAME} PRIVATE -fembed-bitcode) set_target_properties(${_TARGET_NAME} PROPERTIES XCODE_ATTRIBUTE_BITCODE_GENERATION_MODE bitcode) endif() set_target_properties(${_TARGET_NAME} PROPERTIES FRAMEWORK TRUE # "current version" in semantic format in Mach-O binary file VERSION "${_FULL_VERSION}" # "compatibility version" in semantic format in Mach-O binary file SOVERSION "${_FULL_VERSION}" # 3 flags for info.plist: MACOSX_FRAMEWORK_BUNDLE_VERSION "${_FULL_VERSION}" MACOSX_FRAMEWORK_IDENTIFIER "${_BUNDLE_IDENTIFIER}" MACOSX_FRAMEWORK_SHORT_VERSION_STRING "${_FULL_VERSION}" XCODE_ATTRIBUTE_ENABLE_BITCODE ${IOS_ENABLE_BITCODE_XCODE_FORMAT} ## stripping XCODE_ATTRIBUTE_STRIP_STYLE "non-global" XCODE_ATTRIBUTE_SEPARATE_STRIP YES XCODE_ATTRIBUTE_DEPLOYMENT_POSTPROCESSING YES # set minimum required version for framework to work XCODE_ATTRIBUTE_IPHONEOS_DEPLOYMENT_TARGET 8.0 # build lib for every valid arch XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH ${IOS_ONLY_ACTIVE_ARCH_XCODE_FORMAT} XCODE_ATTRIBUTE_ARCHS "armv7 armv7s arm64" XCODE_ATTRIBUTE_VALID_ARCHS "armv7 armv7s arm64" XCODE_ATTRIBUTE_DEBUG_INFORMATION_FORMAT "dwarf-with-dsym" PUBLIC_HEADER "${_HEADERS}" XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "iPhone Developer" # very important, dont delete XCODE_ATTRIBUTE_INSTALL_PATH "@rpath" XCODE_ATTRIBUTE_LD_RUNPATH_SEARCH_PATHS "@loader_path" INSTALL_NAME_DIR "@rpath" MACOSX_RPATH YES ) # output name of framework, optional, if(_OUT_NAME) set_target_properties(${_TARGET_NAME} PROPERTIES OUTPUT_NAME ${_OUT_NAME}) endif() endfunction() function(set_ios_stat_lib_properties STAT_LIB_NAME) if(IOS_BUILD_WITH_BITCODE) target_compile_options(${STAT_LIB_NAME} PRIVATE -fembed-bitcode) endif() set_target_properties( ${STAT_LIB_NAME} PROPERTIES # stripping makes binary smaller. its important for large libraries XCODE_ATTRIBUTE_STRIP_STYLE "non-global" XCODE_ATTRIBUTE_SEPARATE_STRIP YES XCODE_ATTRIBUTE_DEPLOYMENT_POSTPROCESSING YES XCODE_ATTRIBUTE_IPHONEOS_DEPLOYMENT_TARGET 8.0 # build lib for every valid arch XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH ${IOS_ONLY_ACTIVE_ARCH_XCODE_FORMAT} XCODE_ATTRIBUTE_ARCHS "armv7 armv7s arm64" XCODE_ATTRIBUTE_VALID_ARCHS "armv7 armv7s arm64" ) endfunction() function(install_ios_target SDK_NAME) install(TARGETS ${SDK_NAME} FRAMEWORK DESTINATION Frameworks) endfunction()