SConstruct
branchpyrit
changeset 93 96d65f841791
parent 92 9af5c039b678
child 94 4c8abb8977dc
equal deleted inserted replaced
92:9af5c039b678 93:96d65f841791
    40 if sys.platform == 'win32':
    40 if sys.platform == 'win32':
    41 	tools = ['mingw']
    41 	tools = ['mingw']
    42 else:
    42 else:
    43 	tools = ['default']
    43 	tools = ['default']
    44 
    44 
    45 env = Environment(tools = tools)
    45 env = Environment(tools = tools, CPPPATH = ['.','#include'])
    46 
    46 
    47 opt = Options(['build/.optioncache'])
    47 opt = Options(['build/.optioncache'])
    48 opt.AddOptions(
    48 opt.AddOptions(
    49 	BoolOption('simd', 'allow SSE intrinsics', True),
    49 	BoolOption('simd', 'allow SSE intrinsics', True),
    50 	('precision', 'floating point number precision (single/double)', "single"),
    50 	('precision', 'floating point number precision (single/double)', "single"),
    82 	elif env['PLATFORM'] == 'win32':
    82 	elif env['PLATFORM'] == 'win32':
    83 		platform = 'win32'
    83 		platform = 'win32'
    84 	context.Result(platform)
    84 	context.Result(platform)
    85 	return True
    85 	return True
    86 
    86 
       
    87 intelcversion = ''
    87 def CheckIntelC(context):
    88 def CheckIntelC(context):
    88 	global intelc, intelcversion
    89 	global intelc, intelcversion
    89 	context.Message('Checking for IntelC compiler... ')
    90 	context.Message('Checking for IntelC compiler... ')
    90 	intelc = Tool("intelc").exists(env) == True
    91 	intelc = Tool("intelc").exists(env) == True
    91 	if intelc:
    92 	if intelc:
    92 		testenv = Environment()
    93 		testenv = Environment()
    93 		Tool("intelc").generate(testenv)
    94 		Tool("intelc").generate(testenv)
    94 		intelcversion = str(testenv['INTEL_C_COMPILER_VERSION']/10.)
    95 		intelcversion = str(testenv['INTEL_C_COMPILER_VERSION']/10.)
    95 		context.Result(intelcversion)
    96 		context.Result(intelcversion)
    96 	else:
    97 	else:
    97 		intelcversion = ''
       
    98 		context.Result(intelc)
    98 		context.Result(intelc)
    99 	return intelc
    99 	return intelc
   100 
   100 
   101 def CheckGCC(context):
   101 def CheckGCC(context):
   102 	global gcc, gccversion
   102 	global gcc, gccversion
   183 else:
   183 else:
   184 	add_flags += conf.env['flags'] + ' '
   184 	add_flags += conf.env['flags'] + ' '
   185 
   185 
   186 if conf.env['precision'] == 'double':
   186 if conf.env['precision'] == 'double':
   187 	conf.Define("PYRIT_DOUBLE")
   187 	conf.Define("PYRIT_DOUBLE")
   188 elif cc == 'gcc':
       
   189 	add_flags += '-fsingle-precision-constant '
       
   190 
   188 
   191 if not conf.env['simd'] or conf.env['precision'] == 'double':
   189 if not conf.env['simd'] or conf.env['precision'] == 'double':
   192 	conf.Define("NO_SIMD")
   190 	conf.Define("NO_SIMD")
   193 
   191 
   194 if cc == 'intelc':
   192 if cc == 'intelc':
   195 	conf.env.Append(CCFLAGS="-O3 -w1 " + add_flags)
   193 	conf.env.Append(CCFLAGS="-O3 -w1 " + add_flags)
   196 elif cc == 'gcc':
   194 elif cc == 'gcc':
   197 	conf.env.Append(CCFLAGS="-O3 -Wall -pipe " + add_flags)
   195 	conf.env.Append(CCFLAGS="-O3 -Wall -pipe " + add_flags)
       
   196 	# Other useful flags:
       
   197 	# -Wunsafe-loop-optimizations -Wpointer-arith -Wcast-align -Wconversion
       
   198 	# -Wmissing-noreturn -Winline -Wdisabled-optimization
   198 elif cc == 'msvc':
   199 elif cc == 'msvc':
   199 	conf.env.Append(CCFLAGS="/Ox /Ob2 /GS- /Gy /GF /GR- /Zp16 /MD /EHsc /vmb " + add_flags)
   200 	conf.env.Append(CCFLAGS="/Ox /Ob2 /GS- /Gy /GF /GR- /Zp16 /MD /EHsc /vmb " + add_flags)
   200 else:
   201 else:
   201 	print "No supported compiler found."
   202 	print "No supported compiler found."
   202 	Exit(1)
   203 	Exit(1)
   203 
   204 
   204 print "Using compiler: " + cc
   205 print "Using compiler: " + cc
   205 print "Additional flags: " + add_flags
   206 print "Additional flags: " + add_flags
   206 
   207 
       
   208 if conf.env['profile'] and cc == 'gcc':
       
   209 	conf.env.Append(CCFLAGS="-pg", LINKFLAGS="-pg")
       
   210 
       
   211 
       
   212 # configure pthread
   207 pthread = True
   213 pthread = True
   208 if conf.env['PLATFORM'] == 'win32':
   214 if platform == 'win32':
   209 	if cc == 'msvc':
   215 	if cc == 'msvc':
   210 		if not conf.CheckLib('pthreadVC2'):
   216 		if not conf.CheckLib('pthreadVC2'):
   211 			pthread = False
   217 			pthread = False
   212 		conf.env.Append(LIBS=["pthreadVC2"])
       
   213 	elif cc == 'gcc':
   218 	elif cc == 'gcc':
   214 		if not conf.CheckLib('pthreadGC2'):
   219 		if not conf.CheckLib('pthreadGC2'):
   215 			pthread = False
   220 			pthread = False
   216 		conf.env.Append(LIBS=["pthreadGC2"])
       
   217 else:
   221 else:
   218 	conf.env.Append(CCFLAGS="-pthread ")
   222 	conf.env.Append(CCFLAGS="-pthread ")
   219 
   223 
   220 if not pthread:
   224 if not pthread:
   221 	print 'Error: Cannot build without pthread.'
   225 	print 'Error: Cannot build without pthread.'
   222 	Exit(1)
   226 	Exit(1)
   223 
   227 
       
   228 
       
   229 # configure libpng
   224 if conf.CheckLibWithHeader('png', 'png.h', 'C'):
   230 if conf.CheckLibWithHeader('png', 'png.h', 'C'):
   225 	conf.Define('HAVE_PNG')
   231 	conf.Define('HAVE_PNG')
   226 	conf.env.Append(LIBS=['png'])
   232 elif conf.CheckLib('libpng'):
   227 elif conf.CheckLib('libpng13'):
       
   228 	conf.Define('HAVE_PNG')
   233 	conf.Define('HAVE_PNG')
   229 	conf.env.Append(LIBS=['libpng13'])
       
   230 
       
   231 if conf.env['profile'] and cc == 'gcc':
       
   232 	conf.env.Append(CCFLAGS="-pg", LINKFLAGS="-pg")
       
   233 
   234 
   234 env = conf.Finish()
   235 env = conf.Finish()
       
   236 
       
   237 
       
   238 # configure Python
       
   239 pyenv = env.Clone()
       
   240 have_python = True
       
   241 if platform == 'win32':
       
   242 	pythonver = '%c%c' % (sys.version[0], sys.version[2])
       
   243 	pythonlib = 'python'+pythonver
       
   244 	pythonpath = [env['pythonpath'],
       
   245 		'C:\\Program Files\\Python'+pythonver]
       
   246 	pyenv.Append(CPPPATH=[s+'\\include' for s in pythonpath])
       
   247 	pyenv.Append(LIBPATH=[s+'\\libs' for s in pythonpath])
       
   248 	pyenv.Replace(SHLIBSUFFIX='.pyd')
       
   249 	conf = Configure(pyenv, conf_dir=conf_dir, log_file=log_file, config_h=config_h)
       
   250 	if not conf.CheckLib(pythonlib):
       
   251 		have_python = False
       
   252 	pyenv = conf.Finish()
       
   253 else:
       
   254 	try:
       
   255 		pyenv.ParseConfig('python-config --includes --libs')
       
   256 	except:
       
   257 		have_python = False
       
   258 
       
   259 if not have_python:
       
   260 	print "Error: Python is required."
       
   261 	Exit(1)
   235 
   262 
   236 # configure SDL
   263 # configure SDL
   237 sdlenv = env.Clone()
   264 sdlenv = env.Clone()
   238 if cc != 'msvc':
   265 if cc == 'msvc':
       
   266 	sdlenv.Append(LIBS=['SDL', 'SDLmain'])
       
   267 	sdlenv.Append(LINKFLAGS="/SUBSYSTEM:WINDOWS")
       
   268 else:
   239 	try:
   269 	try:
   240 		sdlenv.ParseConfig('sh sdl-config --cflags')
   270 		sdlenv.ParseConfig('sh sdl-config --cflags')
   241 		sdlenv.ParseConfig('sh sdl-config --libs')
   271 		sdlenv.ParseConfig('sh sdl-config --libs')
   242 	except:
   272 	except:
   243 		pass
   273 		pass
   244 else:
   274 
   245 	sdlenv.Append(LIBS=['SDL', 'SDLmain'])
   275 def CheckSDL(context):
   246 
   276 	global have_sdl
   247 conf = Configure(sdlenv, conf_dir=conf_dir, log_file=log_file, config_h=config_h)
   277 	context.Message('Checking for SDL... ')
   248 have_sdl = False
   278 	if context.TryLink("#include <SDL.h>\n"+
   249 if conf.CheckLib('SDL'):
   279 		"int main(int argc,char **argv){return 0;}", '.cc'):
   250 	have_sdl = True
   280 		context.Result(1)
   251 else:
   281 		return True
   252 	print "SDL not found, some demos will not built."
   282 	else:
       
   283 		context.Result("no (some demos won't be built)")
       
   284 	return False
       
   285 
       
   286 conf = Configure(sdlenv, conf_dir=conf_dir, log_file=log_file, config_h=config_h,
       
   287 	custom_tests = {'CheckSDL' : CheckSDL} )
       
   288 have_sdl = conf.CheckSDL()
   253 sdlenv = conf.Finish()
   289 sdlenv = conf.Finish()
   254 
   290 
   255 if cc == 'msvc':
       
   256 	sdlenv.Append(LINKFLAGS="/SUBSYSTEM:WINDOWS")
       
   257 
   291 
   258 ### build targets
   292 ### build targets
   259 
   293 
   260 Export('env sdlenv cc')
   294 Export('env pyenv sdlenv cc')
   261 lib = SConscript('src/SConscript', build_dir='build/lib', duplicate=0,
   295 lib = SConscript('src/SConscript', build_dir='build/lib', duplicate=0,
   262 	exports={'buildmodule':False})
   296 	exports={'buildmodule':False})
   263 pymodule = SConscript('src/SConscript', build_dir='build/pymodule', duplicate=0,
   297 pymodule = SConscript('src/SConscript', build_dir='build/pymodule', duplicate=0,
   264 	exports={'buildmodule':True})
   298 	exports={'buildmodule':True})
   265 
   299