This commit is contained in:
Ali 2020-02-19 03:08:25 +04:00
parent 22abc4fa6c
commit 1e742ea3f9
15 changed files with 564 additions and 34 deletions

View File

@ -12,7 +12,7 @@ WALLET_BUCK_OPTIONS=\
--config custom.distributionProvisioningProfileApp="${WALLET_DISTRIBUTION_PROVISIONING_PROFILE_APP}" \ --config custom.distributionProvisioningProfileApp="${WALLET_DISTRIBUTION_PROVISIONING_PROFILE_APP}" \
--config custom.apiId="${API_ID}" \ --config custom.apiId="${API_ID}" \
--config custom.apiHash="${API_HASH}" \ --config custom.apiHash="${API_HASH}" \
--config custom.hockeyAppId="${HOCKEYAPP_ID}" \ --config custom.appCenterId="${HOCKEYAPP_ID}" \
--config custom.isInternalBuild="${IS_INTERNAL_BUILD}" \ --config custom.isInternalBuild="${IS_INTERNAL_BUILD}" \
--config custom.isAppStoreBuild="${IS_APPSTORE_BUILD}" \ --config custom.isAppStoreBuild="${IS_APPSTORE_BUILD}" \
--config custom.appStoreId="${APPSTORE_ID}" \ --config custom.appStoreId="${APPSTORE_ID}" \
@ -38,6 +38,7 @@ build_wallet: check_env
//submodules/AsyncDisplayKit:AsyncDisplayKit#shared,iphoneos-arm64,iphoneos-armv7 \ //submodules/AsyncDisplayKit:AsyncDisplayKit#shared,iphoneos-arm64,iphoneos-armv7 \
//submodules/Display:Display#dwarf-and-dsym,shared,iphoneos-arm64,iphoneos-armv7 \ //submodules/Display:Display#dwarf-and-dsym,shared,iphoneos-arm64,iphoneos-armv7 \
//submodules/Display:Display#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_BUCK_OPTIONS} ${BUCK_RELEASE_OPTIONS} ${BUCK_THREADS_OPTIONS} ${BUCK_CACHE_OPTIONS}
wallet_package: wallet_package:

View File

@ -1,30 +1,21 @@
load("//Config:buck_rule_macros.bzl", "framework") load("//Config:buck_rule_macros.bzl", "framework")
ASYNCDISPLAYKIT_EXPORTED_HEADERS = glob([ public_headers = glob([
"Source/*.h", "Source/PublicHeaders/AsyncDisplayKit/*.h",
"Source/Details/**/*.h",
"Source/Layout/*.h",
"Source/Base/*.h",
"Source/Debug/AsyncDisplayKit+Debug.h",
"Source/TextKit/ASTextNodeTypes.h",
"Source/TextKit/ASTextKitComponents.h"
]) ])
ASYNCDISPLAYKIT_PRIVATE_HEADERS = glob([ private_headers = glob([
"Source/**/*.h" "Source/*.h",
], ])
exclude = ASYNCDISPLAYKIT_EXPORTED_HEADERS,
)
framework( framework(
name = "AsyncDisplayKit", name = "AsyncDisplayKit",
headers = ASYNCDISPLAYKIT_PRIVATE_HEADERS,
exported_headers = ASYNCDISPLAYKIT_EXPORTED_HEADERS,
srcs = glob([ srcs = glob([
"Source/**/*.m", "Source/**/*.m",
"Source/**/*.mm", "Source/**/*.mm",
"Source/Base/*.m"
]), ]),
headers = private_headers,
exported_headers = public_headers,
compiler_flags = [ compiler_flags = [
"-DMINIMAL_ASDK", "-DMINIMAL_ASDK",
], ],

View File

@ -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",
],
)

View File

