|
# /cmake/IosOptions.cmake functions
|
|
# functions are called from root cmake
|
|
# it is necessary once use: include(<path to>/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()
|
|
|