| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | import os | 
					
						
							| 
									
										
										
										
											2014-11-20 00:09:39 +03:00
										 |  |  | import platform | 
					
						
							| 
									
										
										
										
											2017-06-30 19:21:38 +02:00
										 |  |  | import sys | 
					
						
							| 
									
										
										
										
											2019-04-26 15:48:10 +02:00
										 |  |  | from methods import get_compiler_version, using_gcc, using_clang | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-04 21:40:16 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | def is_active(): | 
					
						
							| 
									
										
										
										
											2016-10-30 18:44:57 +01:00
										 |  |  |     return True | 
					
						
							| 
									
										
										
										
											2016-04-02 20:26:12 +02: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 "X11" | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def can_build(): | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-30 19:21:38 +02:00
										 |  |  |     if (os.name != "posix" or sys.platform == "darwin"): | 
					
						
							| 
									
										
										
										
											2016-10-30 18:44:57 +01:00
										 |  |  |         return False | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-30 19:21:38 +02:00
										 |  |  |     # Check the minimal dependencies | 
					
						
							|  |  |  |     x11_error = os.system("pkg-config --version > /dev/null") | 
					
						
							|  |  |  |     if (x11_error): | 
					
						
							| 
									
										
										
										
											2016-10-30 18:44:57 +01:00
										 |  |  |         return False | 
					
						
							| 
									
										
										
										
											2016-04-02 20:26:12 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-30 18:57:40 +01:00
										 |  |  |     x11_error = os.system("pkg-config x11 --modversion > /dev/null ") | 
					
						
							| 
									
										
										
										
											2016-10-30 18:44:57 +01:00
										 |  |  |     if (x11_error): | 
					
						
							|  |  |  |         return False | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-30 18:57:40 +01:00
										 |  |  |     x11_error = os.system("pkg-config xcursor --modversion > /dev/null ") | 
					
						
							| 
									
										
										
										
											2016-10-30 18:44:57 +01:00
										 |  |  |     if (x11_error): | 
					
						
							|  |  |  |         print("xcursor not found.. x11 disabled.") | 
					
						
							|  |  |  |         return False | 
					
						
							| 
									
										
										
										
											2016-04-02 20:26:12 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-30 18:57:40 +01:00
										 |  |  |     x11_error = os.system("pkg-config xinerama --modversion > /dev/null ") | 
					
						
							| 
									
										
										
										
											2016-10-30 18:44:57 +01:00
										 |  |  |     if (x11_error): | 
					
						
							|  |  |  |         print("xinerama not found.. x11 disabled.") | 
					
						
							|  |  |  |         return False | 
					
						
							| 
									
										
										
										
											2014-04-28 21:56:43 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-30 18:57:40 +01:00
										 |  |  |     x11_error = os.system("pkg-config xrandr --modversion > /dev/null ") | 
					
						
							| 
									
										
										
										
											2016-10-30 18:44:57 +01:00
										 |  |  |     if (x11_error): | 
					
						
							|  |  |  |         print("xrandr not found.. x11 disabled.") | 
					
						
							|  |  |  |         return False | 
					
						
							| 
									
										
										
										
											2016-06-09 18:54:06 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-10 20:38:26 +02:00
										 |  |  |     x11_error = os.system("pkg-config xrender --modversion > /dev/null ") | 
					
						
							|  |  |  |     if (x11_error): | 
					
						
							|  |  |  |         print("xrender not found.. x11 disabled.") | 
					
						
							|  |  |  |         return False | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-17 18:59:26 -04:00
										 |  |  |     x11_error = os.system("pkg-config xi --modversion > /dev/null ") | 
					
						
							|  |  |  |     if (x11_error): | 
					
						
							|  |  |  |         print("xi not found.. Aborting.") | 
					
						
							|  |  |  |         return False | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-30 19:21:38 +02:00
										 |  |  |     return True | 
					
						
							| 
									
										
										
										
											2016-04-02 20:26:12 +02: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, EnumVariable | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-30 18:44:57 +01:00
										 |  |  |     return [ | 
					
						
							| 
									
										
										
										
											2017-09-25 00:37:17 -04:00
										 |  |  |         BoolVariable('use_llvm', 'Use the LLVM compiler', False), | 
					
						
							| 
									
										
										
										
											2019-03-18 14:37:25 +01:00
										 |  |  |         BoolVariable('use_lld', 'Use the LLD linker', False), | 
					
						
							| 
									
										
										
										
											2019-04-24 15:50:48 +02:00
										 |  |  |         BoolVariable('use_thinlto', 'Use ThinLTO', False), | 
					
						
							| 
									
										
										
										
											2018-02-16 18:24:46 +01:00
										 |  |  |         BoolVariable('use_static_cpp', 'Link libgcc and libstdc++ statically for better portability', False), | 
					
						
							| 
									
										
										
										
											2020-02-26 19:43:03 +01:00
										 |  |  |         BoolVariable('use_coverage', 'Test Godot coverage', False), | 
					
						
							| 
									
										
										
										
											2019-01-20 20:53:13 +01:00
										 |  |  |         BoolVariable('use_ubsan', 'Use LLVM/GCC compiler undefined behavior sanitizer (UBSAN)', False), | 
					
						
							|  |  |  |         BoolVariable('use_asan', 'Use LLVM/GCC compiler address sanitizer (ASAN))', False), | 
					
						
							|  |  |  |         BoolVariable('use_lsan', 'Use LLVM/GCC compiler leak sanitizer (LSAN))', False), | 
					
						
							| 
									
										
										
										
											2019-08-07 12:01:14 +02:00
										 |  |  |         BoolVariable('use_tsan', 'Use LLVM/GCC compiler thread sanitizer (TSAN))', False), | 
					
						
							| 
									
										
										
										
											2019-03-18 14:37:25 +01:00
										 |  |  |         BoolVariable('pulseaudio', 'Detect and use PulseAudio', True), | 
					
						
							| 
									
										
										
										
											2017-09-25 00:37:17 -04:00
										 |  |  |         BoolVariable('udev', 'Use udev for gamepad connection callbacks', False), | 
					
						
							| 
									
										
										
										
											2018-06-07 20:46:32 +02:00
										 |  |  |         EnumVariable('debug_symbols', 'Add debugging symbols to release builds', 'yes', ('yes', 'no', 'full')), | 
					
						
							|  |  |  |         BoolVariable('separate_debug_symbols', 'Create a separate file containing debugging symbols', False), | 
					
						
							| 
									
										
										
										
											2017-11-29 21:01:26 +01:00
										 |  |  |         BoolVariable('touch', 'Enable touch events', True), | 
					
						
							| 
									
										
										
										
											2018-07-22 19:03:36 +02:00
										 |  |  |         BoolVariable('execinfo', 'Use libexecinfo on systems where glibc is not available', False), | 
					
						
							| 
									
										
										
										
											2016-10-30 18:44:57 +01:00
										 |  |  |     ] | 
					
						
							| 
									
										
										
										
											2016-04-02 20:26:12 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-30 19:05:14 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | def get_flags(): | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-23 10:02:24 +02:00
										 |  |  |     return [] | 
					
						
							| 
									
										
										
										
											2016-04-02 20:26:12 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | def configure(env): | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-30 19:21:38 +02:00
										 |  |  |     ## Build type | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (env["target"] == "release"): | 
					
						
							| 
									
										
										
										
											2018-07-21 17:26:14 -03:00
										 |  |  |         if (env["optimize"] == "speed"): #optimize for speed (default) | 
					
						
							| 
									
										
										
										
											2019-01-09 01:09:56 +01:00
										 |  |  |             env.Prepend(CCFLAGS=['-O3']) | 
					
						
							| 
									
										
										
										
											2018-07-21 17:26:14 -03:00
										 |  |  |         else: #optimize for size | 
					
						
							|  |  |  |             env.Prepend(CCFLAGS=['-Os']) | 
					
						
							| 
									
										
										
										
											2018-09-25 11:15:25 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-13 19:32:24 +02:00
										 |  |  |         if (env["debug_symbols"] == "yes"): | 
					
						
							|  |  |  |             env.Prepend(CCFLAGS=['-g1']) | 
					
						
							|  |  |  |         if (env["debug_symbols"] == "full"): | 
					
						
							| 
									
										
										
										
											2017-06-30 19:21:38 +02:00
										 |  |  |             env.Prepend(CCFLAGS=['-g2']) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     elif (env["target"] == "release_debug"): | 
					
						
							| 
									
										
										
										
											2018-07-21 17:26:14 -03:00
										 |  |  |         if (env["optimize"] == "speed"): #optimize for speed (default) | 
					
						
							| 
									
										
										
										
											2019-04-24 16:49:12 +02:00
										 |  |  |             env.Prepend(CCFLAGS=['-O2']) | 
					
						
							| 
									
										
										
										
											2018-07-21 17:26:14 -03:00
										 |  |  |         else: #optimize for size | 
					
						
							| 
									
										
										
										
											2019-04-24 16:49:12 +02:00
										 |  |  |             env.Prepend(CCFLAGS=['-Os']) | 
					
						
							| 
									
										
										
										
											2019-07-03 09:16:20 +02:00
										 |  |  |         env.Prepend(CPPDEFINES=['DEBUG_ENABLED']) | 
					
						
							| 
									
										
										
										
											2018-07-21 17:26:14 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-13 19:32:24 +02:00
										 |  |  |         if (env["debug_symbols"] == "yes"): | 
					
						
							|  |  |  |             env.Prepend(CCFLAGS=['-g1']) | 
					
						
							|  |  |  |         if (env["debug_symbols"] == "full"): | 
					
						
							| 
									
										
										
										
											2017-06-30 19:21:38 +02:00
										 |  |  |             env.Prepend(CCFLAGS=['-g2']) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     elif (env["target"] == "debug"): | 
					
						
							| 
									
										
										
										
											2019-04-24 16:49:12 +02:00
										 |  |  |         env.Prepend(CCFLAGS=['-g3']) | 
					
						
							| 
									
										
										
										
											2019-07-03 09:16:20 +02:00
										 |  |  |         env.Prepend(CPPDEFINES=['DEBUG_ENABLED', 'DEBUG_MEMORY_ENABLED']) | 
					
						
							| 
									
										
										
										
											2017-09-07 22:01:49 -03:00
										 |  |  |         env.Append(LINKFLAGS=['-rdynamic']) | 
					
						
							| 
									
										
										
										
											2017-06-30 19:21:38 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     ## Architecture | 
					
						
							| 
									
										
										
										
											2014-10-07 01:31:49 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-30 19:21:38 +02:00
										 |  |  |     is64 = sys.maxsize > 2**32 | 
					
						
							| 
									
										
										
										
											2016-10-30 18:57:40 +01:00
										 |  |  |     if (env["bits"] == "default"): | 
					
						
							| 
									
										
										
										
											2017-06-30 19:21:38 +02:00
										 |  |  |         env["bits"] = "64" if is64 else "32" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ## Compiler configuration | 
					
						
							| 
									
										
										
										
											2014-10-07 01:31:49 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-25 11:15:25 +02:00
										 |  |  |     if 'CXX' in env and 'clang' in os.path.basename(env['CXX']): | 
					
						
							| 
									
										
										
										
											2017-10-27 19:18:22 +02:00
										 |  |  |         # Convenience check to enforce the use_llvm overrides when CXX is clang(++) | 
					
						
							|  |  |  |         env['use_llvm'] = True | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-25 00:37:17 -04:00
										 |  |  |     if env['use_llvm']: | 
					
						
							| 
									
										
										
										
											2018-09-25 11:15:25 +02:00
										 |  |  |         if ('clang++' not in os.path.basename(env['CXX'])): | 
					
						
							| 
									
										
										
										
											2016-10-30 18:57:40 +01:00
										 |  |  |             env["CC"] = "clang" | 
					
						
							|  |  |  |             env["CXX"] = "clang++" | 
					
						
							| 
									
										
										
										
											2018-01-05 20:37:18 +01:00
										 |  |  |             env["LINK"] = "clang++" | 
					
						
							| 
									
										
										
										
											2019-07-03 09:16:20 +02:00
										 |  |  |         env.Append(CPPDEFINES=['TYPED_METHOD_BIND']) | 
					
						
							| 
									
										
										
										
											2017-06-30 19:21:38 +02:00
										 |  |  |         env.extra_suffix = ".llvm" + env.extra_suffix | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-18 14:37:25 +01:00
										 |  |  |     if env['use_lld']: | 
					
						
							|  |  |  |         if env['use_llvm']: | 
					
						
							|  |  |  |             env.Append(LINKFLAGS=['-fuse-ld=lld']) | 
					
						
							| 
									
										
										
										
											2019-04-24 15:50:48 +02:00
										 |  |  |             if env['use_thinlto']: | 
					
						
							|  |  |  |                 # A convenience so you don't need to write use_lto too when using SCons | 
					
						
							|  |  |  |                 env['use_lto'] = True | 
					
						
							| 
									
										
										
										
											2019-03-18 14:37:25 +01:00
										 |  |  |         else: | 
					
						
							|  |  |  |             print("Using LLD with GCC is not supported yet, try compiling with 'use_llvm=yes'.") | 
					
						
							|  |  |  |             sys.exit(255) | 
					
						
							| 
									
										
										
										
											2019-01-20 20:53:13 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-26 19:43:03 +01:00
										 |  |  |     if env['use_coverage']: | 
					
						
							|  |  |  |         env.Append(CCFLAGS=['-ftest-coverage', '-fprofile-arcs']) | 
					
						
							|  |  |  |         env.Append(LINKFLAGS=['-ftest-coverage', '-fprofile-arcs']) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-07 12:01:14 +02:00
										 |  |  |     if env['use_ubsan'] or env['use_asan'] or env['use_lsan'] or env['use_tsan']: | 
					
						
							| 
									
										
										
										
											2016-10-30 18:57:40 +01:00
										 |  |  |         env.extra_suffix += "s" | 
					
						
							| 
									
										
										
										
											2019-01-20 20:53:13 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |         if env['use_ubsan']: | 
					
						
							|  |  |  |             env.Append(CCFLAGS=['-fsanitize=undefined']) | 
					
						
							|  |  |  |             env.Append(LINKFLAGS=['-fsanitize=undefined']) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if env['use_asan']: | 
					
						
							|  |  |  |             env.Append(CCFLAGS=['-fsanitize=address']) | 
					
						
							|  |  |  |             env.Append(LINKFLAGS=['-fsanitize=address']) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if env['use_lsan']: | 
					
						
							| 
									
										
										
										
											2017-06-30 19:21:38 +02:00
										 |  |  |             env.Append(CCFLAGS=['-fsanitize=leak']) | 
					
						
							|  |  |  |             env.Append(LINKFLAGS=['-fsanitize=leak']) | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-07 12:01:14 +02:00
										 |  |  |         if env['use_tsan']: | 
					
						
							|  |  |  |             env.Append(CCFLAGS=['-fsanitize=thread']) | 
					
						
							|  |  |  |             env.Append(LINKFLAGS=['-fsanitize=thread']) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-25 00:37:17 -04:00
										 |  |  |     if env['use_lto']: | 
					
						
							| 
									
										
										
										
											2017-09-26 14:22:49 +02:00
										 |  |  |         if not env['use_llvm'] and env.GetOption("num_jobs") > 1: | 
					
						
							| 
									
										
										
										
											2019-04-24 15:50:48 +02:00
										 |  |  |             env.Append(CCFLAGS=['-flto']) | 
					
						
							| 
									
										
										
										
											2017-09-26 14:22:49 +02:00
										 |  |  |             env.Append(LINKFLAGS=['-flto=' + str(env.GetOption("num_jobs"))]) | 
					
						
							|  |  |  |         else: | 
					
						
							| 
									
										
										
										
											2019-04-24 15:50:48 +02:00
										 |  |  |             if env['use_lld'] and env['use_thinlto']: | 
					
						
							|  |  |  |                 env.Append(CCFLAGS=['-flto=thin']) | 
					
						
							|  |  |  |                 env.Append(LINKFLAGS=['-flto=thin']) | 
					
						
							|  |  |  |             else: | 
					
						
							|  |  |  |                 env.Append(CCFLAGS=['-flto']) | 
					
						
							|  |  |  |                 env.Append(LINKFLAGS=['-flto']) | 
					
						
							| 
									
										
										
										
											2020-01-16 17:47:37 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-25 00:37:17 -04:00
										 |  |  |         if not env['use_llvm']: | 
					
						
							| 
									
										
										
										
											2017-09-23 22:55:26 +02:00
										 |  |  |             env['RANLIB'] = 'gcc-ranlib' | 
					
						
							|  |  |  |             env['AR'] = 'gcc-ar' | 
					
						
							| 
									
										
										
										
											2017-01-25 12:40:54 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  |     env.Append(CCFLAGS=['-pipe']) | 
					
						
							|  |  |  |     env.Append(LINKFLAGS=['-pipe']) | 
					
						
							| 
									
										
										
										
											2015-05-22 22:14:16 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-26 13:23:37 +01:00
										 |  |  |     # -fpie and -no-pie is supported on GCC 6+ and Clang 4+, both below our | 
					
						
							|  |  |  |     # minimal requirements. | 
					
						
							|  |  |  |     env.Append(CCFLAGS=['-fpie']) | 
					
						
							|  |  |  |     env.Append(LINKFLAGS=['-no-pie']) | 
					
						
							| 
									
										
										
										
											2018-11-05 21:34:36 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-30 19:21:38 +02:00
										 |  |  |     ## Dependencies | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-30 18:44:57 +01:00
										 |  |  |     env.ParseConfig('pkg-config x11 --cflags --libs') | 
					
						
							|  |  |  |     env.ParseConfig('pkg-config xcursor --cflags --libs') | 
					
						
							| 
									
										
										
										
											2017-06-30 19:21:38 +02:00
										 |  |  |     env.ParseConfig('pkg-config xinerama --cflags --libs') | 
					
						
							| 
									
										
										
										
											2016-10-30 18:44:57 +01:00
										 |  |  |     env.ParseConfig('pkg-config xrandr --cflags --libs') | 
					
						
							| 
									
										
										
										
											2017-12-10 20:38:26 +02:00
										 |  |  |     env.ParseConfig('pkg-config xrender --cflags --libs') | 
					
						
							| 
									
										
										
										
											2018-08-17 18:59:26 -04:00
										 |  |  |     env.ParseConfig('pkg-config xi --cflags --libs') | 
					
						
							| 
									
										
										
										
											2015-08-23 20:54:13 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-29 21:01:26 +01:00
										 |  |  |     if (env['touch']): | 
					
						
							| 
									
										
										
										
											2019-07-03 09:16:20 +02:00
										 |  |  |         env.Append(CPPDEFINES=['TOUCH_ENABLED']) | 
					
						
							| 
									
										
										
										
											2017-11-29 21:01:26 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-30 19:21:38 +02:00
										 |  |  |     # FIXME: Check for existence of the libs before parsing their flags with pkg-config | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-08 17:13:30 +01:00
										 |  |  |     # freetype depends on libpng and zlib, so bundling one of them while keeping others | 
					
						
							|  |  |  |     # as shared libraries leads to weird issues | 
					
						
							| 
									
										
										
										
											2017-09-25 00:22:58 -04:00
										 |  |  |     if env['builtin_freetype'] or env['builtin_libpng'] or env['builtin_zlib']: | 
					
						
							|  |  |  |         env['builtin_freetype'] = True | 
					
						
							|  |  |  |         env['builtin_libpng'] = True | 
					
						
							|  |  |  |         env['builtin_zlib'] = True | 
					
						
							| 
									
										
										
										
											2017-01-08 17:13:30 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-25 00:22:58 -04:00
										 |  |  |     if not env['builtin_freetype']: | 
					
						
							| 
									
										
										
										
											2016-10-30 18:44:57 +01:00
										 |  |  |         env.ParseConfig('pkg-config freetype2 --cflags --libs') | 
					
						
							| 
									
										
										
										
											2015-09-10 21:40:34 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-25 00:22:58 -04:00
										 |  |  |     if not env['builtin_libpng']: | 
					
						
							| 
									
										
										
										
											2019-06-16 20:08:52 +01:00
										 |  |  |         env.ParseConfig('pkg-config libpng16 --cflags --libs') | 
					
						
							| 
									
										
										
										
											2016-10-14 21:57:43 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-13 15:16:11 +01:00
										 |  |  |     if not env['builtin_bullet']: | 
					
						
							| 
									
										
										
										
											2019-06-11 13:18:05 +02:00
										 |  |  |         # We need at least version 2.89 | 
					
						
							| 
									
										
										
										
											2018-01-13 15:16:11 +01:00
										 |  |  |         import subprocess | 
					
						
							|  |  |  |         bullet_version = subprocess.check_output(['pkg-config', 'bullet', '--modversion']).strip() | 
					
						
							| 
									
										
										
										
											2019-06-11 13:18:05 +02:00
										 |  |  |         if str(bullet_version) < "2.89": | 
					
						
							| 
									
										
										
										
											2018-01-13 15:16:11 +01:00
										 |  |  |             # Abort as system bullet was requested but too old | 
					
						
							| 
									
										
										
										
											2019-06-11 13:18:05 +02:00
										 |  |  |             print("Bullet: System version {0} does not match minimal requirements ({1}). Aborting.".format(bullet_version, "2.89")) | 
					
						
							| 
									
										
										
										
											2018-01-13 15:16:11 +01:00
										 |  |  |             sys.exit(255) | 
					
						
							|  |  |  |         env.ParseConfig('pkg-config bullet --cflags --libs') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-25 00:22:58 -04:00
										 |  |  |     if not env['builtin_enet']: | 
					
						
							| 
									
										
										
										
											2016-10-30 18:44:57 +01:00
										 |  |  |         env.ParseConfig('pkg-config libenet --cflags --libs') | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-01-13 15:58:49 +01:00
										 |  |  |     if not env['builtin_squish']: | 
					
						
							| 
									
										
										
										
											2016-10-30 18:44:57 +01:00
										 |  |  |         env.ParseConfig('pkg-config libsquish --cflags --libs') | 
					
						
							| 
									
										
										
										
											2016-10-13 21:48:06 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-25 00:22:58 -04:00
										 |  |  |     if not env['builtin_zstd']: | 
					
						
							| 
									
										
										
										
											2017-09-23 23:46:47 -04:00
										 |  |  |         env.ParseConfig('pkg-config libzstd --cflags --libs') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-30 18:44:57 +01:00
										 |  |  |     # Sound and video libraries | 
					
						
							|  |  |  |     # Keep the order as it triggers chained dependencies (ogg needed by others, etc.) | 
					
						
							| 
									
										
										
										
											2016-10-13 19:40:40 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-25 00:22:58 -04:00
										 |  |  |     if not env['builtin_libtheora']: | 
					
						
							|  |  |  |         env['builtin_libogg'] = False  # Needed to link against system libtheora | 
					
						
							|  |  |  |         env['builtin_libvorbis'] = False  # Needed to link against system libtheora | 
					
						
							| 
									
										
										
										
											2016-10-30 18:44:57 +01:00
										 |  |  |         env.ParseConfig('pkg-config theora theoradec --cflags --libs') | 
					
						
							| 
									
										
										
										
											2018-06-07 10:41:11 +02:00
										 |  |  |     else: | 
					
						
							|  |  |  |         list_of_x86 = ['x86_64', 'x86', 'i386', 'i586'] | 
					
						
							|  |  |  |         if any(platform.machine() in s for s in list_of_x86): | 
					
						
							|  |  |  |             env["x86_libtheora_opt_gcc"] = True | 
					
						
							| 
									
										
										
										
											2016-10-12 20:37:38 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-25 00:22:58 -04:00
										 |  |  |     if not env['builtin_libvpx']: | 
					
						
							| 
									
										
										
										
											2016-10-30 18:44:57 +01:00
										 |  |  |         env.ParseConfig('pkg-config vpx --cflags --libs') | 
					
						
							| 
									
										
										
										
											2016-10-17 17:14:07 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-25 00:22:58 -04:00
										 |  |  |     if not env['builtin_libvorbis']: | 
					
						
							|  |  |  |         env['builtin_libogg'] = False  # Needed to link against system libvorbis | 
					
						
							| 
									
										
										
										
											2016-10-30 18:44:57 +01:00
										 |  |  |         env.ParseConfig('pkg-config vorbis vorbisfile --cflags --libs') | 
					
						
							| 
									
										
										
										
											2016-10-12 20:37:38 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-25 00:22:58 -04:00
										 |  |  |     if not env['builtin_opus']: | 
					
						
							|  |  |  |         env['builtin_libogg'] = False  # Needed to link against system opus | 
					
						
							| 
									
										
										
										
											2016-10-30 18:44:57 +01:00
										 |  |  |         env.ParseConfig('pkg-config opus opusfile --cflags --libs') | 
					
						
							| 
									
										
										
										
											2016-10-13 19:40:40 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-25 00:22:58 -04:00
										 |  |  |     if not env['builtin_libogg']: | 
					
						
							| 
									
										
										
										
											2016-10-30 18:44:57 +01:00
										 |  |  |         env.ParseConfig('pkg-config ogg --cflags --libs') | 
					
						
							| 
									
										
										
										
											2016-10-12 20:37:38 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-07 10:41:11 +02:00
										 |  |  |     if not env['builtin_libwebp']: | 
					
						
							|  |  |  |         env.ParseConfig('pkg-config libwebp --cflags --libs') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if not env['builtin_mbedtls']: | 
					
						
							|  |  |  |         # mbedTLS does not provide a pkgconfig config yet. See https://github.com/ARMmbed/mbedtls/issues/228 | 
					
						
							|  |  |  |         env.Append(LIBS=['mbedtls', 'mbedcrypto', 'mbedx509']) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-01 18:14:26 +02:00
										 |  |  |     if not env['builtin_wslay']: | 
					
						
							|  |  |  |         env.ParseConfig('pkg-config libwslay --cflags --libs') | 
					
						
							| 
									
										
										
										
											2018-06-07 10:41:11 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     if not env['builtin_miniupnpc']: | 
					
						
							|  |  |  |         # No pkgconfig file so far, hardcode default paths. | 
					
						
							| 
									
										
										
										
											2019-04-30 13:12:02 +02:00
										 |  |  |         env.Prepend(CPPPATH=["/usr/include/miniupnpc"]) | 
					
						
							| 
									
										
										
										
											2018-06-07 10:41:11 +02:00
										 |  |  |         env.Append(LIBS=["miniupnpc"]) | 
					
						
							| 
									
										
										
										
											2017-06-30 19:21:38 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-07 23:13:15 +08:00
										 |  |  |     # On Linux wchar_t should be 32-bits | 
					
						
							|  |  |  |     # 16-bit library shouldn't be required due to compiler optimisations | 
					
						
							| 
									
										
										
										
											2017-09-25 00:22:58 -04:00
										 |  |  |     if not env['builtin_pcre2']: | 
					
						
							| 
									
										
										
										
											2017-08-07 23:13:15 +08:00
										 |  |  |         env.ParseConfig('pkg-config libpcre2-32 --cflags --libs') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-30 19:21:38 +02:00
										 |  |  |     ## Flags | 
					
						
							| 
									
										
										
										
											2016-01-10 17:24:23 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-30 19:21:38 +02:00
										 |  |  |     if (os.system("pkg-config --exists alsa") == 0): # 0 means found | 
					
						
							| 
									
										
										
										
											2016-10-30 18:44:57 +01:00
										 |  |  |         print("Enabling ALSA") | 
					
						
							| 
									
										
										
										
											2019-07-03 09:16:20 +02:00
										 |  |  |         env.Append(CPPDEFINES=["ALSA_ENABLED", "ALSAMIDI_ENABLED"]) | 
					
						
							| 
									
										
										
										
											2018-10-01 10:59:03 +02:00
										 |  |  | 	# Don't parse --cflags, we don't need to add /usr/include/alsa to include path | 
					
						
							|  |  |  |         env.ParseConfig('pkg-config alsa --libs') | 
					
						
							| 
									
										
										
										
											2016-10-30 18:44:57 +01:00
										 |  |  |     else: | 
					
						
							|  |  |  |         print("ALSA libraries not found, disabling driver") | 
					
						
							| 
									
										
										
										
											2015-12-21 22:39:03 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-25 00:37:17 -04:00
										 |  |  |     if env['pulseaudio']: | 
					
						
							| 
									
										
										
										
											2018-03-25 00:43:51 -03:00
										 |  |  |         if (os.system("pkg-config --exists libpulse") == 0): # 0 means found | 
					
						
							| 
									
										
										
										
											2016-10-30 18:44:57 +01:00
										 |  |  |             print("Enabling PulseAudio") | 
					
						
							| 
									
										
										
										
											2019-07-03 09:16:20 +02:00
										 |  |  |             env.Append(CPPDEFINES=["PULSEAUDIO_ENABLED"]) | 
					
						
							| 
									
										
										
										
											2018-03-25 00:43:51 -03:00
										 |  |  |             env.ParseConfig('pkg-config --cflags --libs libpulse') | 
					
						
							| 
									
										
										
										
											2016-10-30 18:44:57 +01:00
										 |  |  |         else: | 
					
						
							|  |  |  |             print("PulseAudio development libraries not found, disabling driver") | 
					
						
							| 
									
										
										
										
											2014-12-19 13:44:34 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-30 19:21:38 +02:00
										 |  |  |     if (platform.system() == "Linux"): | 
					
						
							| 
									
										
										
										
											2019-07-03 09:16:20 +02:00
										 |  |  |         env.Append(CPPDEFINES=["JOYDEV_ENABLED"]) | 
					
						
							| 
									
										
										
										
											2017-06-30 19:21:38 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-25 00:37:17 -04:00
										 |  |  |         if env['udev']: | 
					
						
							| 
									
										
										
										
											2017-06-30 19:21:38 +02:00
										 |  |  |             if (os.system("pkg-config --exists libudev") == 0): # 0 means found | 
					
						
							|  |  |  |                 print("Enabling udev support") | 
					
						
							| 
									
										
										
										
											2019-07-03 09:16:20 +02:00
										 |  |  |                 env.Append(CPPDEFINES=["UDEV_ENABLED"]) | 
					
						
							| 
									
										
										
										
											2017-06-30 19:21:38 +02:00
										 |  |  |                 env.ParseConfig('pkg-config libudev --cflags --libs') | 
					
						
							|  |  |  |             else: | 
					
						
							|  |  |  |                 print("libudev development libraries not found, disabling udev support") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # Linkflags below this line should typically stay the last ones | 
					
						
							| 
									
										
										
										
											2017-09-25 00:22:58 -04:00
										 |  |  |     if not env['builtin_zlib']: | 
					
						
							| 
									
										
										
										
											2017-01-08 17:13:30 +01:00
										 |  |  |         env.ParseConfig('pkg-config zlib --cflags --libs') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-30 13:12:02 +02:00
										 |  |  |     env.Prepend(CPPPATH=['#platform/x11']) | 
					
						
							| 
									
										
										
										
											2019-06-07 13:07:57 -03:00
										 |  |  |     env.Append(CPPDEFINES=['X11_ENABLED', 'UNIX_ENABLED']) | 
					
						
							| 
									
										
										
										
											2019-06-22 19:34:26 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-12 16:18:30 +03:00
										 |  |  |     env.Append(CPPDEFINES=['VULKAN_ENABLED']) | 
					
						
							| 
									
										
										
										
											2019-08-05 11:48:54 +02:00
										 |  |  |     if not env['builtin_vulkan']: | 
					
						
							|  |  |  |         env.ParseConfig('pkg-config vulkan --cflags --libs') | 
					
						
							| 
									
										
										
										
											2019-09-27 09:39:53 +02:00
										 |  |  |     if not env['builtin_glslang']: | 
					
						
							|  |  |  |         # No pkgconfig file for glslang so far | 
					
						
							|  |  |  |         env.Append(LIBS=['glslang', 'SPIRV']) | 
					
						
							| 
									
										
										
										
											2019-07-12 16:18:30 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |     #env.Append(CPPDEFINES=['OPENGL_ENABLED']) | 
					
						
							|  |  |  |     env.Append(LIBS=['GL']) | 
					
						
							| 
									
										
										
										
											2019-06-22 19:34:26 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |     env.Append(LIBS=['pthread']) | 
					
						
							| 
									
										
										
										
											2017-01-08 17:13:30 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-30 18:44:57 +01:00
										 |  |  |     if (platform.system() == "Linux"): | 
					
						
							| 
									
										
										
										
											2017-01-08 17:13:30 +01:00
										 |  |  |         env.Append(LIBS=['dl']) | 
					
						
							| 
									
										
										
										
											2014-10-07 01:31:49 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-17 16:50:41 +00:00
										 |  |  |     if (platform.system().find("BSD") >= 0): | 
					
						
							| 
									
										
										
										
											2018-07-22 19:03:36 +02:00
										 |  |  |         env["execinfo"] = True | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if env["execinfo"]: | 
					
						
							| 
									
										
										
										
											2017-10-17 16:50:41 +00:00
										 |  |  |         env.Append(LIBS=['execinfo']) | 
					
						
							| 
									
										
										
										
											2020-01-16 17:47:37 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-25 20:56:33 +01:00
										 |  |  |     if not env['tools']: | 
					
						
							| 
									
										
										
										
											2020-01-16 17:47:37 +01:00
										 |  |  |         import subprocess | 
					
						
							|  |  |  |         import re | 
					
						
							| 
									
										
										
										
											2020-01-22 19:42:10 +01:00
										 |  |  |         linker_version_str = subprocess.check_output([env.subst(env["LINK"]), '-Wl,--version']).decode("utf-8") | 
					
						
							|  |  |  |         gnu_ld_version = re.search('^GNU ld [^$]*(\d+\.\d+)$', linker_version_str, re.MULTILINE) | 
					
						
							|  |  |  |         if not gnu_ld_version: | 
					
						
							|  |  |  |             print("Warning: Creating template binaries enabled for PCK embedding is currently only supported with GNU ld") | 
					
						
							| 
									
										
										
										
											2020-01-16 17:47:37 +01:00
										 |  |  |         else: | 
					
						
							| 
									
										
										
										
											2020-01-22 19:42:10 +01:00
										 |  |  |             if float(gnu_ld_version.group(1)) >= 2.30: | 
					
						
							|  |  |  |                 env.Append(LINKFLAGS=['-T', 'platform/x11/pck_embed.ld']) | 
					
						
							|  |  |  |             else: | 
					
						
							|  |  |  |                 env.Append(LINKFLAGS=['-T', 'platform/x11/pck_embed.legacy.ld']) | 
					
						
							| 
									
										
										
										
											2017-10-17 16:50:41 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-30 19:21:38 +02:00
										 |  |  |     ## Cross-compilation | 
					
						
							| 
									
										
										
										
											2014-10-07 01:31:49 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-30 18:57:40 +01:00
										 |  |  |     if (is64 and env["bits"] == "32"): | 
					
						
							| 
									
										
										
										
											2019-04-24 16:49:12 +02:00
										 |  |  |         env.Append(CCFLAGS=['-m32']) | 
					
						
							| 
									
										
										
										
											2016-10-30 18:57:40 +01:00
										 |  |  |         env.Append(LINKFLAGS=['-m32', '-L/usr/lib/i386-linux-gnu']) | 
					
						
							|  |  |  |     elif (not is64 and env["bits"] == "64"): | 
					
						
							| 
									
										
										
										
											2019-04-24 16:49:12 +02:00
										 |  |  |         env.Append(CCFLAGS=['-m64']) | 
					
						
							| 
									
										
										
										
											2016-10-30 18:57:40 +01:00
										 |  |  |         env.Append(LINKFLAGS=['-m64', '-L/usr/lib/i686-linux-gnu']) | 
					
						
							| 
									
										
										
										
											2014-02-26 14:25:42 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-16 18:24:46 +01:00
										 |  |  |     # Link those statically for portability | 
					
						
							| 
									
										
										
										
											2017-09-25 00:37:17 -04:00
										 |  |  |     if env['use_static_cpp']: | 
					
						
							| 
									
										
										
										
											2018-02-16 18:24:46 +01:00
										 |  |  |         env.Append(LINKFLAGS=['-static-libgcc', '-static-libstdc++']) |