@@ -133,7 +133,6 @@ set(USED_CMAKE_GENERATOR "${CMAKE_GENERATOR}" CACHE STRING "Expose CMAKE_GENERAT
133133
134134if (${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.14" )
135135 set (MODERN_CMAKE YES )
136- message (STATUS "Merging integrated CMake 3.14+ iOS,tvOS,watchOS,macOS toolchain(s) with this toolchain!" )
137136endif ()
138137
139138# Get the Xcode version being used.
@@ -143,7 +142,6 @@ execute_process(COMMAND xcodebuild -version
143142 OUTPUT_STRIP_TRAILING_WHITESPACE)
144143string (REGEX MATCH "Xcode [0-9\\ .]+" XCODE_VERSION "${XCODE_VERSION} " )
145144string (REGEX REPLACE "Xcode ([0-9\\ .]+)" "\\ 1" XCODE_VERSION "${XCODE_VERSION} " )
146- message (STATUS "Building with Xcode version: ${XCODE_VERSION} " )
147145
148146######## ALIASES (DEPRECATION WARNINGS)
149147
@@ -304,7 +302,6 @@ elseif(PLATFORM_INT STREQUAL "SIMULATOR_WATCHOS")
304302else ()
305303 message (FATAL_ERROR "Invalid PLATFORM: ${PLATFORM_INT} " )
306304endif ()
307- message (STATUS "Configuring ${SDK_NAME} build for platform: ${PLATFORM_INT} , architecture(s): ${ARCHS} " )
308305
309306if (MODERN_CMAKE AND PLATFORM_INT MATCHES ".*COMBINED" AND NOT USED_CMAKE_GENERATOR MATCHES "Xcode" )
310307 message (FATAL_ERROR "The COMBINED options only work with Xcode generator, -G Xcode" )
@@ -322,18 +319,15 @@ if (NOT DEFINED CMAKE_OSX_SYSROOT_INT AND NOT DEFINED CMAKE_OSX_SYSROOT)
322319 "and see if that fixes the problem for you." )
323320 message (FATAL_ERROR "Invalid CMAKE_OSX_SYSROOT: ${CMAKE_OSX_SYSROOT} "
324321 "does not exist." )
325- elseif (DEFINED CMAKE_OSX_SYSROOT)
326- message (STATUS "Using SDK: ${CMAKE_OSX_SYSROOT} for platform: ${PLATFORM_INT} when checking compatibility" )
327322elseif (DEFINED CMAKE_OSX_SYSROOT_INT)
328- message (STATUS "Using SDK: ${CMAKE_OSX_SYSROOT_INT} for platform: ${PLATFORM_INT} " )
329323 set (CMAKE_OSX_SYSROOT "${CMAKE_OSX_SYSROOT_INT} " CACHE INTERNAL "" )
330324endif ()
331325
332326# Set Xcode property for SDKROOT as well if Xcode generator is used
333327if (USED_CMAKE_GENERATOR MATCHES "Xcode" )
334328 set (CMAKE_OSX_SYSROOT "${SDK_NAME} " CACHE INTERNAL "" )
335329 if (NOT DEFINED CMAKE_XCODE_ATTRIBUTE_DEVELOPMENT_TEAM)
336- set (CMAKE_XCODE_ATTRIBUTE_DEVELOPMENT_TEAM 123456789A CACHE INTERNAL "" )
330+ set (CMAKE_XCODE_ATTRIBUTE_DEVELOPMENT_TEAM " 123456789A" CACHE INTERNAL "" )
337331 endif ()
338332endif ()
339333
@@ -350,6 +344,7 @@ if(NOT DEFINED DEPLOYMENT_TARGET)
350344 endif ()
351345 message (STATUS "Using the default min-version since DEPLOYMENT_TARGET not provided!" )
352346endif ()
347+
353348# Use bitcode or not
354349if (NOT DEFINED ENABLE_BITCODE AND NOT ARCHS MATCHES "((^|;|, )(i386|x86_64))+" )
355350 # Unless specified, enable bitcode support by default
@@ -435,7 +430,6 @@ if(NOT CMAKE_INSTALL_NAME_TOOL)
435430 ERROR_QUIET
436431 OUTPUT_STRIP_TRAILING_WHITESPACE)
437432 set (CMAKE_INSTALL_NAME_TOOL ${CMAKE_INSTALL_NAME_TOOL_INT} CACHE STRING "" ${FORCE_CACHE} )
438- message (STATUS "Using install_name_tool: ${CMAKE_INSTALL_NAME_TOOL} " )
439433endif ()
440434# Get the version of Darwin (OS X) of the host.
441435execute_process (COMMAND uname -r
@@ -454,13 +448,16 @@ if(MODERN_CMAKE)
454448 endif ()
455449 # Provide flags for a combined FAT library build on newer CMake versions
456450 if (PLATFORM_INT MATCHES ".*COMBINED" )
457- set (CMAKE_XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH NO CACHE INTERNAL "" ${FORCE_CACHE} )
451+ set (CMAKE_XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH "NO" CACHE INTERNAL "" ${FORCE_CACHE} )
458452 set (CMAKE_IOS_INSTALL_COMBINED YES CACHE INTERNAL "" ${FORCE_CACHE} )
459453 message (STATUS "Will combine built (static) artifacts into FAT lib..." )
460454 endif ()
461- else ( )
455+ elseif ( ${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.10" )
462456 # Legacy code path prior to CMake 3.14 or fallback if no SDK_NAME specified
463457 set (CMAKE_SYSTEM_NAME iOS CACHE INTERNAL "" ${FORCE_CACHE} )
458+ else ()
459+ # Legacy code path prior to CMake 3.14 or fallback if no SDK_NAME specified
460+ set (CMAKE_SYSTEM_NAME Darwin CACHE INTERNAL "" ${FORCE_CACHE} )
464461endif ()
465462# Standard settings.
466463set (CMAKE_SYSTEM_VERSION ${SDK_VERSION} CACHE INTERNAL "" )
@@ -504,110 +501,140 @@ if(ARCHS MATCHES "((^|;|, )(arm64|arm64e|x86_64))+")
504501 else ()
505502 set (CMAKE_SYSTEM_PROCESSOR "x86_64" )
506503 endif ()
507- message (STATUS "Using a data_ptr size of 8" )
508504else ()
509505 set (CMAKE_C_SIZEOF_DATA_PTR 4)
510506 set (CMAKE_CXX_SIZEOF_DATA_PTR 4)
511507 set (CMAKE_SYSTEM_PROCESSOR "arm" )
512- message (STATUS "Using a data_ptr size of 4" )
513508endif ()
514509
515- message (STATUS "Building for minimum ${SDK_NAME} version: ${DEPLOYMENT_TARGET} "
516- " (SDK version: ${SDK_VERSION} )" )
517510# Note that only Xcode 7+ supports the newer more specific:
518511# -m${SDK_NAME}-version-min flags, older versions of Xcode use:
519512# -m(ios/ios-simulator)-version-min instead.
520- if (PLATFORM_INT STREQUAL "OS" OR PLATFORM_INT STREQUAL "OS64" )
521- if (XCODE_VERSION VERSION_LESS 7.0)
513+ if (${CMAKE_VERSION} VERSION_LESS "3.11" )
514+ if (PLATFORM_INT STREQUAL "OS" OR PLATFORM_INT STREQUAL "OS64" )
515+ if (XCODE_VERSION VERSION_LESS 7.0)
516+ set (SDK_NAME_VERSION_FLAGS
517+ "-mios-version-min=${DEPLOYMENT_TARGET} " )
518+ else ()
519+ # Xcode 7.0+ uses flags we can build directly from SDK_NAME.
520+ set (SDK_NAME_VERSION_FLAGS
521+ "-m${SDK_NAME} -version-min=${DEPLOYMENT_TARGET} " )
522+ endif ()
523+ elseif (PLATFORM_INT STREQUAL "TVOS" )
524+ set (SDK_NAME_VERSION_FLAGS
525+ "-mtvos-version-min=${DEPLOYMENT_TARGET} " )
526+ elseif (PLATFORM_INT STREQUAL "SIMULATOR_TVOS" )
527+ set (SDK_NAME_VERSION_FLAGS
528+ "-mtvos-simulator-version-min=${DEPLOYMENT_TARGET} " )
529+ elseif (PLATFORM_INT STREQUAL "WATCHOS" )
522530 set (SDK_NAME_VERSION_FLAGS
523- "-mios-version-min=${DEPLOYMENT_TARGET} " )
531+ "-mwatchos-version-min=${DEPLOYMENT_TARGET} " )
532+ elseif (PLATFORM_INT STREQUAL "SIMULATOR_WATCHOS" )
533+ set (SDK_NAME_VERSION_FLAGS
534+ "-mwatchos-simulator-version-min=${DEPLOYMENT_TARGET} " )
524535 else ()
525- # Xcode 7.0+ uses flags we can build directly from SDK_NAME .
536+ # SIMULATOR or SIMULATOR64 both use -mios-simulator-version-min .
526537 set (SDK_NAME_VERSION_FLAGS
527- "-m ${SDK_NAME} -version-min=${DEPLOYMENT_TARGET} " )
538+ "-mios-simulator -version-min=${DEPLOYMENT_TARGET} " )
528539 endif ()
529- elseif (PLATFORM_INT STREQUAL "TVOS" )
530- set (SDK_NAME_VERSION_FLAGS
531- "-mtvos-version-min=${DEPLOYMENT_TARGET} " )
532- elseif (PLATFORM_INT STREQUAL "SIMULATOR_TVOS" )
533- set (SDK_NAME_VERSION_FLAGS
534- "-mtvos-simulator-version-min=${DEPLOYMENT_TARGET} " )
535- elseif (PLATFORM_INT STREQUAL "WATCHOS" )
536- set (SDK_NAME_VERSION_FLAGS
537- "-mwatchos-version-min=${DEPLOYMENT_TARGET} " )
538- elseif (PLATFORM_INT STREQUAL "SIMULATOR_WATCHOS" )
539- set (SDK_NAME_VERSION_FLAGS
540- "-mwatchos-simulator-version-min=${DEPLOYMENT_TARGET} " )
541540else ()
542- # SIMULATOR or SIMULATOR64 both use -mios-simulator- version- min.
543- set (SDK_NAME_VERSION_FLAGS
544- "-mios-simulator-version-min= ${DEPLOYMENT_TARGET} " )
541+ # Newer versions of CMake sets the version min flags correctly
542+ set (CMAKE_OSX_DEPLOYMENT_TARGET ${DEPLOYMENT_TARGET} CACHE STRING
543+ "Set CMake deployment target" ${FORCE_CACHE} )
545544endif ()
546- message (STATUS "Version flags set to: ${SDK_NAME_VERSION_FLAGS} " )
547- set (CMAKE_OSX_DEPLOYMENT_TARGET ${DEPLOYMENT_TARGET} CACHE STRING
548- "Set CMake deployment target" ${FORCE_CACHE} )
545+
549546
550547if (ENABLE_BITCODE_INT)
551548 set (BITCODE "-fembed-bitcode" )
552- set (CMAKE_XCODE_ATTRIBUTE_BITCODE_GENERATION_MODE bitcode CACHE INTERNAL "" )
553- message ( STATUS "Enabling bitcode support. " )
549+ set (CMAKE_XCODE_ATTRIBUTE_BITCODE_GENERATION_MODE " bitcode" CACHE INTERNAL "" )
550+ set (CMAKE_XCODE_ATTRIBUTE_ENABLE_BITCODE "YES" CACHE INTERNAL " " )
554551else ()
555552 set (BITCODE "" )
556- set (CMAKE_XCODE_ATTRIBUTE_ENABLE_BITCODE NO CACHE INTERNAL "" )
557- message (STATUS "Disabling bitcode support." )
553+ set (CMAKE_XCODE_ATTRIBUTE_ENABLE_BITCODE "NO" CACHE INTERNAL "" )
558554endif ()
559555
560556if (ENABLE_ARC_INT)
561557 set (FOBJC_ARC "-fobjc-arc" )
562- set (CMAKE_XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC YES CACHE INTERNAL "" )
563- message (STATUS "Enabling ARC support." )
558+ set (CMAKE_XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC "YES" CACHE INTERNAL "" )
564559else ()
565560 set (FOBJC_ARC "-fno-objc-arc" )
566- set (CMAKE_XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC NO CACHE INTERNAL "" )
567- message (STATUS "Disabling ARC support." )
561+ set (CMAKE_XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC "NO" CACHE INTERNAL "" )
568562endif ()
569563
570564if (NOT ENABLE_VISIBILITY_INT)
571565 set (VISIBILITY "-fvisibility=hidden" )
572- set (CMAKE_XCODE_ATTRIBUTE_GCC_SYMBOLS_PRIVATE_EXTERN YES CACHE INTERNAL "" )
573- message (STATUS "Hiding symbols (-fvisibility=hidden)." )
566+ set (CMAKE_XCODE_ATTRIBUTE_GCC_SYMBOLS_PRIVATE_EXTERN "YES" CACHE INTERNAL "" )
574567else ()
575568 set (VISIBILITY "" )
576- set (CMAKE_XCODE_ATTRIBUTE_GCC_SYMBOLS_PRIVATE_EXTERN NO CACHE INTERNAL "" )
569+ set (CMAKE_XCODE_ATTRIBUTE_GCC_SYMBOLS_PRIVATE_EXTERN "NO" CACHE INTERNAL "" )
577570endif ()
578571
579- #Check if Xcode generator is used, since that will handle these flags automagically
580- if (USED_CMAKE_GENERATOR MATCHES "Xcode" )
581- message (STATUS "Not setting any manual command-line buildflags, since Xcode is selected as generator." )
582- else ()
583- set (CMAKE_C_FLAGS
584- "${SDK_NAME_VERSION_FLAGS} ${BITCODE} -fobjc-abi-version=2 ${FOBJC_ARC} ${CMAKE_C_FLAGS} " )
585- # Hidden visibilty is required for C++ on iOS.
586- set (CMAKE_CXX_FLAGS
587- "${SDK_NAME_VERSION_FLAGS} ${BITCODE} ${VISIBILITY} -fvisibility-inlines-hidden -fobjc-abi-version=2 ${FOBJC_ARC} ${CMAKE_CXX_FLAGS} " )
588- set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS} -O0 -g ${CMAKE_CXX_FLAGS_DEBUG} " )
589- set (CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS} -DNDEBUG -Os -ffast-math ${CMAKE_CXX_FLAGS_MINSIZEREL} " )
590- set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS} -DNDEBUG -O2 -g -ffast-math ${CMAKE_CXX_FLAGS_RELWITHDEBINFO} " )
591- set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS} -DNDEBUG -O3 -ffast-math ${CMAKE_CXX_FLAGS_RELEASE} " )
592- set (CMAKE_C_LINK_FLAGS "${SDK_NAME_VERSION_FLAGS} -Wl,-search_paths_first ${CMAKE_C_LINK_FLAGS} " )
593- set (CMAKE_CXX_LINK_FLAGS "${SDK_NAME_VERSION_FLAGS} -Wl,-search_paths_first ${CMAKE_CXX_LINK_FLAGS} " )
594- SET (CMAKE_ASM_FLAGS "${CFLAGS} -x assembler-with-cpp" )
595-
596- # In order to ensure that the updated compiler flags are used in try_compile()
597- # tests, we have to forcibly set them in the CMake cache, not merely set them
598- # in the local scope.
599- list (APPEND VARS_TO_FORCE_IN_CACHE
600- CMAKE_C_FLAGS
601- CMAKE_CXX_FLAGS
602- CMAKE_CXX_FLAGS_DEBUG
603- CMAKE_CXX_FLAGS_RELWITHDEBINFO
604- CMAKE_CXX_FLAGS_MINSIZEREL
605- CMAKE_CXX_FLAGS_RELEASE
606- CMAKE_C_LINK_FLAGS
607- CMAKE_CXX_LINK_FLAGS)
608- foreach (VAR_TO_FORCE ${VARS_TO_FORCE_IN_CACHE} )
609- set (${VAR_TO_FORCE} "${${VAR_TO_FORCE} }" CACHE STRING "" )
610- endforeach ()
572+ if (NOT IOS_TOOLCHAIN_HAS_RUN)
573+ #Check if Xcode generator is used, since that will handle these flags automagically
574+ if (USED_CMAKE_GENERATOR MATCHES "Xcode" )
575+ message (STATUS "Not setting any manual command-line buildflags, since Xcode is selected as generator." )
576+ else ()
577+ set (CMAKE_C_FLAGS
578+ "${SDK_NAME_VERSION_FLAGS} ${BITCODE} -fobjc-abi-version=2 ${FOBJC_ARC} ${CMAKE_C_FLAGS} " )
579+ # Hidden visibilty is required for C++ on iOS.
580+ set (CMAKE_CXX_FLAGS
581+ "${SDK_NAME_VERSION_FLAGS} ${BITCODE} ${VISIBILITY} -fvisibility-inlines-hidden -fobjc-abi-version=2 ${FOBJC_ARC} ${CMAKE_CXX_FLAGS} " )
582+ set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS} -O0 -g ${CMAKE_CXX_FLAGS_DEBUG} " )
583+ set (CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS} -DNDEBUG -Os -ffast-math ${CMAKE_CXX_FLAGS_MINSIZEREL} " )
584+ set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS} -DNDEBUG -O2 -g -ffast-math ${CMAKE_CXX_FLAGS_RELWITHDEBINFO} " )
585+ set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS} -DNDEBUG -O3 -ffast-math ${CMAKE_CXX_FLAGS_RELEASE} " )
586+ set (CMAKE_C_LINK_FLAGS "${SDK_NAME_VERSION_FLAGS} -Wl,-search_paths_first ${CMAKE_C_LINK_FLAGS} " )
587+ set (CMAKE_CXX_LINK_FLAGS "${SDK_NAME_VERSION_FLAGS} -Wl,-search_paths_first ${CMAKE_CXX_LINK_FLAGS} " )
588+ set (CMAKE_ASM_FLAGS "${CFLAGS} -x assembler-with-cpp" )
589+
590+ # In order to ensure that the updated compiler flags are used in try_compile()
591+ # tests, we have to forcibly set them in the CMake cache, not merely set them
592+ # in the local scope.
593+ set (VARS_TO_FORCE_IN_CACHE
594+ CMAKE_C_FLAGS
595+ CMAKE_CXX_FLAGS
596+ CMAKE_CXX_FLAGS_DEBUG
597+ CMAKE_CXX_FLAGS_RELWITHDEBINFO
598+ CMAKE_CXX_FLAGS_MINSIZEREL
599+ CMAKE_CXX_FLAGS_RELEASE
600+ CMAKE_C_LINK_FLAGS
601+ CMAKE_CXX_LINK_FLAGS)
602+ foreach (VAR_TO_FORCE ${VARS_TO_FORCE_IN_CACHE} )
603+ set (${VAR_TO_FORCE} "${${VAR_TO_FORCE} }" CACHE STRING "" ${FORCE_CACHE} )
604+ endforeach ()
605+ endif ()
606+
607+ ## Print status messages to inform of the current state
608+ message (STATUS "Configuring ${SDK_NAME} build for platform: ${PLATFORM_INT} , architecture(s): ${ARCHS} " )
609+ message (STATUS "Using SDK: ${CMAKE_OSX_SYSROOT_INT} " )
610+ message (STATUS "Using minimum deployment version: ${DEPLOYMENT_TARGET} "
611+ " (SDK version: ${SDK_VERSION} )" )
612+ if (MODERN_CMAKE)
613+ message (STATUS "Merging integrated CMake 3.14+ iOS,tvOS,watchOS,macOS toolchain(s) with this toolchain!" )
614+ endif ()
615+ if (USED_CMAKE_GENERATOR MATCHES "Xcode" )
616+ message (STATUS "Using Xcode version: ${XCODE_VERSION} " )
617+ endif ()
618+ if (DEFINED SDK_NAME_VERSION_FLAGS)
619+ message (STATUS "Using version flags: ${SDK_NAME_VERSION_FLAGS} " )
620+ endif ()
621+ message (STATUS "Using a data_ptr size of: ${CMAKE_CXX_SIZEOF_DATA_PTR} " )
622+ message (STATUS "Using install_name_tool: ${CMAKE_INSTALL_NAME_TOOL} " )
623+ if (ENABLE_BITCODE_INT)
624+ message (STATUS "Enabling bitcode support." )
625+ else ()
626+ message (STATUS "Disabling bitcode support." )
627+ endif ()
628+
629+ if (ENABLE_ARC_INT)
630+ message (STATUS "Enabling ARC support." )
631+ else ()
632+ message (STATUS "Disabling ARC support." )
633+ endif ()
634+
635+ if (NOT ENABLE_VISIBILITY_INT)
636+ message (STATUS "Hiding symbols (-fvisibility=hidden)." )
637+ endif ()
611638endif ()
612639
613640set (CMAKE_PLATFORM_HAS_INSTALLNAME 1)
@@ -630,6 +657,8 @@ set(CMAKE_FRAMEWORK_PATH
630657 ${CMAKE_OSX_SYSROOT_INT} /System /Library/Frameworks
631658 ${CMAKE_FRAMEWORK_PATH} CACHE STRING "Frameworks search paths" ${FORCE_CACHE} )
632659
660+ set (IOS_TOOLCHAIN_HAS_RUN TRUE CACHE BOOL "Has the CMake toolchain run already?" ${FORCE_CACHE} )
661+
633662# By default, search both the specified iOS SDK and the remainder of the host filesystem.
634663if (NOT CMAKE_FIND_ROOT_PATH_MODE_PROGRAM)
635664 set (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM BOTH CACHE STRING "" ${FORCE_CACHE} )
0 commit comments