From 1e742ea3f971766b29063119e687466669c3eccf Mon Sep 17 00:00:00 2001 From: Ali <> Date: Wed, 19 Feb 2020 03:08:25 +0400 Subject: [PATCH] Temp --- Wallet.makefile | 3 +- submodules/AsyncDisplayKit/BUCK | 23 +- submodules/NumberPluralizationForm/BUCK | 14 + submodules/StringPluralization/BUCK | 1 + submodules/openssl/BUCK | 5 +- submodules/openssl/BUILD | 6 +- ...uild-openssl.sh => build-openssl-bazel.sh} | 0 submodules/openssl/build-openssl-buck.sh | 195 ++++++++++++++ submodules/rlottie/BUCK | 11 +- submodules/ton/BUCK | 6 +- submodules/ton/BUILD | 6 +- .../ton/{build-ton.sh => build-ton-bazel.sh} | 2 +- submodules/ton/build-ton-buck.sh | 76 ++++++ submodules/ton/{iOS.cmake => iOS-bazel.cmake} | 0 submodules/ton/iOS-buck.cmake | 250 ++++++++++++++++++ 15 files changed, 564 insertions(+), 34 deletions(-) create mode 100644 submodules/NumberPluralizationForm/BUCK rename submodules/openssl/{build-openssl.sh => build-openssl-bazel.sh} (100%) create mode 100644 submodules/openssl/build-openssl-buck.sh rename submodules/ton/{build-ton.sh => build-ton-bazel.sh} (97%) create mode 100644 submodules/ton/build-ton-buck.sh rename submodules/ton/{iOS.cmake => iOS-bazel.cmake} (100%) create mode 100644 submodules/ton/iOS-buck.cmake diff --git a/Wallet.makefile b/Wallet.makefile index c5c09f8340..32cd3a29cc 100644 --- a/Wallet.makefile +++ b/Wallet.makefile @@ -12,7 +12,7 @@ WALLET_BUCK_OPTIONS=\ --config custom.distributionProvisioningProfileApp="${WALLET_DISTRIBUTION_PROVISIONING_PROFILE_APP}" \ --config custom.apiId="${API_ID}" \ --config custom.apiHash="${API_HASH}" \ - --config custom.hockeyAppId="${HOCKEYAPP_ID}" \ + --config custom.appCenterId="${HOCKEYAPP_ID}" \ --config custom.isInternalBuild="${IS_INTERNAL_BUILD}" \ --config custom.isAppStoreBuild="${IS_APPSTORE_BUILD}" \ --config custom.appStoreId="${APPSTORE_ID}" \ @@ -38,6 +38,7 @@ build_wallet: check_env //submodules/AsyncDisplayKit:AsyncDisplayKit#shared,iphoneos-arm64,iphoneos-armv7 \ //submodules/Display:Display#dwarf-and-dsym,shared,iphoneos-arm64,iphoneos-armv7 \ //submodules/Display:Display#shared,iphoneos-arm64,iphoneos-armv7 \ + --verbose 7 \ ${WALLET_BUCK_OPTIONS} ${BUCK_RELEASE_OPTIONS} ${BUCK_THREADS_OPTIONS} ${BUCK_CACHE_OPTIONS} wallet_package: diff --git a/submodules/AsyncDisplayKit/BUCK b/submodules/AsyncDisplayKit/BUCK index 50488256ca..e4a512cf8e 100644 --- a/submodules/AsyncDisplayKit/BUCK +++ b/submodules/AsyncDisplayKit/BUCK @@ -1,30 +1,21 @@ load("//Config:buck_rule_macros.bzl", "framework") -ASYNCDISPLAYKIT_EXPORTED_HEADERS = glob([ - "Source/*.h", - "Source/Details/**/*.h", - "Source/Layout/*.h", - "Source/Base/*.h", - "Source/Debug/AsyncDisplayKit+Debug.h", - "Source/TextKit/ASTextNodeTypes.h", - "Source/TextKit/ASTextKitComponents.h" +public_headers = glob([ + "Source/PublicHeaders/AsyncDisplayKit/*.h", ]) -ASYNCDISPLAYKIT_PRIVATE_HEADERS = glob([ - "Source/**/*.h" - ], - exclude = ASYNCDISPLAYKIT_EXPORTED_HEADERS, -) +private_headers = glob([ + "Source/*.h", +]) framework( name = "AsyncDisplayKit", - headers = ASYNCDISPLAYKIT_PRIVATE_HEADERS, - exported_headers = ASYNCDISPLAYKIT_EXPORTED_HEADERS, srcs = glob([ "Source/**/*.m", "Source/**/*.mm", - "Source/Base/*.m" ]), + headers = private_headers, + exported_headers = public_headers, compiler_flags = [ "-DMINIMAL_ASDK", ], diff --git a/submodules/NumberPluralizationForm/BUCK b/submodules/NumberPluralizationForm/BUCK new file mode 100644 index 0000000000..53a8e7cd9f --- /dev/null +++ b/submodules/NumberPluralizationForm/BUCK @@ -0,0 +1,14 @@ +load("//Config:buck_rule_macros.bzl", "static_library") + +static_library( + name = "NumberPluralizationForm", + srcs = glob([ + "Sources/*.m", + ]), + exported_headers = glob([ + "PublicHeaders/**/*.h", + ]), + frameworks = [ + "$SDKROOT/System/Library/Frameworks/Foundation.framework", + ], +) diff --git a/submodules/StringPluralization/BUCK b/submodules/StringPluralization/BUCK index d6965f2c11..74014a41d7 100644 --- a/submodules/StringPluralization/BUCK +++ b/submodules/StringPluralization/BUCK @@ -14,6 +14,7 @@ static_library( ]), deps = [ "//submodules/AppBundle:AppBundle", + "//submodules/NumberPluralizationForm:NumberPluralizationForm", ], frameworks = [ "$SDKROOT/System/Library/Frameworks/Foundation.framework", diff --git a/submodules/openssl/BUCK b/submodules/openssl/BUCK index 0a02d6286c..dc53d924ab 100644 --- a/submodules/openssl/BUCK +++ b/submodules/openssl/BUCK @@ -1,3 +1,4 @@ +load("//Config:buck_rule_macros.bzl", "static_library", "gen_header_targets") openssl_headers = [ "aes.h", @@ -114,11 +115,11 @@ rules = [ genrule( name = "openssl_build_" + arch, srcs = glob([ - "build-openssl.sh", + "build-openssl-buck.sh", "*.tar.gz", "*.patch", ]), - bash = "sh $SRCDIR/build-openssl.sh $OUT $SRCDIR " + arch, + bash = "sh $SRCDIR/build-openssl-buck.sh $OUT $SRCDIR " + arch, out = "openssl_" + arch, visibility = [ "//submodules/openssl:...", diff --git a/submodules/openssl/BUILD b/submodules/openssl/BUILD index 95403b1c26..781c10cc3c 100644 --- a/submodules/openssl/BUILD +++ b/submodules/openssl/BUILD @@ -112,7 +112,7 @@ openssl_libs = [ genrule( name = "openssl_build", srcs = [ - "build-openssl.sh", + "build-openssl-bazel.sh", "openssl-1.1.1d.tar.gz", "patch-conf.patch", "patch-include.patch", @@ -129,9 +129,9 @@ genrule( echo "Unsupported architecture $(TARGET_CPU)" fi """ + "\n" + - "mkdir -p $(RULEDIR)/$$BUILD_ARCH && cp $(SRCS) $(RULEDIR)/$$BUILD_ARCH/ && sh $(RULEDIR)/$$BUILD_ARCH/build-openssl.sh $(RULEDIR)/$$BUILD_ARCH $(RULEDIR)/$$BUILD_ARCH $$BUILD_ARCH" + "\n" + + "mkdir -p $(RULEDIR)/$$BUILD_ARCH && cp $(SRCS) $(RULEDIR)/$$BUILD_ARCH/ && sh $(RULEDIR)/$$BUILD_ARCH/build-openssl-bazel.sh $(RULEDIR)/$$BUILD_ARCH $(RULEDIR)/$$BUILD_ARCH $$BUILD_ARCH" + "\n" + "\n".join([ - "cp \"$(RULEDIR)/$$BUILD_ARCH/build/arm64/include/openssl/{}\" \"$(location :{})\"\n".format(x, x) for x in openssl_headers + "cp \"$(RULEDIR)/$$BUILD_ARCH/build/$$BUILD_ARCH/include/openssl/{}\" \"$(location :{})\"\n".format(x, x) for x in openssl_headers ]) + "\n".join([ "cp \"$(RULEDIR)/$$BUILD_ARCH/build/$$BUILD_ARCH/lib/{}\" \"$(location :{})\"\n".format(x, x) for x in openssl_libs diff --git a/submodules/openssl/build-openssl.sh b/submodules/openssl/build-openssl-bazel.sh similarity index 100% rename from submodules/openssl/build-openssl.sh rename to submodules/openssl/build-openssl-bazel.sh diff --git a/submodules/openssl/build-openssl-buck.sh b/submodules/openssl/build-openssl-buck.sh new file mode 100644 index 0000000000..f2b2c487c4 --- /dev/null +++ b/submodules/openssl/build-openssl-buck.sh @@ -0,0 +1,195 @@ +#!/bin/bash + +OUT_DIR="$1" +SRC_DIR="$2" +ARCH="$3" + +if [ "$ARCH" != "arm64" ] && [ "$ARCH" != "armv7" ] && [ "$ARCH" != "x86_64" ]; then + echo "Invalid architecture $ARCH" + exit 1 +fi + +if [ -z "$OUT_DIR" ]; then + echo "Usage: sh build-openssl.sh OUT_DIR SRC_DIR ARCH" + exit 1 +fi + +if [ -z "$SRC_DIR" ]; then + echo "Usage: sh build-openssl.sh OUT_DIR SRC_DIR ARCH" + exit 1 +fi + +if [ ! -d "$SRC_DIR" ]; then + echo "$SRC_DIR does not exist" + exit 1 +fi + +mkdir -p "$OUT_DIR" + +TMP_DIR="$OUT_DIR/build" +rm -rf "$TMP_DIR" +mkdir -p "$TMP_DIR" + +CROSS_TOP_SIM="`xcode-select --print-path`/Platforms/iPhoneSimulator.platform/Developer" +CROSS_SDK_SIM="iPhoneSimulator.sdk" + +CROSS_TOP_IOS="`xcode-select --print-path`/Platforms/iPhoneOS.platform/Developer" +CROSS_SDK_IOS="iPhoneOS.sdk" + +SOURCE_DIR="$OUT_DIR/openssl-1.1.1d" +SOURCE_ARCHIVE="$SRC_DIR/openssl-1.1.1d.tar.gz" + +rm -rf "$SOURCE_DIR" + +tar -xzf "$SOURCE_ARCHIVE" --directory "$OUT_DIR" + +export CROSS_COMPILE=`xcode-select --print-path`/Toolchains/XcodeDefault.xctoolchain/usr/bin/ + +function build_for () +{ + DIR="$(pwd)" + cd "$SOURCE_DIR" + + PLATFORM="$1" + ARCH="$2" + CROSS_TOP_ENV="CROSS_TOP_$3" + CROSS_SDK_ENV="CROSS_SDK_$3" + + make clean + + export CROSS_TOP="${!CROSS_TOP_ENV}" + export CROSS_SDK="${!CROSS_SDK_ENV}" + + MINIMAL_FLAGS=(\ + "no-afalgeng" \ + "no-aria" \ + "no-asan" \ + "no-async" \ + "no-autoalginit" \ + "no-autoerrinit" \ + "no-autoload-config" \ + "no-bf" \ + "no-blake2" \ + "no-buildtest-c++" \ + "no-camellia" \ + "no-capieng" \ + "no-cast" \ + "no-chacha" \ + "no-cmac" \ + "no-cms" \ + "no-comp" \ + "no-crypto-mdebug" \ + "no-crypto-mdebug-backtrace" \ + "no-ct" \ + "no-deprecated" \ + "no-des" \ + "no-devcryptoeng" \ + "no-dgram" \ + "no-dh" \ + "no-dsa" \ + "no-dtls" \ + "no-dynamic-engine" \ + "no-ec" \ + "no-ec2m" \ + "no-ecdh" \ + "no-ecdsa" \ + "no-ec_nistp_64_gcc_128" \ + "no-egd" \ + "no-engine" \ + "no-err" \ + "no-external-tests" \ + "no-filenames" \ + "no-fuzz-libfuzzer" \ + "no-fuzz-afl" \ + "no-gost" \ + "no-heartbeats" \ + "no-idea" \ + "no-makedepend" \ + "no-md2" \ + "no-md4" \ + "no-mdc2" \ + "no-msan" \ + "no-multiblock" \ + "no-nextprotoneg" \ + "no-pinshared" \ + "no-ocb" \ + "no-ocsp" \ + "no-pic" \ + "no-poly1305" \ + "no-posix-io" \ + "no-psk" \ + "no-rc2" \ + "no-rc4" \ + "no-rc5" \ + "no-rfc3779" \ + "no-rmd160" \ + "no-scrypt" \ + "no-sctp" \ + "no-shared" \ + "no-siphash" \ + "no-sm2" \ + "no-sm3" \ + "no-sm4" \ + "no-sock" \ + "no-srp" \ + "no-srtp" \ + "no-sse2" \ + "no-ssl" \ + "no-ssl-trace" \ + "no-static-engine" \ + "no-stdio" \ + "no-tests" \ + "no-tls" \ + "no-ts" \ + "no-ubsan" \ + "no-ui-console" \ + "no-unit-test" \ + "no-whirlpool" \ + "no-weak-ssl-ciphers" \ + "no-zlib" \ + "no-zlib-dynamic" \ + ) + + DEFAULT_FLAGS=(\ + "no-asm" \ + "no-ssl3" \ + "no-comp" \ + "no-hw" \ + "no-engine" \ + "no-async" \ + ) + + ADDITIONAL_FLAGS=$DEFAULT_FLAGS + + ./Configure $PLATFORM "-arch $ARCH" ${ADDITIONAL_FLAGS[@]} --prefix=${TMP_DIR}/${ARCH} || exit 1 + + make && make install_sw || exit 2 + unset CROSS_TOP + unset CROSS_SDK + + cd "$DIR" +} + +patch "$SOURCE_DIR/Configurations/10-main.conf" < patch-conf.patch || exit 1 + +if [ "$ARCH" == "x86_64" ]; then + build_for ios64sim-cross x86_64 SIM || exit 2 +elif [ "$ARCH" == "armv7" ]; then + build_for ios-cross armv7 IOS || exit 4 +elif [ "$ARCH" == "arm64" ]; then + build_for ios64-cross arm64 IOS || exit 5 +else + echo "Invalid architecture $ARCH" + exit 1 +fi + +cp -r "${TMP_DIR}/$ARCH/include" "${TMP_DIR}/" +patch -p3 "${TMP_DIR}/include/openssl/opensslconf.h" < patch-include.patch + +DFT_DIST_DIR="$OUT_DIR/out" +rm -rf "$DFT_DIST_DIR" +mkdir -p "$DFT_DIST_DIR" + +DIST_DIR="${DIST_DIR:-$DFT_DIST_DIR}" +mkdir -p "${DIST_DIR}" +cp -r "${TMP_DIR}/include" "${TMP_DIR}/$ARCH/lib" "${DIST_DIR}" \ No newline at end of file diff --git a/submodules/rlottie/BUCK b/submodules/rlottie/BUCK index 74ee15a9df..c9a5e016b3 100644 --- a/submodules/rlottie/BUCK +++ b/submodules/rlottie/BUCK @@ -1,5 +1,9 @@ load("//Config:buck_rule_macros.bzl", "static_library") +public_headers = glob([ + "PublicHeaders/**/*.h", +]) + static_library( name = "RLottieBinding", srcs = glob([ @@ -20,12 +24,9 @@ static_library( ], exclude = [ "rlottie/src/lottie/rapidjson/msinttypes/**/*", ]) + [ - "LottieInstance.h", "config.h", - ], - exported_headers = [ - "LottieInstance.h" - ], + ] + public_headers, + exported_headers = public_headers, frameworks = [ "$SDKROOT/System/Library/Frameworks/Foundation.framework", "$SDKROOT/System/Library/Frameworks/UIKit.framework", diff --git a/submodules/ton/BUCK b/submodules/ton/BUCK index 11b04572d7..5612efe985 100644 --- a/submodules/ton/BUCK +++ b/submodules/ton/BUCK @@ -42,14 +42,14 @@ ton_lib_flags = ["-l" + name for name in ton_lib_names] genrule( name = "ton_build", srcs = [ - "build-ton.sh", + "build-ton-buck.sh", "tonlib-src", - "iOS.cmake" + "iOS-buck.cmake" ], bash = """ export PATH=\"$PATH:$(location //third-party/cmake:cmake)/cmake-3.16.0/bin\" - sh $SRCDIR/build-ton.sh $OUT $SRCDIR $(location //submodules/openssl:openssl_build_merged) + sh $SRCDIR/build-ton-buck.sh $OUT $SRCDIR $(location //submodules/openssl:openssl_build_merged) """, out = "ton", visibility = [ diff --git a/submodules/ton/BUILD b/submodules/ton/BUILD index f7346410f8..e57ae88999 100644 --- a/submodules/ton/BUILD +++ b/submodules/ton/BUILD @@ -38,7 +38,7 @@ ton_lib_names = [ genrule( name = "ton_build", srcs = [ - "build-ton.sh", + "build-ton-bazel.sh", "iOS.cmake", "tonlib-src.tar.gz", "//submodules/openssl:openssl_include", @@ -58,7 +58,7 @@ genrule( echo "Unsupported architecture $(TARGET_CPU)" fi - cp $(location :build-ton.sh) "$(RULEDIR)/" + cp $(location :build-ton-bazel.sh) "$(RULEDIR)/" cp $(location :iOS.cmake) "$(RULEDIR)/" tar -xzf $(location tonlib-src.tar.gz) -C "$(RULEDIR)/" @@ -70,7 +70,7 @@ genrule( done mkdir -p "$(RULEDIR)/Public/ton" - sh $(RULEDIR)/build-ton.sh "$(RULEDIR)" "$(RULEDIR)" "$(RULEDIR)/openssl_headers" $$BUILD_ARCH + sh $(RULEDIR)/build-ton-bazel.sh "$(RULEDIR)" "$(RULEDIR)" "$(RULEDIR)/openssl_headers" $$BUILD_ARCH """ + "\n".join([ "cp -f \"$(RULEDIR)/build/out/include/{}\" \"$(location Public/ton/include/{})\"".format(header, header) for header in ton_headers diff --git a/submodules/ton/build-ton.sh b/submodules/ton/build-ton-bazel.sh similarity index 97% rename from submodules/ton/build-ton.sh rename to submodules/ton/build-ton-bazel.sh index b56466551d..069aab7bdf 100755 --- a/submodules/ton/build-ton.sh +++ b/submodules/ton/build-ton-bazel.sh @@ -20,7 +20,7 @@ fi ARCHIVE_PATH="$SOURCE_DIR/tonlib.zip" td_path="$SOURCE_DIR/tonlib-src" -TOOLCHAIN="$SOURCE_DIR/iOS.cmake" +TOOLCHAIN="$SOURCE_DIR/iOS-bazel.cmake" mkdir -p "$OUT_DIR" mkdir -p "$OUT_DIR/build" diff --git a/submodules/ton/build-ton-buck.sh b/submodules/ton/build-ton-buck.sh new file mode 100644 index 0000000000..f11b7ac0d1 --- /dev/null +++ b/submodules/ton/build-ton-buck.sh @@ -0,0 +1,76 @@ +#/bin/sh + +set -x +set -e + +OUT_DIR="$1" +SOURCE_DIR="$2" +openssl_base_path="$3" + +if [ -z "$openssl_base_path" ]; then + echo "Usage: sh build-ton.sh path/to/openssl" + exit 1 +fi + +if [ ! -d "$openssl_base_path" ]; then + echo "$openssl_base_path not found" + exit 1 +fi + +ARCHIVE_PATH="$SOURCE_DIR/tonlib.zip" +td_path="$SOURCE_DIR/tonlib-src" +TOOLCHAIN="$SOURCE_DIR/iOS-buck.cmake" + +mkdir -p "$OUT_DIR" +mkdir -p "$OUT_DIR/build" +cd "$OUT_DIR/build" + +platforms="iOS" +for platform in $platforms; do + openssl_path="$openssl_base_path" + echo "OpenSSL path = ${openssl_path}" + openssl_crypto_library="${openssl_path}/lib/libcrypto.a" + openssl_ssl_library="${openssl_path}/lib/libssl.a" + options="$options -DOPENSSL_FOUND=1" + options="$options -DOPENSSL_CRYPTO_LIBRARY=${openssl_crypto_library}" + options="$options -DOPENSSL_INCLUDE_DIR=${openssl_path}/include" + options="$options -DOPENSSL_LIBRARIES=${openssl_crypto_library}" + options="$options -DCMAKE_BUILD_TYPE=Release" + if [[ $skip_build = "" ]]; then + simulators="0 1" + else + simulators="" + fi + for simulator in $simulators; + do + build="build-${platform}" + install="install-${platform}" + if [[ $simulator = "1" ]]; then + build="${build}-simulator" + install="${install}-simulator" + ios_platform="SIMULATOR" + else + ios_platform="OS" + fi + echo "Platform = ${platform} Simulator = ${simulator}" + echo $ios_platform + rm -rf $build + mkdir -p $build + mkdir -p $install + cd $build + cmake $td_path $options -DCMAKE_TOOLCHAIN_FILE="$TOOLCHAIN" -DIOS_PLATFORM=${ios_platform} -DTON_ARCH= -DCMAKE_INSTALL_PREFIX=../${install} + CORE_COUNT=`sysctl -n hw.logicalcpu` + make -j$CORE_COUNT install || exit + cd .. + done + mkdir -p $platform + + mkdir -p "out" + cp -r "install-iOS/include" "out/" + mkdir -p "out/lib" + + for f in install-iOS/lib/*.a; do + lib_name=$(basename "$f") + lipo -create "install-iOS/lib/$lib_name" "install-iOS-simulator/lib/$lib_name" -o "out/lib/$lib_name" + done +done diff --git a/submodules/ton/iOS.cmake b/submodules/ton/iOS-bazel.cmake similarity index 100% rename from submodules/ton/iOS.cmake rename to submodules/ton/iOS-bazel.cmake diff --git a/submodules/ton/iOS-buck.cmake b/submodules/ton/iOS-buck.cmake new file mode 100644 index 0000000000..e983c8d277 --- /dev/null +++ b/submodules/ton/iOS-buck.cmake @@ -0,0 +1,250 @@ +# This file is based off of the Platform/Darwin.cmake and Platform/UnixPaths.cmake +# files which are included with CMake 2.8.4 +# It has been altered for iOS development + +# Options: +# +# IOS_PLATFORM = OS (default) or SIMULATOR +# This decides if SDKS will be selected from the iPhoneOS.platform or iPhoneSimulator.platform folders +# OS - the default, used to build for iPhone and iPad physical devices, which have an arm arch. +# SIMULATOR - used to build for the Simulator platforms, which have an x86 arch. +# +# CMAKE_IOS_DEVELOPER_ROOT = automatic(default) or /path/to/platform/Developer folder +# By default this location is automatcially chosen based on the IOS_PLATFORM value above. +# If set manually, it will override the default location and force the user of a particular Developer Platform +# +# CMAKE_IOS_SDK_ROOT = automatic(default) or /path/to/platform/Developer/SDKs/SDK folder +# By default this location is automatcially chosen based on the CMAKE_IOS_DEVELOPER_ROOT value. +# In this case it will always be the most up-to-date SDK found in the CMAKE_IOS_DEVELOPER_ROOT path. +# If set manually, this will force the use of a specific SDK version + +# Macros: +# +# set_xcode_property (TARGET XCODE_PROPERTY XCODE_VALUE) +# A convenience macro for setting xcode specific properties on targets +# example: set_xcode_property (myioslib IPHONEOS_DEPLOYMENT_TARGET "3.1") +# +# find_host_package (PROGRAM ARGS) +# A macro used to find executable programs on the host system, not within the iOS environment. +# Thanks to the android-cmake project for providing the command + +# Standard settings +set (CMAKE_SYSTEM_NAME Darwin) +set (CMAKE_SYSTEM_VERSION 1) +set (UNIX True) +set (APPLE True) +set (IOS True) + +# Required as of cmake 2.8.10 +set (CMAKE_OSX_DEPLOYMENT_TARGET "" CACHE STRING "Force unset of the deployment target for iOS" FORCE) + +# Determine the cmake host system version so we know where to find the iOS SDKs +find_program (CMAKE_UNAME uname /bin /usr/bin /usr/local/bin) +if (CMAKE_UNAME) + exec_program(uname ARGS -r OUTPUT_VARIABLE CMAKE_HOST_SYSTEM_VERSION) + string (REGEX REPLACE "^([0-9]+)\\.([0-9]+).*$" "\\1" DARWIN_MAJOR_VERSION "${CMAKE_HOST_SYSTEM_VERSION}") +endif (CMAKE_UNAME) + +# Force the compilers to gcc for iOS +set (CMAKE_C_COMPILER /usr/bin/gcc) +set (CMAKE_CXX_COMPILER /usr/bin/g++) +set(CMAKE_AR ar CACHE FILEPATH "" FORCE) +set(CMAKE_RANLIB ranlib CACHE FILEPATH "" FORCE) +set(PKG_CONFIG_EXECUTABLE pkg-config CACHE FILEPATH "" FORCE) + +# Setup iOS platform unless specified manually with IOS_PLATFORM +if (NOT DEFINED IOS_PLATFORM) + set (IOS_PLATFORM "OS") +endif (NOT DEFINED IOS_PLATFORM) +set (IOS_PLATFORM ${IOS_PLATFORM} CACHE STRING "Type of iOS Platform") + +# Check the platform selection and setup for developer root +if (${IOS_PLATFORM} STREQUAL "OS") + set (IOS_PLATFORM_LOCATION "iPhoneOS.platform") + set (XCODE_IOS_PLATFORM iphoneos) + + # This causes the installers to properly locate the output libraries + set (CMAKE_XCODE_EFFECTIVE_PLATFORMS "-iphoneos") + + set (APPLE_IOS True) +elseif (${IOS_PLATFORM} STREQUAL "SIMULATOR") + set (SIMULATOR_FLAG true) + set (IOS_PLATFORM_LOCATION "iPhoneSimulator.platform") + set (XCODE_IOS_PLATFORM iphonesimulator) + + # This causes the installers to properly locate the output libraries + set (CMAKE_XCODE_EFFECTIVE_PLATFORMS "-iphonesimulator") + + set (APPLE_IOS True) +elseif (${IOS_PLATFORM} STREQUAL "WATCHOS") + set (IOS_PLATFORM_LOCATION "WatchOS.platform") + set (XCODE_IOS_PLATFORM watchos) + + # This causes the installers to properly locate the output libraries + set (CMAKE_XCODE_EFFECTIVE_PLATFORMS "-watchos") + + set (APPLE_WATCH True) +elseif (${IOS_PLATFORM} STREQUAL "WATCHSIMULATOR") + set (SIMULATOR_FLAG true) + set (IOS_PLATFORM_LOCATION "WatchSimulator.platform") + set (XCODE_IOS_PLATFORM watchsimulator) + + # This causes the installers to properly locate the output libraries + set (CMAKE_XCODE_EFFECTIVE_PLATFORMS "-watchsimulator") + + set (APPLE_WATCH True) +elseif (${IOS_PLATFORM} STREQUAL "TVOS") + set (IOS_PLATFORM_LOCATION "AppleTvOS.platform") + set (XCODE_IOS_PLATFORM tvos) + + # This causes the installers to properly locate the output libraries + set (CMAKE_XCODE_EFFECTIVE_PLATFORMS "-appletvos") + + set (APPLE_TV True) +elseif (${IOS_PLATFORM} STREQUAL "TVSIMULATOR") + set (SIMULATOR_FLAG true) + set (IOS_PLATFORM_LOCATION "AppleTvSimulator.platform") + set (XCODE_IOS_PLATFORM tvsimulator) + + # This causes the installers to properly locate the output libraries + set (CMAKE_XCODE_EFFECTIVE_PLATFORMS "-tvsimulator") + + set (APPLE_TV True) +else (${IOS_PLATFORM} STREQUAL "OS") + message (FATAL_ERROR "Unsupported IOS_PLATFORM value selected. Please choose OS, SIMULATOR, or WATCHOS.") +endif () + +# All iOS/Darwin specific settings - some may be redundant +set (CMAKE_SHARED_LIBRARY_PREFIX "lib") +set (CMAKE_SHARED_LIBRARY_SUFFIX ".dylib") +set (CMAKE_SHARED_MODULE_PREFIX "lib") +set (CMAKE_SHARED_MODULE_SUFFIX ".so") +set (CMAKE_MODULE_EXISTS 1) +set (CMAKE_DL_LIBS "") + +set (CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG "-compatibility_version ") +set (CMAKE_C_OSX_CURRENT_VERSION_FLAG "-current_version ") +set (CMAKE_CXX_OSX_COMPATIBILITY_VERSION_FLAG "${CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG}") +set (CMAKE_CXX_OSX_CURRENT_VERSION_FLAG "${CMAKE_C_OSX_CURRENT_VERSION_FLAG}") + +if (IOS_DEPLOYMENT_TARGET) + set (XCODE_IOS_PLATFORM_VERSION_FLAGS "-m${XCODE_IOS_PLATFORM}-version-min=${IOS_DEPLOYMENT_TARGET}") +endif() + +set (CMAKE_SHARED_LINKER_FLAGS_INIT "-fapplication-extension") +#if (NOT SIMULATOR_FLAG) +# set (BITCODE "-fembed-bitcode") +#endif() +set (CMAKE_C_FLAGS_INIT "${XCODE_IOS_PLATFORM_VERSION_FLAGS} ${BITCODE} -fno-stack-check") +# Hidden visibilty is required for cxx on iOS +set (CMAKE_CXX_FLAGS_INIT "${XCODE_IOS_PLATFORM_VERSION_FLAGS} ${BITCODE} -fvisibility-inlines-hidden -fno-stack-check") + +set (CMAKE_C_LINK_FLAGS "${XCODE_IOS_PLATFORM_VERSION_FLAGS} -fapplication-extension -Wl,-search_paths_first ${CMAKE_C_LINK_FLAGS}") +set (CMAKE_CXX_LINK_FLAGS "${XCODE_IOS_PLATFORM_VERSION_FLAGS} -fapplication-extension -Wl,-search_paths_first ${CMAKE_CXX_LINK_FLAGS}") + +set (CMAKE_PLATFORM_HAS_INSTALLNAME 1) +set (CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-dynamiclib -headerpad_max_install_names") +set (CMAKE_SHARED_MODULE_CREATE_C_FLAGS "-bundle -headerpad_max_install_names") +set (CMAKE_SHARED_MODULE_LOADER_C_FLAG "-Wl,-bundle_loader,") +set (CMAKE_SHARED_MODULE_LOADER_CXX_FLAG "-Wl,-bundle_loader,") +set (CMAKE_FIND_LIBRARY_SUFFIXES ".dylib" ".so" ".a") + +# hack: if a new cmake (which uses CMAKE_INSTALL_NAME_TOOL) runs on an old build tree +# (where install_name_tool was hardcoded) and where CMAKE_INSTALL_NAME_TOOL isn't in the cache +# and still cmake didn't fail in CMakeFindBinUtils.cmake (because it isn't rerun) +# hardcode CMAKE_INSTALL_NAME_TOOL here to install_name_tool, so it behaves as it did before, Alex +if (NOT DEFINED CMAKE_INSTALL_NAME_TOOL) + find_program(CMAKE_INSTALL_NAME_TOOL install_name_tool) +endif (NOT DEFINED CMAKE_INSTALL_NAME_TOOL) + +# Setup iOS deployment target +set (IOS_DEPLOYMENT_TARGET ${IOS_DEPLOYMENT_TARGET} CACHE STRING "Minimum iOS version") + +# Setup iOS developer location unless specified manually with CMAKE_IOS_DEVELOPER_ROOT +# Note Xcode 4.3 changed the installation location, choose the most recent one available +exec_program(/usr/bin/xcode-select ARGS -print-path OUTPUT_VARIABLE CMAKE_XCODE_DEVELOPER_DIR) +set (XCODE_POST_43_ROOT "${CMAKE_XCODE_DEVELOPER_DIR}/Platforms/${IOS_PLATFORM_LOCATION}/Developer") +set (XCODE_PRE_43_ROOT "/Developer/Platforms/${IOS_PLATFORM_LOCATION}/Developer") +if (NOT DEFINED CMAKE_IOS_DEVELOPER_ROOT) + if (EXISTS ${XCODE_POST_43_ROOT}) + set (CMAKE_IOS_DEVELOPER_ROOT ${XCODE_POST_43_ROOT}) + elseif(EXISTS ${XCODE_PRE_43_ROOT}) + set (CMAKE_IOS_DEVELOPER_ROOT ${XCODE_PRE_43_ROOT}) + endif (EXISTS ${XCODE_POST_43_ROOT}) +endif (NOT DEFINED CMAKE_IOS_DEVELOPER_ROOT) +set (CMAKE_IOS_DEVELOPER_ROOT ${CMAKE_IOS_DEVELOPER_ROOT} CACHE PATH "Location of iOS Platform") + +# Find and use the most recent iOS sdk unless specified manually with CMAKE_IOS_SDK_ROOT +if (NOT DEFINED CMAKE_IOS_SDK_ROOT) + file (GLOB _CMAKE_IOS_SDKS "${CMAKE_IOS_DEVELOPER_ROOT}/SDKs/*") + if (_CMAKE_IOS_SDKS) + list (SORT _CMAKE_IOS_SDKS) + list (REVERSE _CMAKE_IOS_SDKS) + list (GET _CMAKE_IOS_SDKS 0 CMAKE_IOS_SDK_ROOT) + else (_CMAKE_IOS_SDKS) + message (FATAL_ERROR "No iOS SDK's found in default search path ${CMAKE_IOS_DEVELOPER_ROOT}. Manually set CMAKE_IOS_SDK_ROOT or install the iOS SDK.") + endif (_CMAKE_IOS_SDKS) + message (STATUS "Toolchain using default iOS SDK: ${CMAKE_IOS_SDK_ROOT}") +endif (NOT DEFINED CMAKE_IOS_SDK_ROOT) +set (CMAKE_IOS_SDK_ROOT ${CMAKE_IOS_SDK_ROOT} CACHE PATH "Location of the selected iOS SDK") + +# Set the sysroot default to the most recent SDK +set (CMAKE_OSX_SYSROOT ${CMAKE_IOS_SDK_ROOT} CACHE PATH "Sysroot used for iOS support") + +# set the architecture for iOS +if (IOS_PLATFORM STREQUAL "OS") + set (IOS_ARCH "armv7;arm64") +elseif (IOS_PLATFORM STREQUAL "SIMULATOR") + set (IOS_ARCH "x86_64") +elseif (IOS_PLATFORM STREQUAL "WATCHOS") + set (IOS_ARCH "armv7k") +elseif (IOS_PLATFORM STREQUAL "WATCHSIMULATOR") + set (IOS_ARCH "i386") +elseif (IOS_PLATFORM STREQUAL "TVOS") + set (IOS_ARCH "arm64") +elseif (IOS_PLATFORM STREQUAL "TVSIMULATOR") + set (IOS_ARCH "x86_64") +else() + message (WARNING "Unknown IOS_PLATFORM=<${IOS_PLATFORM}>") +endif() +message (STATUS ${IOS_ARCH}) + +set (CMAKE_OSX_ARCHITECTURES ${IOS_ARCH} CACHE STRING "Build architecture for iOS") + +# Set the find root to the iOS developer roots and to user defined paths +set (CMAKE_FIND_ROOT_PATH ${CMAKE_IOS_DEVELOPER_ROOT} ${CMAKE_IOS_SDK_ROOT} ${CMAKE_PREFIX_PATH} CACHE STRING "iOS find search path root") + +# default to searching for frameworks first +set (CMAKE_FIND_FRAMEWORK FIRST) + +# set up the default search directories for frameworks +set (CMAKE_SYSTEM_FRAMEWORK_PATH + ${CMAKE_IOS_SDK_ROOT}/System/Library/Frameworks + ${CMAKE_IOS_SDK_ROOT}/System/Library/PrivateFrameworks + ${CMAKE_IOS_SDK_ROOT}/Developer/Library/Frameworks +) + +# only search the iOS sdks, not the remainder of the host filesystem +set (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY) +set (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) + +# This little macro lets you set any Xcode specific property +macro (set_xcode_property TARGET XCODE_PROPERTY XCODE_VALUE) + set_property (TARGET ${TARGET} PROPERTY XCODE_ATTRIBUTE_${XCODE_PROPERTY} ${XCODE_VALUE}) +endmacro (set_xcode_property) + +# This macro lets you find executable programs on the host system +macro (find_host_package) + set (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) + set (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER) + set (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER) + set (IOS FALSE) + + find_package(${ARGN}) + + set (IOS TRUE) + set (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY) + set (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) + set (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +endmacro (find_host_package)