2017-06-30 19:21:38 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  methods  
						 
					
						
							
								
									
										
										
										
											2015-10-01 16:25:36 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  os  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-17 18:17:41 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# To match other platforms  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								STACK_SIZE  =  8388608  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-10-30 19:05:14 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-10-01 16:25:36 -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 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-10-01 16:25:36 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								def  get_name ( ) :  
						 
					
						
							
								
									
										
										
										
											2016-10-30 18:44:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  " Windows " 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-01 16:25:36 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-10-30 19:05:14 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-10-01 16:25:36 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								def  can_build ( ) :  
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  os . name  ==  " nt " : 
							 
						 
					
						
							
								
									
										
										
										
											2017-08-18 21:45:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        # Building natively on Windows 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-02 14:51:29 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        # If VCINSTALLDIR is set in the OS environ, use traditional Godot logic to set up MSVC 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  os . getenv ( " VCINSTALLDIR " ) :   # MSVC, manual setup 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-30 18:44:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            return  True 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-03-02 14:51:29 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        # Otherwise, let SCons find MSVC if installed, or else Mingw. 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        # Since we're just returning True here, if there's no compiler 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        # installed, we'll get errors when it tries to build with the 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        # null compiler. 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  True 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-30 18:44:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  os . name  ==  " posix " : 
							 
						 
					
						
							
								
									
										
										
										
											2017-08-18 21:45:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        # Cross-compiling with MinGW-w64 (old MinGW32 is not supported) 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-30 18:44:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        mingw32  =  " i686-w64-mingw32- " 
							 
						 
					
						
							
								
									
										
										
										
											2017-08-18 21:45:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        mingw64  =  " x86_64-w64-mingw32- " 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-30 18:44:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  os . getenv ( " MINGW32_PREFIX " ) : 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-30 18:57:40 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            mingw32  =  os . getenv ( " MINGW32_PREFIX " ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  os . getenv ( " MINGW64_PREFIX " ) : 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-30 18:57:40 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            mingw64  =  os . getenv ( " MINGW64_PREFIX " ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-30 18:44:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-07-25 20:44:16 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        test  =  " gcc --version > /dev/null 2>&1 " 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  os . system ( mingw64  +  test )  ==  0  or  os . system ( mingw32  +  test )  ==  0 : 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-30 18:44:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            return  True 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  False 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-02 20:26:12 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-10-30 19:05:14 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-10-01 16:25:36 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								def  get_opts ( ) :  
						 
					
						
							
								
									
										
										
										
											2017-09-25 00:37:17 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    from  SCons . Variables  import  BoolVariable ,  EnumVariable 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-01 16:25:36 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-10-30 18:57:40 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    mingw32  =  " " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    mingw64  =  " " 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  os . name  ==  " posix " : 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-30 18:44:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        mingw32  =  " i686-w64-mingw32- " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        mingw64  =  " x86_64-w64-mingw32- " 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-02 20:26:12 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  os . getenv ( " MINGW32_PREFIX " ) : 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-30 18:57:40 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        mingw32  =  os . getenv ( " MINGW32_PREFIX " ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  os . getenv ( " MINGW64_PREFIX " ) : 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-30 18:57:40 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        mingw64  =  os . getenv ( " MINGW64_PREFIX " ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-01 16:25:36 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-10-30 18:44:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  [ 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        ( " mingw_prefix_32 " ,  " MinGW prefix (Win32) " ,  mingw32 ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ( " mingw_prefix_64 " ,  " MinGW prefix (Win64) " ,  mingw64 ) , 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-01 21:15:56 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        # Targeted Windows version: 7 (and later), minimum supported version 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        # XP support dropped after EOL due to missing API for IPv6 and other issues 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        # Vista support dropped after EOL due to GH-10243 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        ( " target_win_version " ,  " Targeted Windows version, >= 0x0601 (Windows 7) " ,  " 0x0601 " ) , 
							 
						 
					
						
							
								
									
										
										
										
											2021-02-03 10:47:06 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        BoolVariable ( " debug_symbols " ,  " Add debugging symbols to release/release_debug builds " ,  True ) , 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-29 21:42:03 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        EnumVariable ( " windows_subsystem " ,  " Windows subsystem " ,  " gui " ,  ( " gui " ,  " console " ) ) , 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        BoolVariable ( " separate_debug_symbols " ,  " Create a separate file containing debugging symbols " ,  False ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ( " msvc_version " ,  " MSVC version to use. Ignored if VCINSTALLDIR is set in shell env. " ,  None ) , 
							 
						 
					
						
							
								
									
										
										
										
											2020-12-16 16:29:32 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        BoolVariable ( " use_mingw " ,  " Use the Mingw compiler, even if MSVC is installed. " ,  False ) , 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        BoolVariable ( " use_llvm " ,  " Use the LLVM compiler " ,  False ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        BoolVariable ( " use_thinlto " ,  " Use ThinLTO " ,  False ) , 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-26 23:19:23 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        BoolVariable ( " use_static_cpp " ,  " Link MinGW/MSVC C++ runtime libraries statically " ,  True ) , 
							 
						 
					
						
							
								
									
										
										
										
											2021-03-12 18:44:06 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        BoolVariable ( " use_asan " ,  " Use address sanitizer (ASAN) " ,  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 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-10-01 16:25:36 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								def  get_flags ( ) :  
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  [ ] 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-02 20:26:12 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-10-30 19:05:14 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-10-30 18:57:40 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								def  build_res_file ( target ,  source ,  env ) :  
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  env [ " bits " ]  ==  " 32 " : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        cmdbase  =  env [ " mingw_prefix_32 " ] 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-30 18:44:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    else : 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        cmdbase  =  env [ " mingw_prefix_64 " ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    cmdbase  =  cmdbase  +  " windres --include-dir .  " 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-30 18:44:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    import  subprocess 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-10-30 18:44:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    for  x  in  range ( len ( source ) ) : 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        cmd  =  cmdbase  +  " -i  "  +  str ( source [ x ] )  +  "  -o  "  +  str ( target [ x ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-30 18:44:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        try : 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-30 18:57:40 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            out  =  subprocess . Popen ( cmd ,  shell = True ,  stderr = subprocess . PIPE ) . communicate ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-30 18:44:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  len ( out [ 1 ] ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                return  1 
							 
						 
					
						
							
								
									
										
										
										
											2020-12-12 10:10:23 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        except  Exception : 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-30 18:44:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            return  1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  0 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-01 16:25:36 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-10-30 19:05:14 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-03-02 14:51:29 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								def  setup_msvc_manual ( env ) :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    """ Set up env to use MSVC manually, using VCINSTALLDIR """ 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  env [ " bits " ]  !=  " default " : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        print ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            """ 
 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-02 14:51:29 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            Bits  argument  is  not  supported  for  MSVC  compilation .  Architecture  depends  on  the  Native / Cross  Compile  Tools  Prompt / Developer  Console 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ( or  Visual  Studio  settings )  that  is  being  used  to  run  SCons .  As  a  consequence ,  bits  argument  is  disabled .  Run  scons  again  without  bits 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            argument  ( example :  scons  p = windows )  and  SCons  will  attempt  to  detect  what  MSVC  compiler  will  be  executed  and  inform  you . 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            """ 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ) 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-02 14:51:29 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        raise  SCons . Errors . UserError ( " Bits argument should not be used when using VCINSTALLDIR " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Force bits arg 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # (Actually msys2 mingw can support 64-bit, we could detect that) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    env [ " bits " ]  =  " 32 " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    env [ " x86_libtheora_opt_vc " ]  =  True 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # find compiler manually 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    compiler_version_str  =  methods . detect_visual_c_compiler_version ( env [ " ENV " ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-02 14:51:29 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    print ( " Found MSVC compiler:  "  +  compiler_version_str ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # If building for 64bit architecture, disable assembly optimisations for 32 bit builds (theora as of writing)... vc compiler for 64bit can not compile _asm 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  compiler_version_str  ==  " amd64 "  or  compiler_version_str  ==  " x86_amd64 " : 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-02 14:51:29 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        env [ " bits " ]  =  " 64 " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        env [ " x86_libtheora_opt_vc " ]  =  False 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        print ( " Compiled program architecture will be a 64 bit executable (forcing bits=64). " ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    elif  compiler_version_str  ==  " x86 "  or  compiler_version_str  ==  " amd64_x86 " : 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-02 14:51:29 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        print ( " Compiled program architecture will be a 32 bit executable. (forcing bits=32). " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else : 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        print ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            " Failed to manually detect MSVC compiler architecture version... Defaulting to 32bit executable settings (forcing bits=32). Compilation attempt will continue, but SCons can not detect for what architecture this build is compiled for. You should check your settings/compilation setup, or avoid setting VCINSTALLDIR. " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-03-02 14:51:29 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								def  setup_msvc_auto ( env ) :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    """ Set up MSVC using SCons ' s auto-detection logic """ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # If MSVC_VERSION is set by SCons, we know MSVC is installed. 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # But we may want a different version or target arch. 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # The env may have already been set up with default MSVC tools, so 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # reset a few things so we can set it up with the tools we want. 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # (Ideally we'd decide on the tool config before configuring any 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # environment, and just set the env up once, but this function runs 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # on an existing env so this is the simplest way.) 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    env [ " MSVC_SETUP_RUN " ]  =  False   # Need to set this to re-run the tool 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    env [ " MSVS_VERSION " ]  =  None 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    env [ " MSVC_VERSION " ]  =  None 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    env [ " TARGET_ARCH " ]  =  None 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  env [ " bits " ]  !=  " default " : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        env [ " TARGET_ARCH " ]  =  { " 32 " :  " x86 " ,  " 64 " :  " x86_64 " } [ env [ " bits " ] ] 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-01 10:08:20 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  " msvc_version "  in  env : 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        env [ " MSVC_VERSION " ]  =  env [ " msvc_version " ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    env . Tool ( " msvc " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    env . Tool ( " mssdk " )   # we want the MS SDK 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-02 14:51:29 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    # Note: actual compiler version can be found in env['MSVC_VERSION'], e.g. "14.1" for VS2015 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Get actual target arch into bits (it may be "default" at this point): 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  env [ " TARGET_ARCH " ]  in  ( " amd64 " ,  " x86_64 " ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        env [ " bits " ]  =  " 64 " 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-02 14:51:29 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    else : 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        env [ " bits " ]  =  " 32 " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    print ( " Found MSVC version  %s , arch  %s , bits= %s "  %  ( env [ " MSVC_VERSION " ] ,  env [ " TARGET_ARCH " ] ,  env [ " bits " ] ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  env [ " TARGET_ARCH " ]  in  ( " amd64 " ,  " x86_64 " ) : 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-02 14:51:29 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        env [ " x86_libtheora_opt_vc " ]  =  False 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-03-02 14:51:29 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								def  setup_mingw ( env ) :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    """ Set up env for use with mingw """ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Nothing to do here 
							 
						 
					
						
							
								
									
										
										
										
											2019-12-09 19:22:08 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    print ( " Using MinGW " ) 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-02 14:51:29 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-03-02 14:51:29 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								def  configure_msvc ( env ,  manual_msvc_config ) :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    """ Configure env to work with MSVC """ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Build type 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  env [ " target " ]  ==  " release " : 
							 
						 
					
						
							
								
									
										
										
										
											2021-02-08 08:52:21 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  env [ " optimize " ]  ==  " speed " :   # optimize for speed (default) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            env . Append ( CCFLAGS = [ " /O2 " ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2021-03-13 15:29:55 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            env . Append ( LINKFLAGS = [ " /OPT:REF " ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        elif  env [ " optimize " ]  ==  " size " :   # optimize for size 
							 
						 
					
						
							
								
									
										
										
										
											2021-02-08 08:52:21 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            env . Append ( CCFLAGS = [ " /O1 " ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2021-03-13 15:29:55 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            env . Append ( LINKFLAGS = [ " /OPT:REF " ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    elif  env [ " target " ]  ==  " release_debug " : 
							 
						 
					
						
							
								
									
										
										
										
											2021-02-08 08:52:21 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  env [ " optimize " ]  ==  " speed " :   # optimize for speed (default) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            env . Append ( CCFLAGS = [ " /O2 " ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2021-03-13 15:29:55 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            env . Append ( LINKFLAGS = [ " /OPT:REF " ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        elif  env [ " optimize " ]  ==  " size " :   # optimize for size 
							 
						 
					
						
							
								
									
										
										
										
											2021-02-08 08:52:21 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            env . Append ( CCFLAGS = [ " /O1 " ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2021-03-13 15:29:55 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            env . Append ( LINKFLAGS = [ " /OPT:REF " ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    elif  env [ " target " ]  ==  " debug " : 
							 
						 
					
						
							
								
									
										
										
										
											2021-02-09 00:20:42 +11:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        env . AppendUnique ( CCFLAGS = [ " /Zi " ,  " /FS " ,  " /Od " ,  " /EHsc " ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-18 10:38:28 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        # Allow big objects. Only needed for debug, see MinGW branch for rationale. 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        env . AppendUnique ( CCFLAGS = [ " /bigobj " ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        env . Append ( LINKFLAGS = [ " /DEBUG " ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-01-29 21:42:03 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  env [ " windows_subsystem " ]  ==  " gui " : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        env . Append ( LINKFLAGS = [ " /SUBSYSTEM:WINDOWS " ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        env . Append ( LINKFLAGS = [ " /SUBSYSTEM:CONSOLE " ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        env . AppendUnique ( CPPDEFINES = [ " WINDOWS_SUBSYSTEM_CONSOLE " ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-12-16 13:08:09 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    env . Append ( LINKFLAGS = [ " /ENTRY:mainCRTStartup " ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-02-08 08:52:21 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  env [ " debug_symbols " ] : 
							 
						 
					
						
							
								
									
										
										
										
											2021-02-09 00:20:42 +11:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        env . AppendUnique ( CCFLAGS = [ " /Zi " ,  " /FS " ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        env . AppendUnique ( LINKFLAGS = [ " /DEBUG " ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2018-08-19 01:37:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-03-02 14:51:29 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ## Compile/link flags 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-11-26 23:19:23 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  env [ " use_static_cpp " ] : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        env . AppendUnique ( CCFLAGS = [ " /MT " ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        env . AppendUnique ( CCFLAGS = [ " /MD " ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2021-02-09 00:20:42 +11:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-11-26 23:19:23 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    env . AppendUnique ( CCFLAGS = [ " /Gd " ,  " /GR " ,  " /nologo " ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-10 16:02:02 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    env . AppendUnique ( CCFLAGS = [ " /utf-8 " ] )   # Force to use Unicode encoding. 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    env . AppendUnique ( CXXFLAGS = [ " /TP " ] )   # assume all sources are C++ 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-10 16:02:02 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  manual_msvc_config :   # should be automatic if SCons found it 
							 
						 
					
						
							
								
									
										
										
										
											2018-05-07 00:42:12 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  os . getenv ( " WindowsSdkDir " )  is  not  None : 
							 
						 
					
						
							
								
									
										
										
										
											2019-04-30 13:12:02 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            env . Prepend ( CPPPATH = [ os . getenv ( " WindowsSdkDir " )  +  " /Include " ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2018-05-07 00:42:12 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        else : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            print ( " Missing environment variable: WindowsSdkDir " ) 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-02 14:51:29 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    env . AppendUnique ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        CPPDEFINES = [ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            " WINDOWS_ENABLED " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            " OPENGL_ENABLED " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            " WASAPI_ENABLED " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            " WINMIDI_ENABLED " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            " TYPED_METHOD_BIND " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            " WIN32 " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            " MSVC " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            " WINVER= %s "  %  env [ " target_win_version " ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            " _WIN32_WINNT= %s "  %  env [ " target_win_version " ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    env . AppendUnique ( CPPDEFINES = [ " NOMINMAX " ] )   # disable bogus min/max WinDef.h macros 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-02 14:51:29 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  env [ " bits " ]  ==  " 64 " : 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        env . AppendUnique ( CPPDEFINES = [ " _WIN64 " ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-02 14:51:29 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ## Libs 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    LIBS  =  [ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        " winmm " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        " opengl32 " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        " dsound " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        " kernel32 " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        " ole32 " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        " oleaut32 " , 
							 
						 
					
						
							
								
									
										
										
										
											2022-05-23 15:02:12 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        " sapi " , 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        " user32 " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        " gdi32 " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        " IPHLPAPI " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        " Shlwapi " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        " wsock32 " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        " Ws2_32 " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        " shell32 " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        " advapi32 " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        " dinput8 " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        " dxguid " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        " imm32 " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        " bcrypt " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        " Avrt " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        " dwmapi " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ] 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-02 14:51:29 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    env . Append ( LINKFLAGS = [ p  +  env [ " LIBSUFFIX " ]  for  p  in  LIBS ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  manual_msvc_config : 
							 
						 
					
						
							
								
									
										
										
										
											2018-05-07 00:42:12 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  os . getenv ( " WindowsSdkDir " )  is  not  None : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            env . Append ( LIBPATH = [ os . getenv ( " WindowsSdkDir " )  +  " /Lib " ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        else : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            print ( " Missing environment variable: WindowsSdkDir " ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-30 19:21:38 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-03-02 14:51:29 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ## LTO 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-30 19:21:38 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  env [ " use_lto " ] : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        env . AppendUnique ( CCFLAGS = [ " /GL " ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        env . AppendUnique ( ARFLAGS = [ " /LTCG " ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-02 14:51:29 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  env [ " progress " ] : 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            env . AppendUnique ( LINKFLAGS = [ " /LTCG:STATUS " ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-30 19:21:38 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        else : 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            env . AppendUnique ( LINKFLAGS = [ " /LTCG " ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-30 19:21:38 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-03-02 14:51:29 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  manual_msvc_config : 
							 
						 
					
						
							
								
									
										
										
										
											2019-04-30 13:12:02 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        env . Prepend ( CPPPATH = [ p  for  p  in  os . getenv ( " INCLUDE " ) . split ( " ; " ) ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-02 14:51:29 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        env . Append ( LIBPATH = [ p  for  p  in  os . getenv ( " LIB " ) . split ( " ; " ) ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-30 19:21:38 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-03-12 18:44:06 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    # Sanitizers 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  env [ " use_asan " ] : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        env . extra_suffix  + =  " .s " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        env . Append ( LINKFLAGS = [ " /INFERASANLIBS " ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        env . Append ( CCFLAGS = [ " /fsanitize=address " ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-03-02 14:51:29 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    # Incremental linking fix 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    env [ " BUILDERS " ] [ " ProgramOriginal " ]  =  env [ " BUILDERS " ] [ " Program " ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    env [ " BUILDERS " ] [ " Program " ]  =  methods . precious_program 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    env . AppendUnique ( LINKFLAGS = [ " /STACK: "  +  str ( STACK_SIZE ) ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-30 19:21:38 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-17 18:17:41 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-03-02 14:51:29 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								def  configure_mingw ( env ) :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Workaround for MinGW. See: 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # http://www.scons.org/wiki/LongCmdLinesOnWin32 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    env . use_windows_spawn_fix ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-30 18:44:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-03-02 14:51:29 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ## Build type 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-30 18:44:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  env [ " target " ]  ==  " release " : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        env . Append ( CCFLAGS = [ " -msse2 " ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-01 16:25:36 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  env [ " optimize " ]  ==  " speed " :   # optimize for speed (default) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  env [ " bits " ]  ==  " 64 " : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                env . Append ( CCFLAGS = [ " -O3 " ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2018-07-21 17:26:14 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            else : 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                env . Append ( CCFLAGS = [ " -O2 " ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        else :   # optimize for size 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            env . Prepend ( CCFLAGS = [ " -Os " ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2021-02-08 08:52:21 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  env [ " debug_symbols " ] : 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            env . Prepend ( CCFLAGS = [ " -g2 " ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    elif  env [ " target " ]  ==  " release_debug " : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        env . Append ( CCFLAGS = [ " -O2 " ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2021-02-08 08:52:21 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  env [ " debug_symbols " ] : 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            env . Prepend ( CCFLAGS = [ " -g2 " ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  env [ " optimize " ]  ==  " speed " :   # optimize for speed (default) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            env . Append ( CCFLAGS = [ " -O2 " ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        else :   # optimize for size 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            env . Prepend ( CCFLAGS = [ " -Os " ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    elif  env [ " target " ]  ==  " debug " : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        env . Append ( CCFLAGS = [ " -g3 " ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-18 10:38:28 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        # Allow big objects. It's supposed not to have drawbacks but seems to break 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        # GCC LTO, so enabling for debug builds only (which are not built with LTO 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        # and are the only ones with too big objects). 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        env . Append ( CCFLAGS = [ " -Wa,-mbig-obj " ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-30 19:21:38 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-01-29 21:42:03 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  env [ " windows_subsystem " ]  ==  " gui " : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        env . Append ( LINKFLAGS = [ " -Wl,--subsystem,windows " ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        env . Append ( LINKFLAGS = [ " -Wl,--subsystem,console " ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        env . AppendUnique ( CPPDEFINES = [ " WINDOWS_SUBSYSTEM_CONSOLE " ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2021-12-16 13:08:09 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-03-02 14:51:29 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ## Compiler configuration 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-30 19:21:38 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  os . name  ==  " nt " : 
							 
						 
					
						
							
								
									
										
										
										
											2019-12-09 19:22:08 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        # Force splitting libmodules.a in multiple chunks to work around 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        # issues reaching the linker command line size limit, which also 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        # seem to induce huge slowdown for 'ar' (GH-30892). 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        env [ " split_libmodules " ]  =  True 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-02 14:51:29 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    else : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        env [ " PROGSUFFIX " ]  =  env [ " PROGSUFFIX " ]  +  " .exe "   # for linux cross-compilation 
							 
						 
					
						
							
								
									
										
										
										
											2017-09-13 19:32:24 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  env [ " bits " ]  ==  " default " : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  os . name  ==  " nt " : 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-02 14:51:29 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            env [ " bits " ]  =  " 64 "  if  " PROGRAMFILES(X86) "  in  os . environ  else  " 32 " 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        else :   # default to 64-bit on Linux 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-02 14:51:29 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            env [ " bits " ]  =  " 64 " 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-30 19:21:38 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-03-02 14:51:29 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    mingw_prefix  =  " " 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-30 19:21:38 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  env [ " bits " ]  ==  " 32 " : 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-26 23:19:23 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  env [ " use_static_cpp " ] : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            env . Append ( LINKFLAGS = [ " -static " ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            env . Append ( LINKFLAGS = [ " -static-libgcc " ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            env . Append ( LINKFLAGS = [ " -static-libstdc++ " ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-02 14:51:29 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        mingw_prefix  =  env [ " mingw_prefix_32 " ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else : 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-26 23:19:23 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  env [ " use_static_cpp " ] : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            env . Append ( LINKFLAGS = [ " -static " ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-02 14:51:29 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        mingw_prefix  =  env [ " mingw_prefix_64 " ] 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-30 19:21:38 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  env [ " use_llvm " ] : 
							 
						 
					
						
							
								
									
										
										
										
											2019-10-22 12:47:12 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        env [ " CC " ]  =  mingw_prefix  +  " clang " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        env [ " CXX " ]  =  mingw_prefix  +  " clang++ " 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-19 16:47:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        env [ " AS " ]  =  mingw_prefix  +  " as " 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        env [ " AR " ]  =  mingw_prefix  +  " ar " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        env [ " RANLIB " ]  =  mingw_prefix  +  " ranlib " 
							 
						 
					
						
							
								
									
										
										
										
											2019-10-22 12:47:12 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    else : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        env [ " CC " ]  =  mingw_prefix  +  " gcc " 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        env [ " CXX " ]  =  mingw_prefix  +  " g++ " 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-19 16:47:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        env [ " AS " ]  =  mingw_prefix  +  " as " 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        env [ " AR " ]  =  mingw_prefix  +  " gcc-ar " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        env [ " RANLIB " ]  =  mingw_prefix  +  " gcc-ranlib " 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-19 16:47:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-03-02 14:51:29 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    env [ " x86_libtheora_opt_gcc " ]  =  True 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-01 16:25:36 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  env [ " use_lto " ] : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  not  env [ " use_llvm " ]  and  env . GetOption ( " num_jobs " )  >  1 : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            env . Append ( CCFLAGS = [ " -flto " ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            env . Append ( LINKFLAGS = [ " -flto= "  +  str ( env . GetOption ( " num_jobs " ) ) ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-10-22 12:47:12 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        else : 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  env [ " use_thinlto " ] : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                env . Append ( CCFLAGS = [ " -flto=thin " ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                env . Append ( LINKFLAGS = [ " -flto=thin " ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-10-22 12:47:12 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            else : 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                env . Append ( CCFLAGS = [ " -flto " ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                env . Append ( LINKFLAGS = [ " -flto " ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-09-13 22:36:15 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    env . Append ( LINKFLAGS = [ " -Wl,--stack, "  +  str ( STACK_SIZE ) ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-01 16:25:36 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-03-02 14:51:29 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ## Compile flags 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-01 16:25:36 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    env . Append ( CCFLAGS = [ " -mwindows " ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2021-03-29 14:33:05 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    env . Append ( LINKFLAGS = [ " -Wl,--nxcompat " ] )   # DEP protection. Not enabling ASLR for now, Mono crashes. 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    env . Append ( CPPDEFINES = [ " WINDOWS_ENABLED " ,  " OPENGL_ENABLED " ,  " WASAPI_ENABLED " ,  " WINMIDI_ENABLED " ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    env . Append ( CPPDEFINES = [ ( " WINVER " ,  env [ " target_win_version " ] ) ,  ( " _WIN32_WINNT " ,  env [ " target_win_version " ] ) ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    env . Append ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        LIBS = [ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            " mingw32 " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            " opengl32 " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            " dsound " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            " ole32 " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            " d3d9 " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            " winmm " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            " gdi32 " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            " iphlpapi " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            " shlwapi " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            " wsock32 " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            " ws2_32 " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            " kernel32 " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            " oleaut32 " , 
							 
						 
					
						
							
								
									
										
										
										
											2022-05-23 15:02:12 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            " sapi " , 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            " dinput8 " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            " dxguid " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            " ksuser " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            " imm32 " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            " bcrypt " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            " avrt " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            " uuid " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            " dwmapi " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    env . Append ( CPPDEFINES = [ " MINGW_ENABLED " ,  ( " MINGW_HAS_SECURE_API " ,  1 ) ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-09-23 22:55:26 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-03-02 14:51:29 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    # resrc 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    env . Append ( BUILDERS = { " RES " :  env . Builder ( action = build_res_file ,  suffix = " .o " ,  src_suffix = " .rc " ) } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-12-14 08:59:46 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-03-02 14:51:29 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								def  configure ( env ) :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # At this point the env has been set up with basic tools/compilers. 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    env . Prepend ( CPPPATH = [ " #platform/windows " ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-01 16:25:36 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    print ( " Configuring for Windows: target= %s , bits= %s "  %  ( env [ " target " ] ,  env [ " bits " ] ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-02 14:51:29 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  os . name  ==  " nt " : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        env [ " ENV " ]  =  os . environ   # this makes build less repeatable, but simplifies some things 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        env [ " ENV " ] [ " TMP " ]  =  os . environ [ " TMP " ] 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-02 14:51:29 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # First figure out which compiler, version, and target arch we're using 
							 
						 
					
						
							
								
									
										
										
										
											2019-02-19 09:10:50 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  os . getenv ( " VCINSTALLDIR " )  and  not  env [ " use_mingw " ] : 
							 
						 
					
						
							
								
									
										
										
										
											2018-06-13 14:42:55 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        # Manual setup of MSVC 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-02 14:51:29 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        setup_msvc_manual ( env ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        env . msvc  =  True 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        manual_msvc_config  =  True 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    elif  env . get ( " MSVC_VERSION " ,  " " )  and  not  env [ " use_mingw " ] : 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-02 14:51:29 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        setup_msvc_auto ( env ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        env . msvc  =  True 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        manual_msvc_config  =  False 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        setup_mingw ( env ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        env . msvc  =  False 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-01 16:25:36 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-03-02 14:51:29 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    # Now set compiler/linker flags 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  env . msvc : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        configure_msvc ( env ,  manual_msvc_config ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-01 16:25:36 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 08:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    else :   # MinGW 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-02 14:51:29 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        configure_mingw ( env )