tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

iOS.cmake (9228B)


      1 # iOS.cmake
      2 #
      3 # Copyright (C) 2014-2025 by
      4 # David Turner, Robert Wilhelm, and Werner Lemberg.
      5 #
      6 # Written by David Wimsey <david@wimsey.us>
      7 #
      8 # This file is part of the FreeType project, and may only be used, modified,
      9 # and distributed under the terms of the FreeType project license,
     10 # LICENSE.TXT.  By continuing to use, modify, or distribute this file you
     11 # indicate that you have read the license and understand and accept it
     12 # fully.
     13 #
     14 #
     15 # This file is derived from the files `Platform/Darwin.cmake' and
     16 # `Platform/UnixPaths.cmake', which are part of CMake 2.8.4.  It has been
     17 # altered for iOS development.
     18 
     19 
     20 # Options
     21 # -------
     22 #
     23 #   IOS_PLATFORM = OS | SIMULATOR
     24 #
     25 #     This decides whether SDKS are selected from the `iPhoneOS.platform' or
     26 #     `iPhoneSimulator.platform' folders.
     27 #
     28 #     OS - the default, used to build for iPhone and iPad physical devices,
     29 #       which have an ARM architecture.
     30 #     SIMULATOR - used to build for the Simulator platforms, which have an
     31 #       x86 architecture.
     32 #
     33 #   CMAKE_IOS_DEVELOPER_ROOT = /path/to/platform/Developer folder
     34 #
     35 #     By default, this location is automatically chosen based on the
     36 #     IOS_PLATFORM value above.  If you manually set this variable, it
     37 #     overrides the default location and forces the use of a particular
     38 #     Developer Platform.
     39 #
     40 #   CMAKE_IOS_SDK_ROOT = /path/to/platform/Developer/SDKs/SDK folder
     41 #
     42 #     By default, this location is automatically chosen based on the
     43 #     CMAKE_IOS_DEVELOPER_ROOT value.  In this case it is always the most
     44 #     up-to-date SDK found in the CMAKE_IOS_DEVELOPER_ROOT path.  If you
     45 #     manually set this variable, it forces the use of a specific SDK
     46 #     version.
     47 #
     48 #
     49 # Macros
     50 # ------
     51 #
     52 #   set_xcode_property (TARGET XCODE_PROPERTY XCODE_VALUE)
     53 #
     54 #     A convenience macro for setting Xcode specific properties on targets.
     55 #
     56 #     Example:
     57 #
     58 #       set_xcode_property(myioslib IPHONEOS_DEPLOYMENT_TARGET "3.1")
     59 #
     60 #   find_host_package (PROGRAM ARGS)
     61 #
     62 #     A macro to find executable programs on the host system, not within the
     63 #     iOS environment.  Thanks to the `android-cmake' project for providing
     64 #     the command.
     65 
     66 
     67 # standard settings
     68 set(CMAKE_SYSTEM_NAME Darwin)
     69 set(CMAKE_SYSTEM_VERSION 1)
     70 set(UNIX True)
     71 set(APPLE True)
     72 set(IOS True)
     73 
     74 # required as of cmake 2.8.10
     75 set(CMAKE_OSX_DEPLOYMENT_TARGET ""
     76  CACHE STRING "Force unset of the deployment target for iOS" FORCE
     77 )
     78 
     79 # determine the cmake host system version so we know where to find the iOS
     80 # SDKs
     81 find_program(CMAKE_UNAME uname /bin /usr/bin /usr/local/bin)
     82 if (CMAKE_UNAME)
     83  exec_program(uname ARGS -r OUTPUT_VARIABLE CMAKE_HOST_SYSTEM_VERSION)
     84  string(REGEX REPLACE "^([0-9]+)\\.([0-9]+).*$" "\\1"
     85    DARWIN_MAJOR_VERSION "${CMAKE_HOST_SYSTEM_VERSION}")
     86 endif (CMAKE_UNAME)
     87 
     88 # skip the platform compiler checks for cross compiling
     89 set(CMAKE_CXX_COMPILER_WORKS TRUE)
     90 set(CMAKE_C_COMPILER_WORKS TRUE)
     91 
     92 # all iOS/Darwin specific settings - some may be redundant
     93 set(CMAKE_SHARED_LIBRARY_PREFIX "lib")
     94 set(CMAKE_SHARED_LIBRARY_SUFFIX ".dylib")
     95 set(CMAKE_SHARED_MODULE_PREFIX "lib")
     96 set(CMAKE_SHARED_MODULE_SUFFIX ".so")
     97 set(CMAKE_MODULE_EXISTS 1)
     98 set(CMAKE_DL_LIBS "")
     99 
    100 set(CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG
    101  "-compatibility_version ")
    102 set(CMAKE_C_OSX_CURRENT_VERSION_FLAG
    103  "-current_version ")
    104 set(CMAKE_CXX_OSX_COMPATIBILITY_VERSION_FLAG
    105  "${CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG}")
    106 set(CMAKE_CXX_OSX_CURRENT_VERSION_FLAG
    107  "${CMAKE_C_OSX_CURRENT_VERSION_FLAG}")
    108 
    109 # hidden visibility is required for cxx on iOS
    110 set(CMAKE_C_FLAGS_INIT "")
    111 set(CMAKE_CXX_FLAGS_INIT
    112  "-headerpad_max_install_names -fvisibility=hidden -fvisibility-inlines-hidden")
    113 
    114 set(CMAKE_C_LINK_FLAGS
    115  "-Wl,-search_paths_first ${CMAKE_C_LINK_FLAGS}")
    116 set(CMAKE_CXX_LINK_FLAGS
    117  "-Wl,-search_paths_first ${CMAKE_CXX_LINK_FLAGS}")
    118 
    119 set(CMAKE_PLATFORM_HAS_INSTALLNAME 1)
    120 set(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS
    121  "-dynamiclib -headerpad_max_install_names")
    122 set(CMAKE_SHARED_MODULE_CREATE_C_FLAGS
    123  "-bundle -headerpad_max_install_names")
    124 set(CMAKE_SHARED_MODULE_LOADER_C_FLAG
    125  "-Wl,-bundle_loader,")
    126 set(CMAKE_SHARED_MODULE_LOADER_CXX_FLAG
    127  "-Wl,-bundle_loader,")
    128 set(CMAKE_FIND_LIBRARY_SUFFIXES
    129  ".dylib" ".so" ".a")
    130 
    131 # hack: If a new cmake (which uses CMAKE_INSTALL_NAME_TOOL) runs on an old
    132 #       build tree (where `install_name_tool' was hardcoded), and where
    133 #       CMAKE_INSTALL_NAME_TOOL isn't in the cache and still cmake didn't
    134 #       fail in `CMakeFindBinUtils.cmake' (because it isn't rerun), hardcode
    135 #       CMAKE_INSTALL_NAME_TOOL here to `install_name_tool' so it behaves as
    136 #       it did before.
    137 if (NOT DEFINED CMAKE_INSTALL_NAME_TOOL)
    138  find_program(CMAKE_INSTALL_NAME_TOOL install_name_tool)
    139 endif (NOT DEFINED CMAKE_INSTALL_NAME_TOOL)
    140 
    141 # set up iOS platform unless specified manually with IOS_PLATFORM
    142 if (NOT DEFINED IOS_PLATFORM)
    143  set(IOS_PLATFORM "OS")
    144 endif (NOT DEFINED IOS_PLATFORM)
    145 
    146 set(IOS_PLATFORM ${IOS_PLATFORM} CACHE STRING "Type of iOS Platform")
    147 
    148 # check the platform selection and setup for developer root
    149 if (${IOS_PLATFORM} STREQUAL "OS")
    150  set(IOS_PLATFORM_LOCATION "iPhoneOS.platform")
    151 
    152  # this causes the installers to properly locate the output libraries
    153  set(CMAKE_XCODE_EFFECTIVE_PLATFORMS "-iphoneos")
    154 
    155 elseif (${IOS_PLATFORM} STREQUAL "SIMULATOR")
    156  set(IOS_PLATFORM_LOCATION "iPhoneSimulator.platform")
    157 
    158  # this causes the installers to properly locate the output libraries
    159  set(CMAKE_XCODE_EFFECTIVE_PLATFORMS "-iphonesimulator")
    160 
    161 else (${IOS_PLATFORM} STREQUAL "OS")
    162  message(FATAL_ERROR
    163    "Unsupported IOS_PLATFORM value selected.  Please choose OS or SIMULATOR.")
    164 
    165 endif (${IOS_PLATFORM} STREQUAL "OS")
    166 
    167 # set up iOS developer location unless specified manually with
    168 # CMAKE_IOS_DEVELOPER_ROOT --
    169 # note that Xcode 4.3 changed the installation location; choose the most
    170 # recent one available
    171 set(XCODE_POST_43_ROOT
    172  "/Applications/Xcode.app/Contents/Developer/Platforms/${IOS_PLATFORM_LOCATION}/Developer")
    173 set(XCODE_PRE_43_ROOT
    174  "/Developer/Platforms/${IOS_PLATFORM_LOCATION}/Developer")
    175 
    176 if (NOT DEFINED CMAKE_IOS_DEVELOPER_ROOT)
    177  if (EXISTS ${XCODE_POST_43_ROOT})
    178    set(CMAKE_IOS_DEVELOPER_ROOT ${XCODE_POST_43_ROOT})
    179  elseif (EXISTS ${XCODE_PRE_43_ROOT})
    180    set(CMAKE_IOS_DEVELOPER_ROOT ${XCODE_PRE_43_ROOT})
    181  endif (EXISTS ${XCODE_POST_43_ROOT})
    182 endif (NOT DEFINED CMAKE_IOS_DEVELOPER_ROOT)
    183 
    184 set(CMAKE_IOS_DEVELOPER_ROOT ${CMAKE_IOS_DEVELOPER_ROOT}
    185  CACHE PATH "Location of iOS Platform"
    186 )
    187 
    188 # find and use the most recent iOS SDK unless specified manually with
    189 # CMAKE_IOS_SDK_ROOT
    190 if (NOT DEFINED CMAKE_IOS_SDK_ROOT)
    191  file(GLOB _CMAKE_IOS_SDKS "${CMAKE_IOS_DEVELOPER_ROOT}/SDKs/*")
    192  if (_CMAKE_IOS_SDKS)
    193    list(SORT _CMAKE_IOS_SDKS)
    194    list(REVERSE _CMAKE_IOS_SDKS)
    195    list(GET _CMAKE_IOS_SDKS 0 CMAKE_IOS_SDK_ROOT)
    196  else (_CMAKE_IOS_SDKS)
    197    message(FATAL_ERROR
    198      "No iOS SDK's found in default search path ${CMAKE_IOS_DEVELOPER_ROOT}.  Manually set CMAKE_IOS_SDK_ROOT or install the iOS SDK.")
    199  endif (_CMAKE_IOS_SDKS)
    200 
    201  message(STATUS "Toolchain using default iOS SDK: ${CMAKE_IOS_SDK_ROOT}")
    202 endif (NOT DEFINED CMAKE_IOS_SDK_ROOT)
    203 
    204 set(CMAKE_IOS_SDK_ROOT ${CMAKE_IOS_SDK_ROOT}
    205  CACHE PATH "Location of the selected iOS SDK"
    206 )
    207 
    208 # set the sysroot default to the most recent SDK
    209 set(CMAKE_OSX_SYSROOT ${CMAKE_IOS_SDK_ROOT}
    210  CACHE PATH "Sysroot used for iOS support"
    211 )
    212 
    213 # set the architecture for iOS --
    214 # note that currently both ARCHS_STANDARD_32_BIT and
    215 # ARCHS_UNIVERSAL_IPHONE_OS set armv7 only, so set both manually
    216 if (${IOS_PLATFORM} STREQUAL "OS")
    217  set(IOS_ARCH $(ARCHS_STANDARD_32_64_BIT))
    218 else (${IOS_PLATFORM} STREQUAL "OS")
    219  set(IOS_ARCH i386)
    220 endif (${IOS_PLATFORM} STREQUAL "OS")
    221 
    222 set(CMAKE_OSX_ARCHITECTURES ${IOS_ARCH}
    223  CACHE string "Build architecture for iOS"
    224 )
    225 
    226 # set the find root to the iOS developer roots and to user defined paths
    227 set(CMAKE_FIND_ROOT_PATH
    228  ${CMAKE_IOS_DEVELOPER_ROOT}
    229  ${CMAKE_IOS_SDK_ROOT}
    230  ${CMAKE_PREFIX_PATH}
    231  CACHE string  "iOS find search path root"
    232 )
    233 
    234 # default to searching for frameworks first
    235 set(CMAKE_FIND_FRAMEWORK FIRST)
    236 
    237 # set up the default search directories for frameworks
    238 set(CMAKE_SYSTEM_FRAMEWORK_PATH
    239  ${CMAKE_IOS_SDK_ROOT}/System/Library/Frameworks
    240  ${CMAKE_IOS_SDK_ROOT}/System/Library/PrivateFrameworks
    241  ${CMAKE_IOS_SDK_ROOT}/Developer/Library/Frameworks
    242 )
    243 
    244 # only search the iOS SDKs, not the remainder of the host filesystem
    245 set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY)
    246 set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
    247 set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
    248 
    249 # this little macro lets you set any Xcode specific property
    250 macro(set_xcode_property TARGET XCODE_PROPERTY XCODE_VALUE)
    251  set_property(TARGET ${TARGET}
    252    PROPERTY XCODE_ATTRIBUTE_${XCODE_PROPERTY} ${XCODE_VALUE})
    253 endmacro(set_xcode_property)
    254 
    255 # this macro lets you find executable programs on the host system
    256 macro(find_host_package)
    257  set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
    258  set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER)
    259  set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER)
    260  set(IOS FALSE)
    261 
    262  find_package(${ARGN})
    263 
    264  set(IOS TRUE)
    265  set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY)
    266  set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
    267  set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
    268 endmacro(find_host_package)
    269 
    270 # eof