1# Options:
2#
3# IOS_PLATFORM = OS (default)
4#   This needs to be OS as the simulator cannot use the required GLES2.0 environment.
5#   OS - the default, used to build for iPhone and iPad physical devices, which have an arm arch.
6#
7# CMAKE_IOS_SDK_ROOT = automatic(default) or /path/to/platform/Developer/SDKs/SDK folder
8#   By default this location is automatcially chosen based on the CMAKE_IOS_DEVELOPER_ROOT value.
9#   In this case it will always be the most up-to-date SDK found in the CMAKE_IOS_DEVELOPER_ROOT path.
10#   If set manually, this will force the use of a specific SDK version
11
12set(IPHONEOS_DEPLOYMENT_TARGET 11.0)
13set(IOS TRUE)
14set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mios-version-min=${IPHONEOS_DEPLOYMENT_TARGET}")
15set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
16set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mios-version-min=${IPHONEOS_DEPLOYMENT_TARGET}")
17set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")
18
19# Standard settings
20set(CMAKE_SYSTEM_NAME Darwin)
21set(CMAKE_SYSTEM_VERSION 1)
22set(CMAKE_CROSSCOMPILING ON)
23if(CMAKE_GENERATOR STREQUAL "Xcode")
24  set(CMAKE_MACOSX_BUNDLE YES)
25endif()
26set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED "NO")
27set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED "NO")
28set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "")
29set(CMAKE_XCODE_ATTRIBUTE_IPHONEOS_DEPLOYMENT_TARGET ${IPHONEOS_DEPLOYMENT_TARGET})
30
31# Setup iOS platform unless specified manually with IOS_PLATFORM
32if(NOT DEFINED IOS_PLATFORM)
33  set(IOS_PLATFORM "OS")
34endif()
35set(IOS_PLATFORM ${IOS_PLATFORM} CACHE STRING "Type of iOS Platform")
36
37# Check the platform selection and setup for developer root
38if(IOS_PLATFORM STREQUAL "OS")
39  set(IOS_SDK_NAME "iphoneos")
40elseif(IOS_PLATFORM STREQUAL "SIMULATOR")
41  set(IOS_SDK_NAME "iphonesimulator")
42else()
43  message (FATAL_ERROR "Unsupported IOS_PLATFORM value selected '${IOS_PLATFORM}'. Please choose OS or leave default")
44endif()
45
46# Setup iOS developer location unless specified manually with CMAKE_IOS_DEVELOPER_ROOT
47if(NOT CMAKE_IOS_SDK_ROOT)
48  execute_process(COMMAND xcrun --sdk ${IOS_SDK_NAME} --show-sdk-path
49    OUTPUT_VARIABLE CMAKE_IOS_SDK_ROOT
50    OUTPUT_STRIP_TRAILING_WHITESPACE
51  )
52  message (STATUS "Toolchain using default iOS SDK: ${CMAKE_IOS_SDK_ROOT}")
53endif()
54
55set(CMAKE_IOS_SDK_ROOT ${CMAKE_IOS_SDK_ROOT} CACHE PATH "Location of the selected iOS SDK")
56
57# Set the sysroot default to the most recent SDK
58set(CMAKE_OSX_SYSROOT ${CMAKE_IOS_SDK_ROOT} CACHE PATH "Sysroot used for iOS support")
59
60# set the architecture for iOS
61if(IOS_PLATFORM STREQUAL "OS")
62  # When ffmpeg has been rebuilt for arm64 use:
63  set(IOS_ARCH "arm64")
64else()
65  set(IOS_ARCH "i386;x86_64")
66endif()
67
68set(CMAKE_OSX_ARCHITECTURES "${IOS_ARCH}" CACHE STRING  "Build architecture for iOS")
69set(CMAKE_ASM_FLAGS "" CACHE STRING "" FORCE)
70foreach(arch ${IOS_ARCH})
71  set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -arch ${arch}" CACHE STRING "" FORCE)
72endforeach()
73
74# Set the find root to the iOS developer roots and to user defined paths
75set(CMAKE_FIND_ROOT_PATH ${CMAKE_IOS_SDK_ROOT} ${CMAKE_PREFIX_PATH} CACHE STRING  "iOS find search path root")
76
77# default to searching for frameworks first
78set(CMAKE_FIND_FRAMEWORK FIRST)
79
80# set up the default search directories for frameworks
81set(CMAKE_SYSTEM_FRAMEWORK_PATH
82  ${CMAKE_IOS_SDK_ROOT}/System/Library/Frameworks
83  ${CMAKE_IOS_SDK_ROOT}/System/Library/PrivateFrameworks
84  ${CMAKE_IOS_SDK_ROOT}/Developer/Library/Frameworks
85)
86
87# only search the iOS sdks, not the remainder of the host filesystem
88set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
89set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
90set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
91
92