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.
 
 

106 lines
3.9 KiB

# /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()