SConstruct
branchpyrit
changeset 91 9d66d323c354
parent 88 f7edb3b90816
child 92 9af5c039b678
equal deleted inserted replaced
90:f6a72eb99631 91:9d66d323c354
    28 
    28 
    29 Options:
    29 Options:
    30 """)
    30 """)
    31 
    31 
    32 import os, sys
    32 import os, sys
    33 env = Environment(ENV = {'PATH' : os.environ['PATH']})
    33 env = Environment() #(ENV = {'PATH' : os.environ['PATH']})
    34 Decider('MD5-timestamp')
    34 Decider('MD5-timestamp')
    35 
    35 
    36 opt = Options(['.optioncache'])
    36 opt = Options(['.optioncache'])
    37 opt.AddOptions(
    37 opt.AddOptions(
    38 	BoolOption('intelc', 'use Intel C++ Compiler, if available', True),
    38 	BoolOption('intelc', 'use Intel C++ Compiler, if available', True),
       
    39 	BoolOption('simd', 'allow SSE intrinsics', True),
    39 	('precision', 'floating point number precision (single/double)', "single"),
    40 	('precision', 'floating point number precision (single/double)', "single"),
    40 	('flags', 'add additional compiler flags', ""),
    41 	('flags', 'add additional compiler flags', ""),
       
    42 	BoolOption('force_flags', "use only flags specified by 'flags' option (do not autodetect arch/sse flags)", False),
       
    43 	BoolOption('profile', "enable gcc's profiling support (-pg)", False),
    41 )
    44 )
    42 if env['PLATFORM'] == 'win32':
    45 if env['PLATFORM'] == 'win32':
    43 	opt.AddOptions(
    46 	opt.AddOptions(
    44 		('pythonpath', 'path to Python installation',
    47 		('pythonpath', 'path to Python installation',
    45 			'C:\\Python%c%c' % (sys.version[0], sys.version[2])),
    48 			'C:\\Python%c%c' % (sys.version[0], sys.version[2])),
   118 if cc == 'gcc':
   121 if cc == 'gcc':
   119 	add_flags += cpuflags_gcc + ' -ffast-math '
   122 	add_flags += cpuflags_gcc + ' -ffast-math '
   120 if cc == 'intelc':
   123 if cc == 'intelc':
   121 	add_flags += cpuflags_intelc + ' '
   124 	add_flags += cpuflags_intelc + ' '
   122 
   125 
       
   126 if conf.env['force_flags']:
       
   127 	add_flags = conf.env['flags'] + ' '
       
   128 else:
       
   129 	add_flags += conf.env['flags'] + ' '
       
   130 
   123 if conf.env['precision'] == 'double':
   131 if conf.env['precision'] == 'double':
   124 	add_flags += '-DPYRIT_DOUBLE '
   132 	add_flags += '-DPYRIT_DOUBLE '
   125 elif cc == 'gcc':
   133 elif cc == 'gcc':
   126 	add_flags += '-fsingle-precision-constant '
   134 	add_flags += '-fsingle-precision-constant '
   127 
   135 
   128 add_flags += conf.env['flags']
   136 if not conf.env['simd']:
       
   137 	add_flags += '-DNO_SSE '
   129 
   138 
   130 if cc == 'intelc':
   139 if cc == 'intelc':
   131 	conf.env.Append(CCFLAGS="-O3 -w1 " + add_flags)
   140 	conf.env.Append(CCFLAGS="-O3 -w1 " + add_flags)
   132 elif cc == 'gcc':
   141 elif cc == 'gcc':
   133 	conf.env.Append(CCFLAGS="-O3 -Wall -pipe " + add_flags)
   142 	conf.env.Append(CCFLAGS="-O3 -Wall -pipe " + add_flags)
   141 
   150 
   142 if conf.CheckLibWithHeader('png', 'png.h', 'C'):
   151 if conf.CheckLibWithHeader('png', 'png.h', 'C'):
   143 	conf.env.Append(CCFLAGS='-DHAVE_PNG')
   152 	conf.env.Append(CCFLAGS='-DHAVE_PNG')
   144 	conf.env.Append(LIBS=['png'])
   153 	conf.env.Append(LIBS=['png'])
   145 
   154 
       
   155 if not conf.CheckCHeader('pthread.h'):
       
   156 	print 'Error: Cannot build without pthread.'
       
   157 	Exit(1)
       
   158 
   146 if conf.env['PLATFORM'] == 'win32':
   159 if conf.env['PLATFORM'] == 'win32':
   147 	conf.env.Append(LIBS=["pthreadGC2"])
   160 	conf.env.Append(LIBS=["pthreadGC2"])
   148 else:
   161 else:
   149 	conf.env.Append(CCFLAGS="-pthread ")
   162 	conf.env.Append(CCFLAGS="-pthread ")
       
   163 
       
   164 if conf.env['profile'] and cc == 'gcc':
       
   165 	conf.env.Append(CCFLAGS="-pg", LINKFLAGS="-pg")
   150 
   166 
   151 env = conf.Finish()
   167 env = conf.Finish()
   152 
   168 
   153 
   169 
   154 ### build targets
   170 ### build targets
   155 
   171 
   156 (lib, pymodule) = SConscript('src/SConscript', build_dir='build/lib', duplicate=0, exports='env')
   172 lib = SConscript('src/SConscript', build_dir='build/lib', duplicate=0, exports={'env':env,'buildmodule':False})
       
   173 pymodule = SConscript('src/SConscript', build_dir='build/pymodule', duplicate=0, exports={'env':env,'buildmodule':True})
   157 
   174 
   158 SConscript('ccdemos/SConscript', build_dir='build/ccdemos', duplicate=0, exports='env lib')
   175 SConscript('ccdemos/SConscript', build_dir='build/ccdemos', duplicate=0, exports='env lib')
   159 SConscript('demos/SConscript', exports='pymodule')
   176 SConscript('demos/SConscript', exports='pymodule')
   160 env.Alias('demos', ['cc-demos', 'python-demos'])
   177 env.Alias('demos', ['cc-demos', 'python-demos'])
   161 
   178 
   162 SConscript('tests/SConscript', build_dir='build/tests', duplicate=0, exports='env lib')
   179 SConscript('tests/SConscript', build_dir='build/tests', duplicate=0, exports='env lib')
   163 
   180 
   164 SConscript('models/SConscript')
   181 SConscript('models/SConscript')
       
   182 
       
   183 env.Alias('libs', ['static-lib', 'python-module'])
   165 
   184 
   166 env.Alias('docs', Command('docs/html', [], 'doxygen'))
   185 env.Alias('docs', Command('docs/html', [], 'doxygen'))
   167 env.Clean('docs', ['docs/html'])
   186 env.Clean('docs', ['docs/html'])
   168 
   187 
   169 env.Alias('no-docs', ['libs', 'demos', 'models'])
   188 env.Alias('no-docs', ['libs', 'demos', 'models'])