23                      - everything but docs  | 
    23                      - everything but docs  | 
    24     no-download = (libs, demos, local-models)  | 
    24     no-download = (libs, demos, local-models)  | 
    25                      - everything but docs and downloadable models  | 
    25                      - everything but docs and downloadable models  | 
    26   | 
    26   | 
    27 Default target is no-download.  | 
    27 Default target is no-download.  | 
         | 
    28   | 
         | 
    29 Options:  | 
    28 """)  | 
    30 """)  | 
    29   | 
    31   | 
         | 
    32 import os, sys  | 
         | 
    33 env = Environment(ENV = {'PATH' : os.environ['PATH']}) | 
    30 Decider('MD5-timestamp') | 
    34 Decider('MD5-timestamp') | 
    31 import os  | 
         | 
    32 env = Environment(ENV = {'PATH' : os.environ['PATH']}) | 
         | 
    33   | 
    35   | 
    34 ### GNU C++ Compiler  | 
    36 opt = Options(['.optioncache'])  | 
    35 #env.Replace(CXX="g++")  | 
    37 opt.AddOptions(  | 
    36 #env.Append(CCFLAGS="-O3 -Wall -pipe -ffast-math -msse3 ")  | 
    38 	BoolOption('intelc', 'use Intel C++ Compiler, if available', True), | 
         | 
    39 	('flags', 'add additional compiler flags', ""), | 
         | 
    40 )  | 
         | 
    41 if env['PLATFORM'] == 'win32':  | 
         | 
    42 	opt.AddOptions(  | 
         | 
    43 		('pythonpath', 'path to Python installation', | 
         | 
    44 			'C:\\Python%c%c' % (sys.version[0], sys.version[2])),  | 
         | 
    45 		)  | 
         | 
    46 opt.Update(env)  | 
         | 
    47 opt.Save('.optioncache', env) | 
         | 
    48 Help(opt.GenerateHelpText(env))  | 
    37   | 
    49   | 
    38 ### Intel C++ Compiler  | 
    50 if env['intelc']:  | 
    39 env.Replace(CXX="icpc")  | 
    51 	Tool("intelc")(env) | 
    40 env.Append(CCFLAGS="-O3 -w1 -mtune=core2 -xT ")  | 
         | 
    41   | 
    52   | 
    42 ### MinGW32  | 
    53 platform = 'unknown'  | 
    43 #  PY_CCFLAGS=-I"C:\Program Files\Python25\include"  | 
    54 def CheckPlatform(context):  | 
    44 #  PY_LDFLAGS=-L"C:\Program Files\Python25\libs" -lpython25  | 
    55 	global platform  | 
         | 
    56 	context.Message('Platform is... ') | 
         | 
    57 	if sys.platform[:5] == 'linux':  | 
         | 
    58 		platform = 'linux'  | 
         | 
    59 	elif env['PLATFORM'] == 'posix':  | 
         | 
    60 		platform = 'posix'  | 
         | 
    61 	elif env['PLATFORM'] == 'win32':  | 
         | 
    62 		platform = 'win32'  | 
         | 
    63 	context.Result(platform)  | 
         | 
    64 	return True  | 
         | 
    65   | 
         | 
    66 cpu = 'unknown'  | 
         | 
    67 def CheckCPU(context):  | 
         | 
    68 	global cpu, platform  | 
         | 
    69 	context.Message('Checking CPU model... ') | 
         | 
    70 	if (platform == 'linux'):  | 
         | 
    71 		if (os.system("cat /proc/cpuinfo | grep 'Core(TM)2 CPU' >/dev/null") == 0): | 
         | 
    72 			cpu = 'core2'  | 
         | 
    73 	context.Result(cpu)  | 
         | 
    74 	return True  | 
         | 
    75   | 
         | 
    76 def CheckIntelC(context):  | 
         | 
    77 	global intelc  | 
         | 
    78 	context.Message('Checking for Intel C++ Compiler... ') | 
         | 
    79 	intelc = "intelc" in env['TOOLS']  | 
         | 
    80 	context.Result(intelc)  | 
         | 
    81 	return intelc  | 
         | 
    82   | 
         | 
    83 def CheckGCC(context):  | 
         | 
    84 	global gcc, gccversion  | 
         | 
    85 	context.Message('Checking for GCC... ') | 
         | 
    86 	gcc = "g++" in env['TOOLS']  | 
         | 
    87 	if gcc:  | 
         | 
    88 		gccversion = os.popen("g++ --version").read().split()[2] | 
         | 
    89 		context.Result(gccversion)  | 
         | 
    90 	else:  | 
         | 
    91 		context.Result(False)  | 
         | 
    92 	return gcc  | 
         | 
    93   | 
         | 
    94 conf = Configure(env,  | 
         | 
    95 	custom_tests = { | 
         | 
    96 		'CheckPlatform' : CheckPlatform, 'CheckCPU' : CheckCPU,  | 
         | 
    97 		'CheckIntelC' : CheckIntelC, 'CheckGCC' : CheckGCC})  | 
         | 
    98 conf.CheckPlatform()  | 
         | 
    99 conf.CheckCPU()  | 
         | 
   100 conf.CheckGCC()  | 
         | 
   101 conf.CheckIntelC()  | 
         | 
   102 env = conf.Finish()  | 
         | 
   103   | 
         | 
   104 if intelc:  | 
         | 
   105 	cc = 'intelc'  | 
         | 
   106 elif gcc:  | 
         | 
   107 	cc = 'gcc'  | 
         | 
   108   | 
         | 
   109 cpu_flags = ''  | 
         | 
   110 if cc == 'gcc':  | 
         | 
   111 	cpu_flags += '-ffast-math '  | 
         | 
   112 if cpu == 'core2':  | 
         | 
   113 	if (cc == 'intelc' or gccversion[:3] == '4.3'):  | 
         | 
   114 		cpu_flags += '-march=core2 -mtune=core2 '  | 
         | 
   115 	if cc == 'intelc':  | 
         | 
   116 		cpu_flags += '-xT '  | 
         | 
   117 	if cc == 'gcc':  | 
         | 
   118 		cpu_flags += '-msse3 -mfpmath=sse '  | 
         | 
   119 cpu_flags += env['flags']  | 
         | 
   120   | 
         | 
   121 if intelc:  | 
         | 
   122 	env.Append(CCFLAGS="-O3 -w1 " + cpu_flags)  | 
         | 
   123 elif gcc:  | 
         | 
   124 	env.Append(CCFLAGS="-O3 -Wall -pipe " + cpu_flags)  | 
         | 
   125 	# CCFLAGS= -fno-strict-aliasing  | 
         | 
   126 else:  | 
         | 
   127 	print "No supported compiler found."  | 
         | 
   128 	Exit(1)  | 
         | 
   129   | 
         | 
   130 print "Additional compiler flags: " + cpu_flags  | 
    45   | 
   131   | 
    46 # pthread  | 
   132 # pthread  | 
    47 if env['PLATFORM'] == 'win32':  | 
   133 if env['PLATFORM'] == 'win32':  | 
    48 	env.Append(LINKFLAGS="-lpthreadGC2 ")  | 
   134 	env.Append(LIBS=["pthreadGC2"])  | 
    49 else:  | 
   135 else:  | 
    50 	env.Append(CCFLAGS="-pthread ")  | 
   136 	env.Append(CCFLAGS="-pthread ")  | 
    51   | 
         | 
    52 # CCFLAGS=-g -fno-strict-aliasing  | 
         | 
    53   | 
   137   | 
    54 # float: -fsingle-precision-constant  | 
   138 # float: -fsingle-precision-constant  | 
    55 # double: -DPYRIT_DOUBLE  | 
   139 # double: -DPYRIT_DOUBLE  | 
    56 (lib, pymodule) = SConscript('src/SConscript', build_dir='build/lib', duplicate=0, exports='env') | 
   140 (lib, pymodule) = SConscript('src/SConscript', build_dir='build/lib', duplicate=0, exports='env') | 
    57   | 
   141   |