| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | import os | 
					
						
							|  |  |  | import sys | 
					
						
							| 
									
										
										
										
											2018-08-24 02:03:57 +02:00
										 |  |  | from methods import detect_darwin_sdk_path | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | def is_active(): | 
					
						
							| 
									
										
										
										
											2016-10-30 18:44:57 +01:00
										 |  |  |     return True | 
					
						
							| 
									
										
										
										
											2014-05-01 09:53:37 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-30 19:05:14 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | def get_name(): | 
					
						
							| 
									
										
										
										
											2016-10-30 18:44:57 +01:00
										 |  |  |     return "iOS" | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-30 19:05:14 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | def can_build(): | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     if sys.platform == "darwin" or ("OSXCROSS_IOS" in os.environ): | 
					
						
							| 
									
										
										
										
											2016-10-30 18:44:57 +01:00
										 |  |  |         return True | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-30 18:44:57 +01:00
										 |  |  |     return False | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-30 19:05:14 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | def get_opts(): | 
					
						
							| 
									
										
										
										
											2017-09-25 00:37:17 -04:00
										 |  |  |     from SCons.Variables import BoolVariable | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-30 18:44:57 +01:00
										 |  |  |     return [ | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |         ( | 
					
						
							|  |  |  |             "IPHONEPATH", | 
					
						
							|  |  |  |             "Path to iPhone toolchain", | 
					
						
							|  |  |  |             "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain", | 
					
						
							|  |  |  |         ), | 
					
						
							|  |  |  |         ("IPHONESDK", "Path to the iPhone SDK", ""), | 
					
						
							| 
									
										
										
										
											2021-01-18 09:52:43 +02:00
										 |  |  |         BoolVariable("ios_simulator", "Build for iOS Simulator", False), | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |         BoolVariable("ios_exceptions", "Enable exceptions", False), | 
					
						
							|  |  |  |         ("ios_triple", "Triple for ios toolchain", ""), | 
					
						
							| 
									
										
										
										
											2016-10-30 18:44:57 +01:00
										 |  |  |     ] | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-30 19:05:14 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | def get_flags(): | 
					
						
							| 
									
										
										
										
											2016-10-30 18:44:57 +01:00
										 |  |  |     return [ | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |         ("tools", False), | 
					
						
							| 
									
										
										
										
											2021-08-12 14:24:54 +03:00
										 |  |  |         ("use_volk", False), | 
					
						
							| 
									
										
										
										
											2016-10-30 18:44:57 +01:00
										 |  |  |     ] | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def configure(env): | 
					
						
							| 
									
										
										
										
											2017-06-30 19:21:38 +02:00
										 |  |  |     ## Build type | 
					
						
							| 
									
										
										
										
											2016-10-30 18:44:57 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     if env["target"].startswith("release"): | 
					
						
							|  |  |  |         env.Append(CPPDEFINES=["NDEBUG", ("NS_BLOCK_ASSERTIONS", 1)]) | 
					
						
							|  |  |  |         if env["optimize"] == "speed":  # optimize for speed (default) | 
					
						
							|  |  |  |             env.Append(CCFLAGS=["-O2", "-ftree-vectorize", "-fomit-frame-pointer"]) | 
					
						
							|  |  |  |             env.Append(LINKFLAGS=["-O2"]) | 
					
						
							| 
									
										
										
										
											2021-03-13 15:29:55 +01:00
										 |  |  |         elif env["optimize"] == "size":  # optimize for size | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |             env.Append(CCFLAGS=["-Os", "-ftree-vectorize"]) | 
					
						
							|  |  |  |             env.Append(LINKFLAGS=["-Os"]) | 
					
						
							| 
									
										
										
										
											2016-10-30 18:44:57 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-30 19:21:38 +02:00
										 |  |  |         if env["target"] == "release_debug": | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |             env.Append(CPPDEFINES=["DEBUG_ENABLED"]) | 
					
						
							| 
									
										
										
										
											2017-06-30 19:21:38 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     elif env["target"] == "debug": | 
					
						
							|  |  |  |         env.Append(CCFLAGS=["-gdwarf-2", "-O0"]) | 
					
						
							| 
									
										
										
										
											2020-07-23 09:39:07 +02:00
										 |  |  |         env.Append(CPPDEFINES=["_DEBUG", ("DEBUG", 1), "DEBUG_ENABLED"]) | 
					
						
							| 
									
										
										
										
											2017-06-30 19:21:38 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     if env["use_lto"]: | 
					
						
							|  |  |  |         env.Append(CCFLAGS=["-flto"]) | 
					
						
							|  |  |  |         env.Append(LINKFLAGS=["-flto"]) | 
					
						
							| 
									
										
										
										
											2017-11-02 09:11:29 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-30 19:21:38 +02:00
										 |  |  |     ## Architecture | 
					
						
							| 
									
										
										
										
											2018-12-27 13:42:15 +01:00
										 |  |  |     if env["arch"] == "x86":  # i386 | 
					
						
							| 
									
										
										
										
											2016-10-30 18:57:40 +01:00
										 |  |  |         env["bits"] = "32" | 
					
						
							| 
									
										
										
										
											2017-10-02 22:01:43 +07:00
										 |  |  |     elif env["arch"] == "x86_64": | 
					
						
							|  |  |  |         env["bits"] = "64" | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     elif env["arch"] == "arm" or env["arch"] == "arm32" or env["arch"] == "armv7" or env["bits"] == "32":  # arm | 
					
						
							| 
									
										
										
										
											2017-05-23 23:14:20 +10:00
										 |  |  |         env["arch"] = "arm" | 
					
						
							|  |  |  |         env["bits"] = "32" | 
					
						
							|  |  |  |     else:  # armv64 | 
					
						
							|  |  |  |         env["arch"] = "arm64" | 
					
						
							| 
									
										
										
										
											2016-10-30 18:44:57 +01:00
										 |  |  |         env["bits"] = "64" | 
					
						
							| 
									
										
										
										
											2017-06-30 19:21:38 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     ## Compiler configuration | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-22 12:31:43 +01:00
										 |  |  |     # Save this in environment for use by other modules | 
					
						
							|  |  |  |     if "OSXCROSS_IOS" in os.environ: | 
					
						
							|  |  |  |         env["osxcross"] = True | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     env["ENV"]["PATH"] = env["IPHONEPATH"] + "/Developer/usr/bin/:" + env["ENV"]["PATH"] | 
					
						
							| 
									
										
										
										
											2017-06-30 19:21:38 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     compiler_path = "$IPHONEPATH/usr/bin/${ios_triple}" | 
					
						
							|  |  |  |     s_compiler_path = "$IPHONEPATH/Developer/usr/bin/" | 
					
						
							| 
									
										
										
										
											2017-11-09 20:07:28 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |     ccache_path = os.environ.get("CCACHE") | 
					
						
							| 
									
										
										
										
											2018-10-27 01:18:15 +02:00
										 |  |  |     if ccache_path is None: | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |         env["CC"] = compiler_path + "clang" | 
					
						
							|  |  |  |         env["CXX"] = compiler_path + "clang++" | 
					
						
							|  |  |  |         env["S_compiler"] = s_compiler_path + "gcc" | 
					
						
							| 
									
										
										
										
											2017-11-09 20:07:28 -04:00
										 |  |  |     else: | 
					
						
							|  |  |  |         # there aren't any ccache wrappers available for iOS, | 
					
						
							|  |  |  |         # to enable caching we need to prepend the path to the ccache binary | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |         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" | 
					
						
							| 
									
										
										
										
											2017-06-30 19:21:38 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     ## Compile flags | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-18 09:52:43 +02:00
										 |  |  |     if env["ios_simulator"]: | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |         detect_darwin_sdk_path("iphonesimulator", env) | 
					
						
							| 
									
										
										
										
											2021-01-18 09:52:43 +02:00
										 |  |  |         env.Append(CCFLAGS=["-mios-simulator-version-min=13.0"]) | 
					
						
							|  |  |  |         env.extra_suffix = ".simulator" + env.extra_suffix | 
					
						
							|  |  |  |     else: | 
					
						
							|  |  |  |         detect_darwin_sdk_path("iphone", env) | 
					
						
							|  |  |  |         env.Append(CCFLAGS=["-miphoneos-version-min=11.0"]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if env["arch"] == "x86" or env["arch"] == "x86_64": | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |         env["ENV"]["MACOSX_DEPLOYMENT_TARGET"] = "10.9" | 
					
						
							| 
									
										
										
										
											2017-10-02 22:01:43 +07:00
										 |  |  |         arch_flag = "i386" if env["arch"] == "x86" else env["arch"] | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |         env.Append( | 
					
						
							|  |  |  |             CCFLAGS=( | 
					
						
							| 
									
										
										
										
											2020-10-30 18:47:42 +02:00
										 |  |  |                 "-fobjc-arc -arch " | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |                 + arch_flag | 
					
						
							| 
									
										
										
										
											2020-07-26 19:38:10 +02:00
										 |  |  |                 + " -fobjc-abi-version=2 -fobjc-legacy-dispatch -fmessage-length=0 -fpascal-strings -fblocks" | 
					
						
							| 
									
										
										
										
											2021-01-18 09:52:43 +02:00
										 |  |  |                 " -fasm-blocks -isysroot $IPHONESDK" | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |             ).split() | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |     elif env["arch"] == "arm": | 
					
						
							|  |  |  |         env.Append( | 
					
						
							| 
									
										
										
										
											2020-07-26 19:38:10 +02:00
										 |  |  |             CCFLAGS=( | 
					
						
							| 
									
										
										
										
											2020-10-01 22:18:39 +03:00
										 |  |  |                 "-fobjc-arc -arch armv7 -fmessage-length=0 -fno-strict-aliasing" | 
					
						
							| 
									
										
										
										
											2020-07-26 19:38:10 +02:00
										 |  |  |                 " -fdiagnostics-print-source-range-info -fdiagnostics-show-category=id -fdiagnostics-parseable-fixits" | 
					
						
							|  |  |  |                 " -fpascal-strings -fblocks -isysroot $IPHONESDK -fvisibility=hidden -mthumb" | 
					
						
							|  |  |  |                 ' "-DIBOutlet=__attribute__((iboutlet))"' | 
					
						
							|  |  |  |                 ' "-DIBOutletCollection(ClassName)=__attribute__((iboutletcollection(ClassName)))"' | 
					
						
							| 
									
										
										
										
											2021-01-18 09:52:43 +02:00
										 |  |  |                 ' "-DIBAction=void)__attribute__((ibaction)" -MMD -MT dependencies'.split() | 
					
						
							| 
									
										
										
										
											2020-07-26 19:38:10 +02:00
										 |  |  |             ) | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |         ) | 
					
						
							|  |  |  |     elif env["arch"] == "arm64": | 
					
						
							|  |  |  |         env.Append( | 
					
						
							| 
									
										
										
										
											2020-07-26 19:38:10 +02:00
										 |  |  |             CCFLAGS=( | 
					
						
							| 
									
										
										
										
											2020-10-01 22:18:39 +03:00
										 |  |  |                 "-fobjc-arc -arch arm64 -fmessage-length=0 -fno-strict-aliasing" | 
					
						
							| 
									
										
										
										
											2020-07-26 19:38:10 +02:00
										 |  |  |                 " -fdiagnostics-print-source-range-info -fdiagnostics-show-category=id -fdiagnostics-parseable-fixits" | 
					
						
							| 
									
										
										
										
											2021-01-18 09:52:43 +02:00
										 |  |  |                 " -fpascal-strings -fblocks -fvisibility=hidden -MMD -MT dependencies" | 
					
						
							| 
									
										
										
										
											2020-07-26 19:38:10 +02:00
										 |  |  |                 " -isysroot $IPHONESDK".split() | 
					
						
							|  |  |  |             ) | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |         ) | 
					
						
							|  |  |  |         env.Append(CPPDEFINES=["NEED_LONG_INT"]) | 
					
						
							|  |  |  |         env.Append(CPPDEFINES=["LIBYUV_DISABLE_NEON"]) | 
					
						
							| 
									
										
										
										
											2016-10-30 18:44:57 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-20 16:47:32 +02:00
										 |  |  |     # Disable exceptions on non-tools (template) builds | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     if not env["tools"]: | 
					
						
							|  |  |  |         if env["ios_exceptions"]: | 
					
						
							|  |  |  |             env.Append(CCFLAGS=["-fexceptions"]) | 
					
						
							| 
									
										
										
										
											2019-05-20 16:47:32 +02:00
										 |  |  |         else: | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |             env.Append(CCFLAGS=["-fno-exceptions"]) | 
					
						
							| 
									
										
										
										
											2017-06-30 19:21:38 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-15 21:59:57 +03:00
										 |  |  |     # Temp fix for ABS/MAX/MIN macros in iPhone SDK blocking compilation | 
					
						
							|  |  |  |     env.Append(CCFLAGS=["-Wno-ambiguous-macro"]) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     env.Prepend( | 
					
						
							| 
									
										
										
										
											2020-08-21 16:40:43 +01:00
										 |  |  |         CPPPATH=[ | 
					
						
							|  |  |  |             "$IPHONESDK/usr/include", | 
					
						
							|  |  |  |             "$IPHONESDK/System/Library/Frameworks/AudioUnit.framework/Headers", | 
					
						
							|  |  |  |         ] | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     ) | 
					
						
							| 
									
										
										
										
											2016-10-30 18:44:57 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     env.Prepend(CPPPATH=["#platform/iphone"]) | 
					
						
							|  |  |  |     env.Append(CPPDEFINES=["IPHONE_ENABLED", "UNIX_ENABLED", "COREAUDIO_ENABLED"]) | 
					
						
							| 
									
										
										
										
											2020-02-21 21:42:34 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-12 14:24:54 +03:00
										 |  |  |     if env["vulkan"]: | 
					
						
							|  |  |  |         env.Append(CPPDEFINES=["VULKAN_ENABLED"]) |