dolphin/SConstruct

174 lines
3.9 KiB
Python

# -*- python -*-
import os
import sys
# TODO: how do we use it in help?
name="Dolphin"
version="SVN"
description="A wii/gamecube emulator"
license="GPL v2"
warnings = [
'all',
'write-strings',
'shadow',
'pointer-arith',
'packed',
'no-conversion',
]
compileFlags = [
'-fno-exceptions',
'-fno-strict-aliasing',
'-msse2',
'-fvisibility=hidden',
# '-fomit-frame-pointer'
]
cppDefines = [
( '_FILE_OFFSET_BITS', 64),
'_LARGEFILE_SOURCE',
'GCC_HASCLASSVISIBILITY',
]
if sys.platform == 'darwin':
compileFlags += [ '-I/opt/local/include' ]
include_paths = [
'../../../Core/Common/Src',
'../../../Core/DiscIO/Src',
'../../../PluginSpecs',
'../../../',
'../../../Core/Core/Src',
'../../../Core/DebuggerWX/src',
'../../../../Externals/Bochs_disasm',
'../../../../Externals/LZO',
'../../../Core/VideoCommon/Src',
]
dirs = [
'Source/Core/Common/Src',
'Externals/Bochs_disasm',
'Externals/LZO',
'Source/Core/Core/Src',
'Source/Core/DiscIO/Src',
'Source/Core/DebuggerWX/src',
'Source/Core/VideoCommon/Src',
'Source/Plugins/Plugin_VideoOGL/Src',
'Source/Plugins/Plugin_DSP_HLE/Src',
'Source/Plugins/Plugin_DSP_LLE/Src',
'Source/Plugins/Plugin_PadSimple/Src',
'Source/Plugins/Plugin_nJoy_SDL/Src',
'Source/Plugins/Plugin_Wiimote_Test/Src',
'Source/Core/DolphinWX/Src',
]
builders = {}
if sys.platform == 'darwin':
from plistlib import writePlist
def createPlist(target, source, env):
properties = {}
for srcNode in source:
properties.update(srcNode.value)
for dstNode in target:
writePlist(properties, str(dstNode))
builders['Plist'] = Builder(action = createPlist)
lib_paths = include_paths
# handle command line options
vars = Variables('custom.py')
vars.AddVariables(
BoolVariable('verbose', 'Set for compilation line', False),
BoolVariable('debug', 'Set for debug build', False),
BoolVariable('lint', 'Set for lint build (extra warnings)', False),
BoolVariable('nowx', 'Set For Building with no WX libs', False),
EnumVariable('flavor', 'Choose a build flavor', 'release',
allowed_values=('release', 'devel', 'debug'),
ignorecase=2)
)
# build falvuor
flavour = ARGUMENTS.get('flavor')
if (flavour == 'debug'):
compileFlags.append('-g')
cppDefines.append('LOGGING')
else:
compileFlags.append('-O3')
# more warnings
lint = ARGUMENTS.get('lint', False)
if bool(lint):
warnings.append('error')
warnings.append('unreachable-code')
warnings.append('float-equal')
nowx = ARGUMENTS.get('nowx', 0)
if int(nowx):
WxCppFlags = ''
WxLibFlags = ''
else:
WxCppFlags = os.popen('wx-config --cppflags').read()
if WxCppFlags[-1] == "\n":
WxCppFlags = WxCppFlags[:-1]
WxLibFlags = os.popen('wx-config --libs').read()
if WxLibFlags[-1] == "\n":
WxLibFlags = WxLibFlags[:-1]
compileFlags += [ '-W' + warning for warning in warnings ]
env = Environment(
CC = 'gcc',
CXX = 'g++',
CCFLAGS = ' '.join(compileFlags),
CXXFLAGS = ' '.join(compileFlags + [ '-fvisibility-inlines-hidden' ]),
CPPDEFINES = cppDefines,
CPPPATH = include_paths,
LIBPATH = lib_paths,
variables = vars,
WXCPPFLAGS = WxCppFlags,
WXLIBFLAGS = WxLibFlags,
ENV = {
'PATH' : os.environ['PATH'],
'HOME' : os.environ['HOME']
},
BUILDERS = builders,
DESCRIPTION = description,
SUMMARY = description,
LICENSE = license,
NAME = name,
VERSION = version,
)
# verbose compile
verbose = ARGUMENTS.get('verbose', False)
if not bool(verbose):
env['CCCOMSTR'] = "Compiling $TARGET"
env['CXXCOMSTR'] = "Compiling $TARGET"
env['ARCOMSTR'] = " ar $TARGET"
env['LINKCOMSTR'] = "Linking $TARGET"
Export('env')
Progress(['-\r', '\\\r', '|\r', '/\r'], interval=5)
# die on unknown variables
unknown = vars.UnknownVariables()
if unknown:
print "Unknown variables:", unknown.keys()
Exit(1)
#generate help
Help(vars.GenerateHelpText(env))
for subdir in dirs:
SConscript(
subdir + os.sep + 'SConscript',
duplicate = 0
)