@ -14,6 +14,7 @@ static_library(
]), ]),
deps = [ deps = [
"//submodules/AppBundle:AppBundle", "//submodules/AppBundle:AppBundle",
"//submodules/NumberPluralizationForm:NumberPluralizationForm",
], ],
frameworks = [ frameworks = [
"$SDKROOT/System/Library/Frameworks/Foundation.framework", "$SDKROOT/System/Library/Frameworks/Foundation.framework",

View File

@ -1,3 +1,4 @@
load("//Config:buck_rule_macros.bzl", "static_library", "gen_header_targets")
openssl_headers = [ openssl_headers = [
"aes.h", "aes.h",
@ -114,11 +115,11 @@ rules = [
genrule( genrule(
name = "openssl_build_" + arch, name = "openssl_build_" + arch,
srcs = glob([ srcs = glob([
"build-openssl.sh", "build-openssl-buck.sh",
"*.tar.gz", "*.tar.gz",
"*.patch", "*.patch",
]), ]),
bash = "sh $SRCDIR/build-openssl.sh $OUT $SRCDIR " + arch, bash = "sh $SRCDIR/build-openssl-buck.sh $OUT $SRCDIR " + arch,
out = "openssl_" + arch, out = "openssl_" + arch,
visibility = [ visibility = [
"//submodules/openssl:...", "//submodules/openssl:...",

View File

@ -112,7 +112,7 @@ openssl_libs = [
genrule( genrule(
name = "openssl_build", name = "openssl_build",
srcs = [ srcs = [
"build-openssl.sh", "build-openssl-bazel.sh",
"openssl-1.1.1d.tar.gz", "openssl-1.1.1d.tar.gz",
"patch-conf.patch", "patch-conf.patch",
"patch-include.patch", "patch-include.patch",
@ -129,9 +129,9 @@ genrule(
echo "Unsupported architecture $(TARGET_CPU)" echo "Unsupported architecture $(TARGET_CPU)"
fi fi
""" + "\n" + """ + "\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([ "\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([ "\n".join([
"cp \"$(RULEDIR)/$$BUILD_ARCH/build/$$BUILD_ARCH/lib/{}\" \"$(location :{})\"\n".format(x, x) for x in openssl_libs "cp \"$(RULEDIR)/$$BUILD_ARCH/build/$$BUILD_ARCH/lib/{}\" \"$(location :{})\"\n".format(x, x) for x in openssl_libs

View File

@ -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}"

View File

@ -1,5 +1,9 @@
load("//Config:buck_rule_macros.bzl", "static_library") load("//Config:buck_rule_macros.bzl", "static_library")
public_headers = glob([
"PublicHeaders/**/*.h",
])
static_library( static_library(
name = "RLottieBinding", name = "RLottieBinding",
srcs = glob([ srcs = glob([
@ -20,12 +24,9 @@ static_library(
], exclude = [ ], exclude = [
"rlottie/src/lottie/rapidjson/msinttypes/**/*", "rlottie/src/lottie/rapidjson/msinttypes/**/*",
]) + [ ]) + [
"LottieInstance.h",
"config.h", "config.h",
], ] + public_headers,
exported_headers = [ exported_headers = public_headers,
"LottieInstance.h"
],
frameworks = [ frameworks = [
"$SDKROOT/System/Library/Frameworks/Foundation.framework", "$SDKROOT/System/Library/Frameworks/Foundation.framework",
"$SDKROOT/System/Library/Frameworks/UIKit.framework", "$SDKROOT/System/Library/Frameworks/UIKit.framework",

View File

@ -42,14 +42,14 @@ ton_lib_flags = ["-l" + name for name in ton_lib_names]
genrule( genrule(
name = "ton_build", name = "ton_build",
srcs = [ srcs = [
"build-ton.sh", "build-ton-buck.sh",
"tonlib-src", "tonlib-src",
"iOS.cmake" "iOS-buck.cmake"
], ],
bash = bash =
""" """
export PATH=\"$PATH:$(location //third-party/cmake:cmake)/cmake-3.16.0/bin\" 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", out = "ton",
visibility = [ visibility = [

View File

@ -38,7 +38,7 @@ ton_lib_names = [
genrule( genrule(
name = "ton_build", name = "ton_build",
srcs = [ srcs = [
"build-ton.sh", "build-ton-bazel.sh",
"iOS.cmake", "iOS.cmake",
"tonlib-src.tar.gz", "tonlib-src.tar.gz",
"//submodules/openssl:openssl_include", "//submodules/openssl:openssl_include",
@ -58,7 +58,7 @@ genrule(
echo "Unsupported architecture $(TARGET_CPU)" echo "Unsupported architecture $(TARGET_CPU)"
fi fi
cp $(location :build-ton.sh) "$(RULEDIR)/" cp $(location :build-ton-bazel.sh) "$(RULEDIR)/"
cp $(location :iOS.cmake) "$(RULEDIR)/" cp $(location :iOS.cmake) "$(RULEDIR)/"
tar -xzf $(location tonlib-src.tar.gz) -C "$(RULEDIR)/" tar -xzf $(location tonlib-src.tar.gz) -C "$(RULEDIR)/"
@ -70,7 +70,7 @@ genrule(
done done
mkdir -p "$(RULEDIR)/Public/ton" 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([ "\n".join([
"cp -f \"$(RULEDIR)/build/out/include/{}\" \"$(location Public/ton/include/{})\"".format(header, header) for header in ton_headers "cp -f \"$(RULEDIR)/build/out/include/{}\" \"$(location Public/ton/include/{})\"".format(header, header) for header in ton_headers

View File

@ -20,7 +20,7 @@ fi
ARCHIVE_PATH="$SOURCE_DIR/tonlib.zip" ARCHIVE_PATH="$SOURCE_DIR/tonlib.zip"
td_path="$SOURCE_DIR/tonlib-src" 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"
mkdir -p "$OUT_DIR/build" mkdir -p "$OUT_DIR/build"

View File

@ -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

View File

@ -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)