2013-05-29 20:37:57 -05:00
# ============
# SCons script
# ============
# the purpose of this script is to run a build of tpt from start to finish, including dependency checks.
# .. contents :: Table of Contents
# ============
# requirements
# ============
# stdlib
# ======
import os
import sys
import subprocess
import time
# 3rd party
# =========
# nothing besides scons.
# =================
# long commandlines
# =================
# .. : Fix for long command line - http://scons.org/wiki/LongCmdLinesOnWin32
# because of an implementation detail commandlines are limited to 10000 characters on windows using mingw. the following fix was copied from
# http://scons.org/wiki/LongCmdLinesOnWin32 and circumvents this issue.
2012-10-18 18:41:55 -05:00
2012-07-07 13:08:05 -05:00
class ourSpawn :
2012-08-12 12:52:22 -05:00
def ourspawn ( self , sh , escape , cmd , args , env ) :
newargs = ' ' . join ( args [ 1 : ] )
cmdline = cmd + " " + newargs
startupinfo = subprocess . STARTUPINFO ( )
startupinfo . dwFlags | = subprocess . STARTF_USESHOWWINDOW
proc = subprocess . Popen ( cmdline , stdin = subprocess . PIPE , stdout = subprocess . PIPE ,
stderr = subprocess . PIPE , startupinfo = startupinfo , shell = False , env = env )
data , err = proc . communicate ( )
rv = proc . wait ( )
if rv :
print " ===== "
print err
print " ===== "
return rv
2012-07-07 13:08:05 -05:00
def SetupSpawn ( env ) :
2012-08-12 12:52:22 -05:00
if sys . platform == ' win32 ' :
buf = ourSpawn ( )
buf . ourenv = env
env [ ' SPAWN ' ] = buf . ourspawn
2012-07-07 13:08:05 -05:00
2013-05-29 20:37:57 -05:00
# ===================
# commandline options
# ===================
# the following defines all optional commandlines
2012-07-07 13:08:05 -05:00
AddOption ( ' --opengl ' , dest = " opengl " , action = ' store_true ' , default = False , help = " Build with OpenGL interface support. " )
2012-08-06 01:30:25 -05:00
AddOption ( ' --opengl-renderer ' , dest = " opengl-renderer " , action = ' store_true ' , default = False , help = " Build with OpenGL renderer support. (requires --opengl) " )
2012-10-29 04:50:05 -05:00
AddOption ( ' --renderer ' , dest = " renderer " , action = ' store_true ' , default = False , help = " Save renderer " )
2012-08-01 14:36:56 -05:00
AddOption ( ' --64bit ' , dest = " _64bit " , action = ' store_true ' , default = False , help = " 64-bit platform target " )
2012-07-11 15:11:13 -05:00
AddOption ( ' --static ' , dest = " static " , action = " store_true " , default = False , help = " Static linking, reduces external library dependancies but increased file size " )
AddOption ( ' --pthreadw32-static ' , dest = " ptw32-static " , action = " store_true " , default = False , help = " Use PTW32_STATIC_LIB for pthreadw32 headers " )
2013-01-12 18:56:11 -06:00
AddOption ( ' --python-ver ' , dest = " pythonver " , default = False , help = " Python version to use for generator.py " )
2012-07-07 13:08:05 -05:00
AddOption ( ' --release ' , dest = " release " , action = ' store_true ' , default = False , help = " Enable optimisations (Will slow down compiling) " )
2012-07-08 08:03:51 -05:00
AddOption ( ' --lua-dir ' , dest = " lua-dir " , default = False , help = " Directory for lua includes " )
AddOption ( ' --sdl-dir ' , dest = " sdl-dir " , default = False , help = " Directory for SDL includes " )
2012-07-11 15:11:13 -05:00
AddOption ( ' --tool ' , dest = " toolprefix " , default = False , help = " Prefix " )
2012-07-20 15:19:37 -05:00
AddOption ( ' --sse ' , dest = " sse " , action = ' store_true ' , default = False , help = " Enable SSE optimisations " )
AddOption ( ' --sse2 ' , dest = " sse2 " , action = ' store_true ' , default = False , help = " Enable SSE2 optimisations " )
AddOption ( ' --sse3 ' , dest = " sse3 " , action = ' store_true ' , default = False , help = " Enable SSE3 optimisations " )
AddOption ( ' --x86 ' , dest = " x86 " , action = ' store_true ' , default = True , help = " Target Intel x86 platform " )
2013-04-04 09:04:29 -05:00
AddOption ( ' --nofft ' , dest = " nofft " , action = ' store_true ' , default = False , help = " Do not use fftw3f for gravity. " )
2013-05-11 05:52:35 -05:00
AddOption ( ' --nolua ' , dest = " nolua " , action = ' store_true ' , default = False , help = " Disable all lua scripting features. " )
2012-07-20 15:19:37 -05:00
2012-07-28 12:37:49 -05:00
AddOption ( ' --debugging ' , dest = " debug " , action = " store_true " , default = False , help = " Enable debug options " )
2012-07-22 13:33:56 -05:00
AddOption ( ' --beta ' , dest = " beta " , action = ' store_true ' , default = False , help = " Beta build. " )
AddOption ( ' --save-version ' , dest = " save-version " , default = False , help = " Save version. " )
AddOption ( ' --minor-version ' , dest = " minor-version " , default = False , help = " Minor version. " )
AddOption ( ' --build-number ' , dest = " build-number " , default = False , help = " Build number. " )
2012-08-13 09:43:57 -05:00
AddOption ( ' --snapshot ' , dest = " snapshot " , action = ' store_true ' , default = False , help = " Snapshot build. " )
2012-08-13 15:32:08 -05:00
AddOption ( ' --snapshot-id ' , dest = " snapshot-id " , default = False , help = " Snapshot build ID. " )
2013-01-12 18:56:11 -06:00
AddOption ( ' --stable ' , dest = " stable " , default = True , help = " Non snapshot build " )
2012-08-13 12:07:27 -05:00
AddOption ( ' --aao ' , dest = " everythingAtOnce " , action = ' store_true ' , default = False , help = " Compile the whole game without generating intermediate objects (very slow), enable this when using compilers like clang or mscc that don ' t support -fkeep-inline-functions " )
2013-09-24 09:07:22 -05:00
AddOption ( ' --fullclean ' , dest = " justwork " , action = ' store_true ' , default = False , help = " for when nothing else works. Deletes all sconscript temporary files. " )
2013-05-30 17:05:46 -05:00
# using one of these commandline options is compulsory
2013-05-29 20:37:57 -05:00
AddOption ( ' --win ' , dest = " win " , action = ' store_true ' , default = False , help = " Windows platform target. " )
AddOption ( ' --lin ' , dest = " lin " , action = ' store_true ' , default = False , help = " Linux platform target " )
2013-05-30 17:05:46 -05:00
AddOption ( ' --macosx ' , dest = " macosx " , action = ' store_true ' , default = False , help = " Mac OS X platform target " )
AddOption ( ' --rpi ' , dest = " rpi " , action = ' store_true ' , default = False , help = " Raspbain platform target " )
2013-05-29 20:37:57 -05:00
# ============
# main program
# ============
# the gist of the compiling rules are defined here
2013-09-24 09:07:22 -05:00
if ( GetOption ( " justwork " ) ) :
import shutil
try :
shutil . rmtree ( " ../.sconf_temp/ " )
except :
print " couldn ' t remove .sconf_temp "
try :
os . remove ( " ../.sconsign.dblite " )
except :
print " couldn ' t remove .sconsign.dblite "
2013-05-29 20:37:57 -05:00
# platform selection
# ==================
# generic platform settings
# +++++++++++++++++++++++++
# check if a platform is specified.
# .. : TODO: make it suggest commandline options if it isn't
2012-12-31 13:18:56 -06:00
if ( ( not GetOption ( ' lin ' ) ) and ( not GetOption ( ' win ' ) ) and ( not GetOption ( ' rpi ' ) ) and ( not GetOption ( ' macosx ' ) ) ) :
2012-08-12 12:52:22 -05:00
print " You must specify a platform to target "
raise SystemExit ( 1 )
2012-07-07 13:08:05 -05:00
2013-05-29 20:37:57 -05:00
# windows specific platform settings
# ++++++++++++++++++++++++++++++++++
# if the platform is windows switch to a mingw toolset, use the default otherwise
if ( GetOption ( ' win ' ) ) :
env = Environment ( tools = [ ' mingw ' ] , ENV = os . environ )
else :
env = Environment ( tools = [ ' default ' ] , ENV = os . environ )
# macosx specific platform settings
# +++++++++++++++++++++++++++++++++
# if we're not on MACOSX check for headers etc
2012-09-25 11:52:43 -05:00
if not GetOption ( " macosx " ) :
2012-09-25 12:03:58 -05:00
conf = Configure ( env )
2013-05-29 20:37:57 -05:00
# if sdl-dir is set check if we can find the sdl header there, if we can't just pass the header path to the compiler.
2013-05-17 08:30:44 -05:00
if ( GetOption ( " sdl-dir " ) ) :
if not conf . CheckCHeader ( GetOption ( " sdl-dir " ) + ' /SDL.h ' ) :
print " sdl headers not found or not installed "
2013-01-22 14:08:36 -06:00
raise SystemExit ( 1 )
2013-05-17 08:30:44 -05:00
else :
env . Append ( CPPPATH = [ GetOption ( " sdl-dir " ) ] )
else :
2013-05-29 20:37:57 -05:00
# otherwise try to parse the pkg config for sdl and grab the correct flags from there.
2013-05-17 08:30:44 -05:00
try :
env . ParseConfig ( ' sdl-config --cflags ' )
env . ParseConfig ( ' sdl-config --libs ' )
except :
if not conf . CheckLib ( " SDL " ) :
print " libSDL not found or not installed "
2012-09-25 11:52:43 -05:00
raise SystemExit ( 1 )
2013-05-17 08:30:44 -05:00
2012-07-07 13:08:05 -05:00
2013-05-29 20:37:57 -05:00
# if lua is enabled try to parse the lua pgk-config, if that fails try the lua-dir option
# .. : TODO: make this look the same as the SDL check, maybe make a function for it. keep it DRY.
2013-05-11 05:52:35 -05:00
if not GetOption ( " nolua " ) :
try :
env . ParseConfig ( ' pkg-config --cflags lua5.1 ' )
except :
if ( GetOption ( " lua-dir " ) ) :
if not conf . CheckCHeader ( GetOption ( " lua-dir " ) + ' /lua.h ' ) :
print " lua5.1 headers not found or not installed "
raise SystemExit ( 1 )
else :
env . Append ( CPPPATH = [ GetOption ( " lua-dir " ) ] )
2012-07-07 13:08:05 -05:00
2013-05-29 20:37:57 -05:00
# if fft is enabled try to parse its config, fail otherwise.
2013-04-09 18:36:42 -05:00
if not GetOption ( ' nofft ' ) :
2013-05-29 20:37:57 -05:00
# Check for FFT lib
2013-04-09 18:36:42 -05:00
if not conf . CheckLib ( ' fftw3f ' ) and not conf . CheckLib ( ' fftw3f-3 ' ) :
print " libfftw3f not found or not installed "
raise SystemExit ( 1 )
2012-07-07 13:08:05 -05:00
2013-05-29 20:37:57 -05:00
# try to autodetect some libraries, fail otherwise
2012-09-25 12:03:58 -05:00
#Check for Bzip lib
if not conf . CheckLib ( ' bz2 ' ) :
print " libbz2 not found or not installed "
raise SystemExit ( 1 )
2012-08-11 14:24:48 -05:00
2012-09-25 12:03:58 -05:00
#Check for zlib
if not conf . CheckLib ( ' z ' ) :
print " libz not found or not installed "
raise SystemExit ( 1 )
2012-08-09 15:32:04 -05:00
2012-09-25 12:03:58 -05:00
if not conf . CheckCHeader ( " bzlib.h " ) :
print " bzip2 headers not found "
2012-09-25 11:53:48 -05:00
raise SystemExit ( 1 )
2012-07-07 13:08:05 -05:00
2012-09-25 12:03:58 -05:00
#Check for Lua lib
2013-05-29 20:37:57 -05:00
if not GetOption ( " nolua " ) :
2013-01-03 09:14:24 -06:00
if not conf . CheckLib ( ' lua5.1 ' ) and not conf . CheckLib ( ' lua-5.1 ' ) and not conf . CheckLib ( ' lua51 ' ) and not conf . CheckLib ( ' lua ' ) :
2012-09-25 12:03:58 -05:00
print " liblua not found or not installed "
raise SystemExit ( 1 )
2013-05-29 20:37:57 -05:00
# finish the configuration
2012-09-25 12:03:58 -05:00
env = conf . Finish ( ) ;
else :
2013-05-29 20:37:57 -05:00
# if we ARE on macosx add the libraries to LIBS
# .. : seems like we're terrible at mac support? what gives?
2013-04-04 09:04:29 -05:00
env . Append ( LIBS = [ ' z ' , ' bz2 ' ] )
if not GetOption ( ' nofft ' ) :
env . Append ( LIBS = [ ' fftw3f ' ] )
2012-07-07 13:08:05 -05:00
2013-05-29 20:37:57 -05:00
# enviroment setup
# ================
# add the correct compiler flags.
# generic enviroment settings
# +++++++++++++++++++++++++++
2013-05-30 17:05:46 -05:00
# check if a tool prefix is set, and if it is select the propper tools for building.
# .. : TODO someone explain wtf this actually does
if GetOption ( " toolprefix " ) :
env [ ' CC ' ] = GetOption ( " toolprefix " ) + env [ ' CC ' ]
env [ ' CXX ' ] = GetOption ( " toolprefix " ) + env [ ' CXX ' ]
if GetOption ( ' win ' ) :
env [ ' RC ' ] = GetOption ( " toolprefix " ) + env [ ' RC ' ]
2013-05-29 20:37:57 -05:00
# make sure the compiler can find the source data and generated files. enable warnings, set C++ flavor, and keep inline functions
2012-07-08 08:03:51 -05:00
env . Append ( CPPPATH = [ ' src/ ' , ' data/ ' , ' generated/ ' ] )
2012-10-20 12:06:53 -05:00
env . Append ( CCFLAGS = [ ' -w ' , ' -std=c++98 ' , ' -fkeep-inline-functions ' ] )
2012-08-09 15:32:04 -05:00
env . Append ( LIBS = [ ' pthread ' , ' m ' ] )
2013-05-11 05:52:35 -05:00
env . Append ( CPPDEFINES = [ " _GNU_SOURCE " , " USE_STDINT " , " _POSIX_C_SOURCE=200112L " ] )
2013-05-29 20:37:57 -05:00
# check all enabled libs, and add a define if they are enabled.
2013-04-04 09:04:29 -05:00
if not GetOption ( ' nofft ' ) :
env . Append ( CPPDEFINES = [ " GRAVFFT " ] )
2013-05-11 05:52:35 -05:00
if not GetOption ( ' nolua ' ) :
2013-05-13 13:26:20 -05:00
env . Append ( CPPDEFINES = [ " LUACONSOLE " ] )
2013-05-29 20:37:57 -05:00
# check if we need to use PTW32_STATIC_LIB for pthreadw32 headers, won't compile statically without this
2012-07-11 15:11:13 -05:00
if GetOption ( " ptw32-static " ) :
2012-08-12 12:52:22 -05:00
env . Append ( CPPDEFINES = [ ' PTW32_STATIC_LIB ' ] ) ;
2012-07-11 15:11:13 -05:00
2013-05-29 20:37:57 -05:00
# check if we need to do static linking.
2012-07-11 15:11:13 -05:00
if ( GetOption ( ' static ' ) ) :
2013-08-11 15:29:10 -05:00
env . Append ( LINKFLAGS = [ ' -static-libgcc ' ] )
2012-07-07 13:08:05 -05:00
2013-05-29 20:37:57 -05:00
# check if we need to compile the save renderer. add a define accordingly. compile the game by default.
2012-10-29 04:50:05 -05:00
if ( GetOption ( ' renderer ' ) ) :
env . Append ( CPPDEFINES = [ ' RENDERER ' ] )
2012-10-29 04:59:07 -05:00
else :
env . Append ( CPPDEFINES = [ " USE_SDL " ] )
2012-10-29 04:50:05 -05:00
2013-05-29 20:37:57 -05:00
# apply optimisations if it's a release build
if ( GetOption ( ' release ' ) ) :
if GetOption ( ' macosx ' ) :
env . Append ( CCFLAGS = [ ' -O3 ' , ' -ftree-vectorize ' , ' -funsafe-math-optimizations ' , ' -ffast-math ' , ' -fomit-frame-pointer ' ] )
else :
env . Append ( CCFLAGS = [ ' -O3 ' , ' -ftree-vectorize ' , ' -funsafe-math-optimizations ' , ' -ffast-math ' , ' -fomit-frame-pointer ' , ' -funsafe-loop-optimizations ' , ' -Wunsafe-loop-optimizations ' ] )
# rpi specific enviroment settings
# ++++++++++++++++++++++++++++++++
# check if we're compiling for raspberry pi, if we are include rpi specific libraries and defines.
2012-12-31 13:18:56 -06:00
if ( GetOption ( ' rpi ' ) ) :
if ( GetOption ( ' opengl ' ) ) :
env . ParseConfig ( ' pkg-config --libs glew gl glu ' )
openGLLibs = [ ' GL ' ]
env . Append ( LIBS = [ ' X11 ' , ' rt ' ] )
env . Append ( CPPDEFINES = [ " LIN " ] )
2013-05-29 20:37:57 -05:00
# windows specific enviroment settings
# ++++++++++++++++++++++++++++++++++++
# check if we're compiling for windows, if we are include windows specific libraries and defines.
2012-07-29 11:14:14 -05:00
if ( GetOption ( ' win ' ) ) :
2012-08-12 12:52:22 -05:00
openGLLibs = [ ' opengl32 ' , ' glew32 ' ]
2013-08-22 08:52:32 -05:00
env . Prepend ( LIBS = [ ' mingw32 ' , ' ws2_32 ' , ' SDLmain ' , ' SDL ' ] )
2012-10-20 12:12:54 -05:00
env . Append ( CCFLAGS = [ ' -std=gnu++98 ' ] )
2012-08-12 12:52:22 -05:00
env . Append ( LIBS = [ ' winmm ' , ' gdi32 ' ] )
env . Append ( CPPDEFINES = [ " WIN " ] )
env . Append ( LINKFLAGS = [ ' -mwindows ' ] )
if ( GetOption ( ' _64bit ' ) ) :
env . Append ( CPPDEFINES = [ ' __CRT__NO_INLINE ' ] )
env . Append ( LINKFLAGS = [ ' -Wl,--stack=16777216 ' ] )
2013-05-29 20:37:57 -05:00
# linux specific enviroment settings
# ++++++++++++++++++++++++++++++++++++
# check if we're compiling for linux, if we are include linux specific libraries and defines.
2012-08-01 14:28:43 -05:00
if ( GetOption ( ' lin ' ) ) :
2012-08-12 12:52:22 -05:00
if ( GetOption ( ' opengl ' ) ) :
env . ParseConfig ( ' pkg-config --libs glew gl glu ' )
openGLLibs = [ ' GL ' ]
env . Append ( LIBS = [ ' X11 ' , ' rt ' ] )
2013-01-18 13:37:24 -06:00
env . Append ( CPPDEFINES = [ " LIN " ] )
2012-08-12 12:52:22 -05:00
if GetOption ( ' _64bit ' ) :
2012-12-25 14:42:29 -06:00
env . Append ( LINKFLAGS = [ ' -m64 ' ] )
2012-08-12 12:52:22 -05:00
env . Append ( CCFLAGS = [ ' -m64 ' ] )
else :
env . Append ( LINKFLAGS = [ ' -m32 ' ] )
env . Append ( CCFLAGS = [ ' -m32 ' ] )
2013-05-29 20:37:57 -05:00
# macosx specific enviroment settings
# ++++++++++++++++++++++++++++++++++++
# check if we're compiling for macosx, if we are include macosx specific libraries and defines.
2012-09-25 07:44:24 -05:00
if ( GetOption ( ' macosx ' ) ) :
env . Append ( CPPDEFINES = [ " MACOSX " ] )
2012-09-25 11:53:48 -05:00
env . Append ( CCFLAGS = [ ' -I/Library/Frameworks/SDL.framework/Headers ' ] )
env . Append ( CCFLAGS = [ ' -I/Library/Frameworks/Lua.framework/Headers ' ] )
2013-04-04 09:04:29 -05:00
if not GetOption ( ' nofft ' ) :
env . Append ( LINKFLAGS = [ ' -lfftw3f ' ] )
2012-09-25 11:53:48 -05:00
env . Append ( LINKFLAGS = [ ' -framework ' ] )
env . Append ( LINKFLAGS = [ ' SDL ' ] )
env . Append ( LINKFLAGS = [ ' -framework ' ] )
env . Append ( LINKFLAGS = [ ' Lua ' ] )
env . Append ( LINKFLAGS = [ ' -framework ' ] ) ;
env . Append ( LINKFLAGS = [ ' Cocoa ' ] )
#env.Append(LINKFLAGS=['-framework SDL'])
#env.Append(LINKFLAGS=['-framework Lua'])
#env.Append(LINKFLAGS=['-framework Cocoa'])
if GetOption ( ' _64bit ' ) :
2012-12-25 14:42:29 -06:00
env . Append ( LINKFLAGS = [ ' -m64 ' ] )
2012-09-25 11:53:48 -05:00
env . Append ( CCFLAGS = [ ' -m64 ' ] )
else :
env . Append ( LINKFLAGS = [ ' -m32 ' ] )
env . Append ( CCFLAGS = [ ' -m32 ' ] )
2012-07-07 13:08:05 -05:00
2013-05-29 20:37:57 -05:00
# defines
# =======
# A lot of commandline flags translate directly into defines. those flags follow:
2012-07-29 12:33:01 -05:00
if GetOption ( ' _64bit ' ) :
2012-08-12 12:52:22 -05:00
env . Append ( CPPDEFINES = [ " _64BIT " ] )
2012-07-29 12:33:01 -05:00
2012-07-22 13:33:56 -05:00
if ( GetOption ( ' beta ' ) ) :
2012-08-12 12:52:22 -05:00
env . Append ( CPPDEFINES = ' BETA ' )
2012-07-22 13:33:56 -05:00
2013-01-12 18:56:11 -06:00
if ( not GetOption ( ' snapshot ' ) and not GetOption ( ' beta ' ) and not GetOption ( ' release ' ) and not GetOption ( ' stable ' ) ) :
2012-08-13 09:43:57 -05:00
env . Append ( CPPDEFINES = ' SNAPSHOT_ID=0 ' )
env . Append ( CPPDEFINES = ' SNAPSHOT ' )
2012-08-13 15:32:08 -05:00
elif ( GetOption ( ' snapshot ' ) or GetOption ( ' snapshot-id ' ) ) :
if ( GetOption ( ' snapshot-id ' ) ) :
env . Append ( CPPDEFINES = [ ' SNAPSHOT_ID= ' + GetOption ( ' snapshot-id ' ) ] )
else :
env . Append ( CPPDEFINES = [ ' SNAPSHOT_ID= ' + str ( int ( time . time ( ) ) ) ] )
2012-08-12 12:52:22 -05:00
env . Append ( CPPDEFINES = ' SNAPSHOT ' )
2013-01-12 18:56:11 -06:00
elif ( GetOption ( ' stable ' ) ) :
env . Append ( CPPDEFINES = ' STABLE ' )
2012-07-22 13:33:56 -05:00
if ( GetOption ( ' save-version ' ) ) :
2012-09-02 09:08:03 -05:00
env . Append ( CPPDEFINES = [ ' SAVE_VERSION= ' + GetOption ( ' save-version ' ) ] )
2012-07-22 13:33:56 -05:00
if ( GetOption ( ' minor-version ' ) ) :
2012-08-12 12:52:22 -05:00
env . Append ( CPPDEFINES = [ ' MINOR_VERSION= ' + GetOption ( ' minor-version ' ) ] )
2012-07-07 13:08:05 -05:00
2012-09-02 09:08:03 -05:00
if ( GetOption ( ' build-number ' ) ) :
env . Append ( CPPDEFINES = [ ' BUILD_NUM= ' + GetOption ( ' build-number ' ) ] )
2012-07-20 15:19:37 -05:00
if ( GetOption ( ' x86 ' ) ) :
2012-08-12 12:52:22 -05:00
env . Append ( CPPDEFINES = ' X86 ' )
2012-07-20 15:19:37 -05:00
2012-07-28 12:37:49 -05:00
if ( GetOption ( ' debug ' ) ) :
2012-08-12 12:52:22 -05:00
env . Append ( CPPDEFINES = ' DEBUG ' )
env . Append ( CCFLAGS = ' -g ' )
2012-07-28 12:37:49 -05:00
2012-07-20 15:19:37 -05:00
if ( GetOption ( ' sse ' ) ) :
2012-08-12 12:52:22 -05:00
env . Append ( CCFLAGS = ' -msse ' )
env . Append ( CPPDEFINES = ' X86_SSE ' )
2012-07-20 15:19:37 -05:00
if ( GetOption ( ' sse2 ' ) ) :
2012-08-12 12:52:22 -05:00
env . Append ( CCFLAGS = ' -msse2 ' )
env . Append ( CPPDEFINES = ' X86_SSE2 ' )
2012-07-20 15:19:37 -05:00
if ( GetOption ( ' sse3 ' ) ) :
2012-08-12 12:52:22 -05:00
env . Append ( CCFLAGS = ' -msse3 ' )
env . Append ( CPPDEFINES = ' X86_SSE3 ' )
2012-07-07 13:08:05 -05:00
if ( GetOption ( ' opengl ' ) ) :
2012-08-12 12:52:22 -05:00
env . Append ( CPPDEFINES = [ " OGLI " , " PIX32OGL " ] )
env . Append ( LIBS = openGLLibs )
2012-07-07 13:08:05 -05:00
2012-08-02 09:31:40 -05:00
if ( GetOption ( ' opengl ' ) and GetOption ( ' opengl-renderer ' ) ) :
2012-08-12 12:52:22 -05:00
env . Append ( CPPDEFINES = [ " OGLR " ] )
2012-07-07 13:08:05 -05:00
elif ( GetOption ( ' opengl-renderer ' ) ) :
2012-08-12 12:52:22 -05:00
print " opengl-renderer requires opengl "
raise SystemExit ( 1 )
2012-07-07 13:08:05 -05:00
2013-05-29 20:37:57 -05:00
# compiling
# =========
# sources
# +++++++
# find all source files
# generic sources
# ---------------
2012-07-07 13:08:05 -05:00
sources = Glob ( " src/*.cpp " )
2013-05-29 20:37:57 -05:00
2012-07-07 13:08:05 -05:00
sources + = Glob ( " src/*/*.cpp " )
2013-03-22 09:26:24 -05:00
sources + = Glob ( " src/gui/*/*.cpp " )
2012-07-07 13:08:05 -05:00
sources + = Glob ( " src/simulation/elements/*.cpp " )
sources + = Glob ( " src/simulation/tools/*.cpp " )
2013-03-14 06:30:24 -05:00
sources + = Glob ( " src/client/requestbroker/*.cpp " )
2013-05-11 05:52:35 -05:00
if not GetOption ( ' nolua ' ) :
sources + = Glob ( " src/socket/*.c " )
2012-07-23 14:58:38 -05:00
2013-05-29 20:37:57 -05:00
# windows specific sources
# ------------------------
2013-01-22 14:08:36 -06:00
2012-09-02 09:08:03 -05:00
if ( GetOption ( ' win ' ) ) :
2013-05-29 20:37:57 -05:00
sources + = env . RES ( ' resources/powder-res.rc ' )
sources = filter ( lambda source : not ' src \\ simulation \\ Gravity.cpp ' in str ( source ) , sources )
sources = filter ( lambda source : not ' src/simulation/Gravity.cpp ' in str ( source ) , sources )
# macosx specific sources
# -----------------------
if ( GetOption ( ' macosx ' ) ) :
sources + = [ " SDLMain.m " ]
# apply `long commandlines`_ fix
# ==============================
# apply the commandline fix
2012-07-07 13:08:05 -05:00
SetupSpawn ( env )
2013-05-29 20:37:57 -05:00
# find proper executable name
# ===========================
# use some settings to detect what name to use for the executable
2012-07-23 05:49:58 -05:00
programName = " powder "
2012-10-29 05:13:15 -05:00
if ( GetOption ( ' renderer ' ) ) :
2012-10-29 05:10:43 -05:00
programName = " render "
2012-07-29 11:14:14 -05:00
if ( GetOption ( ' win ' ) ) :
2012-10-29 05:13:15 -05:00
if ( GetOption ( ' renderer ' ) ) :
2012-10-29 05:10:43 -05:00
programName = " Render "
2012-10-29 05:14:51 -05:00
else :
2012-10-29 05:10:43 -05:00
programName = " Powder "
2012-07-23 05:49:58 -05:00
2012-07-29 10:55:26 -05:00
if ( GetOption ( ' _64bit ' ) ) :
2012-08-12 12:52:22 -05:00
programName + = " 64 "
2012-07-23 05:49:58 -05:00
if ( not ( GetOption ( ' sse2 ' ) or GetOption ( ' sse3 ' ) ) ) :
2012-08-12 12:52:22 -05:00
programName + = " -legacy "
2012-07-23 05:49:58 -05:00
if ( GetOption ( ' macosx ' ) ) :
2012-08-12 12:52:22 -05:00
programName + = " -x "
2012-07-23 05:49:58 -05:00
2012-07-29 11:14:14 -05:00
if ( GetOption ( ' win ' ) ) :
2012-08-12 12:52:22 -05:00
programName + = " .exe "
2012-07-23 05:49:58 -05:00
2012-08-13 12:07:27 -05:00
2013-05-29 20:37:57 -05:00
# detect python executable name
# =============================
# detect the executable name for python so we can run some generator scripts
2013-01-12 18:56:11 -06:00
if ( GetOption ( ' pythonver ' ) ) :
pythonVer = GetOption ( ' pythonver ' )
elif ( GetOption ( ' lin ' ) ) :
2012-12-31 13:23:22 -06:00
pythonVer = " python2 "
else :
pythonVer = " python "
2013-05-29 20:37:57 -05:00
# Extra compiler flag to fix stack alignment
# When Windows creates the gravity calculation thread, it has 4 byte stack alignment
# But we need 16 byte alignment so that SSE instructions in FFTW work without crashing
2012-09-02 09:08:03 -05:00
if ( GetOption ( ' win ' ) ) :
2013-05-29 20:37:57 -05:00
envCopy = env . Clone ( )
2013-06-01 10:55:10 -05:00
envCopy . Append ( CCFLAGS = [ ' -mstackrealign ' ] )
#envCopy.Append(CCFLAGS=['-mincoming-stack-boundary=2'])
2013-05-29 20:37:57 -05:00
sources + = envCopy . Object ( ' src/simulation/Gravity.cpp ' )
# run generator commands
# ======================
2012-09-02 09:08:03 -05:00
2012-12-31 13:23:22 -06:00
env . Command ( [ ' generated/ElementClasses.cpp ' , ' generated/ElementClasses.h ' ] , Glob ( ' src/simulation/elements/*.cpp ' ) , pythonVer + " generator.py elements $TARGETS $SOURCES " )
2012-10-06 13:38:50 -05:00
sources + = Glob ( " generated/ElementClasses.cpp " )
2012-12-31 13:23:22 -06:00
env . Command ( [ ' generated/ToolClasses.cpp ' , ' generated/ToolClasses.h ' ] , Glob ( ' src/simulation/tools/*.cpp ' ) , pythonVer + " generator.py tools $TARGETS $SOURCES " )
2012-10-06 13:38:50 -05:00
sources + = Glob ( " generated/ToolClasses.cpp " )
2013-05-29 20:37:57 -05:00
# final settings
# ==============
# make a MD5 checksum decide wether or not a file changed. we had some problems with using the modification date for this purpose.
2012-09-02 09:08:03 -05:00
env . Decider ( ' MD5 ' )
2013-05-29 20:37:57 -05:00
# set a defaukt target
2012-10-20 11:57:06 -05:00
t = env . Program ( target = programName , source = sources )
2012-10-02 15:43:58 -05:00
Default ( t )