summaryrefslogtreecommitdiff
path: root/platform/ios/detect.py
diff options
context:
space:
mode:
Diffstat (limited to 'platform/ios/detect.py')
-rw-r--r--platform/ios/detect.py152
1 files changed, 152 insertions, 0 deletions
diff --git a/platform/ios/detect.py b/platform/ios/detect.py
new file mode 100644
index 0000000000..67c90b10a0
--- /dev/null
+++ b/platform/ios/detect.py
@@ -0,0 +1,152 @@
+import os
+import sys
+from methods import detect_darwin_sdk_path
+
+
+def is_active():
+ return True
+
+
+def get_name():
+ return "iOS"
+
+
+def can_build():
+ if sys.platform == "darwin" or ("OSXCROSS_IOS" in os.environ):
+ return True
+
+ return False
+
+
+def get_opts():
+ from SCons.Variables import BoolVariable
+
+ return [
+ (
+ "IOS_TOOLCHAIN_PATH",
+ "Path to iOS toolchain",
+ "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain",
+ ),
+ ("IOS_SDK_PATH", "Path to the iOS SDK", ""),
+ BoolVariable("ios_simulator", "Build for iOS Simulator", False),
+ BoolVariable("ios_exceptions", "Enable exceptions", False),
+ ("ios_triple", "Triple for ios toolchain", ""),
+ ]
+
+
+def get_flags():
+ return [
+ ("tools", False),
+ ("use_volk", False),
+ ]
+
+
+def configure(env):
+ ## Build type
+
+ if env["target"].startswith("release"):
+ env.Append(CPPDEFINES=["NDEBUG", ("NS_BLOCK_ASSERTIONS", 1)])
+ if env["optimize"] == "speed": # optimize for speed (default)
+ # `-O2` is more friendly to debuggers than `-O3`, leading to better crash backtraces
+ # when using `target=release_debug`.
+ opt = "-O3" if env["target"] == "release" else "-O2"
+ env.Append(CCFLAGS=[opt, "-ftree-vectorize", "-fomit-frame-pointer"])
+ env.Append(LINKFLAGS=[opt])
+ elif env["optimize"] == "size": # optimize for size
+ env.Append(CCFLAGS=["-Os", "-ftree-vectorize"])
+ env.Append(LINKFLAGS=["-Os"])
+
+ elif env["target"] == "debug":
+ env.Append(CCFLAGS=["-gdwarf-2", "-O0"])
+ env.Append(CPPDEFINES=["_DEBUG", ("DEBUG", 1)])
+
+ if env["use_lto"]:
+ env.Append(CCFLAGS=["-flto"])
+ env.Append(LINKFLAGS=["-flto"])
+
+ ## Architecture
+ env["bits"] = "64"
+ if env["arch"] != "x86_64":
+ env["arch"] = "arm64"
+
+ ## Compiler configuration
+
+ # Save this in environment for use by other modules
+ if "OSXCROSS_IOS" in os.environ:
+ env["osxcross"] = True
+
+ env["ENV"]["PATH"] = env["IOS_TOOLCHAIN_PATH"] + "/Developer/usr/bin/:" + env["ENV"]["PATH"]
+
+ compiler_path = "$IOS_TOOLCHAIN_PATH/usr/bin/${ios_triple}"
+ s_compiler_path = "$IOS_TOOLCHAIN_PATH/Developer/usr/bin/"
+
+ ccache_path = os.environ.get("CCACHE")
+ if ccache_path is None:
+ env["CC"] = compiler_path + "clang"
+ env["CXX"] = compiler_path + "clang++"
+ env["S_compiler"] = s_compiler_path + "gcc"
+ else:
+ # there aren't any ccache wrappers available for iOS,
+ # to enable caching we need to prepend the path to the ccache binary
+ env["CC"] = ccache_path + " " + compiler_path + "clang"
+ env["CXX"] = ccache_path + " " + compiler_path + "clang++"
+ env["S_compiler"] = ccache_path + " " + s_compiler_path + "gcc"
+ env["AR"] = compiler_path + "ar"
+ env["RANLIB"] = compiler_path + "ranlib"
+
+ ## Compile flags
+
+ if env["ios_simulator"]:
+ detect_darwin_sdk_path("iossimulator", env)
+ env.Append(ASFLAGS=["-mios-simulator-version-min=13.0"])
+ env.Append(CCFLAGS=["-mios-simulator-version-min=13.0"])
+ env.extra_suffix = ".simulator" + env.extra_suffix
+ else:
+ detect_darwin_sdk_path("ios", env)
+ env.Append(ASFLAGS=["-miphoneos-version-min=11.0"])
+ env.Append(CCFLAGS=["-miphoneos-version-min=11.0"])
+
+ if env["arch"] == "x86_64":
+ env["ENV"]["MACOSX_DEPLOYMENT_TARGET"] = "10.9"
+ env.Append(
+ CCFLAGS=(
+ "-fobjc-arc -arch x86_64"
+ " -fobjc-abi-version=2 -fobjc-legacy-dispatch -fmessage-length=0 -fpascal-strings -fblocks"
+ " -fasm-blocks -isysroot $IOS_SDK_PATH"
+ ).split()
+ )
+ env.Append(ASFLAGS=["-arch", "x86_64"])
+ elif env["arch"] == "arm64":
+ env.Append(
+ CCFLAGS=(
+ "-fobjc-arc -arch arm64 -fmessage-length=0 -fno-strict-aliasing"
+ " -fdiagnostics-print-source-range-info -fdiagnostics-show-category=id -fdiagnostics-parseable-fixits"
+ " -fpascal-strings -fblocks -fvisibility=hidden -MMD -MT dependencies"
+ " -isysroot $IOS_SDK_PATH".split()
+ )
+ )
+ env.Append(ASFLAGS=["-arch", "arm64"])
+ env.Append(CPPDEFINES=["NEED_LONG_INT"])
+
+ # Disable exceptions on non-tools (template) builds
+ if not env["tools"]:
+ if env["ios_exceptions"]:
+ env.Append(CCFLAGS=["-fexceptions"])
+ else:
+ env.Append(CCFLAGS=["-fno-exceptions"])
+
+ # Temp fix for ABS/MAX/MIN macros in iOS SDK blocking compilation
+ env.Append(CCFLAGS=["-Wno-ambiguous-macro"])
+
+ env.Prepend(
+ CPPPATH=[
+ "$IOS_SDK_PATH/usr/include",
+ "$IOS_SDK_PATH/System/Library/Frameworks/AudioUnit.framework/Headers",
+ ]
+ )
+
+ env.Prepend(CPPPATH=["#platform/ios"])
+ env.Append(CPPDEFINES=["IOS_ENABLED", "UNIX_ENABLED", "COREAUDIO_ENABLED"])
+
+ if env["vulkan"]:
+ env.Append(CPPDEFINES=["VULKAN_ENABLED"])