Files
dolphin/SConstruct
T

440 lines
12 KiB
Python
Raw Normal View History

# -*- python -*-
2008-07-12 17:40:22 +00:00
import os
import sys
2008-11-13 08:12:48 +00:00
import platform
2008-07-12 17:40:22 +00:00
2008-09-21 13:13:20 +00:00
# Home made tests
sys.path.append('SconsTests')
import wxconfig
2008-09-21 19:54:29 +00:00
import utils
2008-09-21 13:13:20 +00:00
2008-09-21 16:09:59 +00:00
# Some features needs at least scons 0.98
2009-06-08 14:36:00 +00:00
EnsureSConsVersion(1, 2)
2008-09-21 13:13:20 +00:00
# TODO: how do we use it in help?
name="Dolphin"
version="SVN"
description="A wii/gamecube emulator"
license="GPL v2"
warnings = [
2008-10-05 18:49:55 +00:00
'all',
'write-strings',
'shadow',
'pointer-arith',
'packed',
'no-conversion',
]
compileFlags = [
2008-10-05 18:49:55 +00:00
'-fno-exceptions',
'-fno-strict-aliasing',
'-msse2',
#'-fomit-frame-pointer'
]
2009-03-09 00:36:59 +00:00
if sys.platform != 'win32':
compileFlags += [ '-fvisibility=hidden' ]
2008-09-18 10:04:03 +00:00
cppDefines = [
2008-10-05 18:49:55 +00:00
( '_FILE_OFFSET_BITS', 64),
'_LARGEFILE_SOURCE',
'GCC_HASCLASSVISIBILITY',
]
2009-04-12 21:30:22 +00:00
basedir = os.getcwd()+ '/'
include_paths = [
2009-04-12 21:30:22 +00:00
basedir + 'Source/Core/Common/Src',
basedir + 'Source/Core/DiscIO/Src',
basedir + 'Source/PluginSpecs',
basedir + 'Source/Core/Core/Src',
basedir + 'Source/Core/DebuggerWX/Src',
basedir + 'Externals/Bochs_disasm',
basedir + 'Externals/LZO',
basedir + 'Externals/SOIL',
basedir + 'Externals/Lua',
2009-04-12 21:30:22 +00:00
basedir + 'Externals/WiiUseSrc/Src',
basedir + 'Source/Core/VideoCommon/Src',
basedir + 'Source/Core/InputCommon/Src',
basedir + 'Source/Core/AudioCommon/Src',
2009-07-08 08:29:22 +00:00
basedir + 'Source/Core/DebuggerUICommon/Src',
2009-04-12 21:30:22 +00:00
basedir + 'Source/Core/DSPCore/Src',
2008-10-05 18:49:55 +00:00
]
2008-07-12 17:40:22 +00:00
dirs = [
2008-10-05 18:49:55 +00:00
'Externals/Bochs_disasm',
'Externals/LZO',
'Externals/SOIL',
'Externals/Lua',
2008-12-05 13:46:19 +00:00
'Externals/WiiUseSrc/Src',
2008-11-19 10:22:29 +00:00
'Source/Core/Common/Src',
2008-10-05 18:49:55 +00:00
'Source/Core/Core/Src',
'Source/Core/DiscIO/Src',
'Source/Core/VideoCommon/Src',
2009-01-04 19:54:56 +00:00
'Source/Core/InputCommon/Src',
2009-04-08 13:42:30 +00:00
'Source/Core/AudioCommon/Src',
2009-07-08 08:29:22 +00:00
'Source/Core/DebuggerUICommon/Src',
2009-04-12 19:56:59 +00:00
'Source/Core/DSPCore/Src',
2009-04-12 21:30:22 +00:00
'Source/DSPTool/Src',
2008-10-05 18:49:55 +00:00
'Source/Plugins/Plugin_VideoOGL/Src',
'Source/Plugins/Plugin_DSP_HLE/Src',
2009-04-08 20:21:07 +00:00
'Source/Plugins/Plugin_DSP_LLE/Src',
2008-10-05 18:49:55 +00:00
'Source/Plugins/Plugin_PadSimple/Src',
2008-12-26 09:20:01 +00:00
'Source/Plugins/Plugin_PadSimpleEvnt/Src',
2009-02-09 21:19:35 +00:00
'Source/Plugins/Plugin_nJoy_SDL/Src',
2009-02-03 22:06:18 +00:00
'Source/Plugins/Plugin_Wiimote/Src',
2008-10-05 18:49:55 +00:00
'Source/Core/DolphinWX/Src',
2008-12-05 13:46:19 +00:00
'Source/Core/DebuggerWX/Src',
2008-10-05 18:49:55 +00:00
]
builders = {}
if sys.platform == 'darwin':
2008-10-05 18:49:55 +00:00
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)
# handle command line options
vars = Variables('args.cache')
2008-12-10 18:33:13 +00:00
vars.AddVariables(
2008-10-05 18:49:55 +00:00
BoolVariable('verbose', 'Set for compilation line', False),
2008-11-13 10:04:10 +00:00
BoolVariable('bundle', 'Set to create bundle', False),
2008-10-05 18:49:55 +00:00
BoolVariable('lint', 'Set for lint build (extra warnings)', False),
BoolVariable('nowx', 'Set For Building with no WX libs (WIP)', False),
2008-12-10 23:39:59 +00:00
BoolVariable('wxgl', 'Set For Building with WX GL libs (WIP)', False),
2008-12-13 23:19:56 +00:00
BoolVariable('sdlgl', 'Set For Building with SDL GL libs (WIP)', False),
BoolVariable('gltest', 'temp don\'t use (WIP)', False),
BoolVariable('jittest', 'temp don\'t use (WIP)', False),
BoolVariable('nojit', 'Remove entire jit cores', False),
2008-10-05 18:49:55 +00:00
EnumVariable('flavor', 'Choose a build flavor', 'release',
2009-01-04 10:20:38 +00:00
allowed_values = ('release', 'devel', 'debug', 'fastlog', 'prof'),
2008-10-05 18:49:55 +00:00
ignorecase = 2
2008-11-30 22:05:43 +00:00
),
2008-12-10 23:23:05 +00:00
EnumVariable('osx', 'Choose a backend (WIP)', '32cocoa',
allowed_values = ('32x11', '32cocoa', '64cocoa'),
2008-12-10 18:33:13 +00:00
ignorecase = 2
),
2008-12-09 23:47:18 +00:00
PathVariable('wxconfig', 'Path to the wxconfig', None),
2008-11-30 22:05:43 +00:00
('CC', 'The c compiler', 'gcc'),
('CXX', 'The c++ compiler', 'g++'),
2008-10-05 18:49:55 +00:00
)
2009-03-09 00:36:59 +00:00
if sys.platform == 'win32':
env = Environment(
CPPPATH = include_paths,
RPATH = [],
LIBS = [],
2009-04-12 21:30:22 +00:00
LIBPATH = [],
2009-03-09 00:36:59 +00:00
tools = [ 'mingw' ],
variables = vars,
ENV = os.environ,
BUILDERS = builders,
DESCRIPTION = description,
SUMMARY = description,
LICENSE = license,
NAME = name,
VERSION = version,
)
else:
env = Environment(
CPPPATH = include_paths,
RPATH = [],
LIBS = [],
2009-04-12 21:30:22 +00:00
LIBPATH = [],
variables = vars,
2009-03-09 00:36:59 +00:00
ENV = {
'PATH' : os.environ['PATH'],
'HOME' : os.environ['HOME']
2008-10-05 18:49:55 +00:00
},
2009-03-09 00:36:59 +00:00
BUILDERS = builders,
DESCRIPTION = description,
SUMMARY = description,
LICENSE = license,
NAME = name,
VERSION = version,
)
2008-07-12 17:40:22 +00:00
2008-09-21 19:54:29 +00:00
# save the given command line options
vars.Save('args.cache', env)
# verbose compile
2008-09-20 22:06:22 +00:00
if not env['verbose']:
2008-10-05 18:49:55 +00:00
env['CCCOMSTR'] = "Compiling $TARGET"
env['CXXCOMSTR'] = "Compiling $TARGET"
env['ARCOMSTR'] = "Archiving $TARGET"
env['LINKCOMSTR'] = "Linking $TARGET"
env['ASCOMSTR'] = "Assembling $TARGET"
env['ASPPCOMSTR'] = "Assembling $TARGET"
env['SHCCCOMSTR'] = "Compiling shared $TARGET"
env['SHCXXCOMSTR'] = "Compiling shared $TARGET"
env['SHLINKCOMSTR'] = "Linking shared $TARGET"
env['RANLIBCOMSTR'] = "Indexing $TARGET"
2008-09-21 19:54:29 +00:00
2008-09-20 22:06:22 +00:00
# build falvuor
2008-09-23 00:24:28 +00:00
flavour = ARGUMENTS.get('flavor')
2008-09-20 22:06:22 +00:00
if (flavour == 'debug'):
2008-10-05 18:49:55 +00:00
compileFlags.append('-g')
2009-03-05 16:26:05 +00:00
cppDefines.append('_DEBUG') #enables LOGGING
2008-12-19 09:36:27 +00:00
# FIXME: this disable wx debugging how do we make it work?
cppDefines.append('NDEBUG')
2008-09-24 17:39:15 +00:00
elif (flavour == 'devel'):
2008-10-05 18:49:55 +00:00
compileFlags.append('-g')
2008-12-18 00:37:24 +00:00
elif (flavour == 'fastlog'):
compileFlags.append('-O3')
2009-03-05 16:26:05 +00:00
cppDefines.append('DEBUGFAST')
2009-01-04 10:20:38 +00:00
elif (flavour == 'prof'):
compileFlags.append('-O3')
compileFlags.append('-g')
elif (flavour == 'release'):
2008-10-05 18:49:55 +00:00
compileFlags.append('-O3')
2008-09-20 22:06:22 +00:00
# more warnings
if env['lint']:
2008-10-05 18:49:55 +00:00
warnings.append('error')
warnings.append('unreachable-code')
warnings.append('float-equal')
2008-09-20 22:06:22 +00:00
# add the warnings to the compile flags
compileFlags += [ '-W' + warning for warning in warnings ]
env['CCFLAGS'] = compileFlags
2009-03-09 00:36:59 +00:00
if sys.platform == 'win32':
env['CXXFLAGS'] = compileFlags
else:
env['CXXFLAGS'] = compileFlags + [ '-fvisibility-inlines-hidden' ]
2008-09-20 22:06:22 +00:00
env['CPPDEFINES'] = cppDefines
2008-09-21 13:13:20 +00:00
# Configuration tests section
2008-09-24 17:39:15 +00:00
tests = {'CheckWXConfig' : wxconfig.CheckWXConfig,
'CheckPKGConfig' : utils.CheckPKGConfig,
'CheckPKG' : utils.CheckPKG,
2009-03-03 20:14:39 +00:00
'CheckSDL' : utils.CheckSDL,
2009-03-03 22:34:32 +00:00
'CheckFink' : utils.CheckFink,
'CheckMacports' : utils.CheckMacports,
2009-03-03 20:14:39 +00:00
'CheckPortaudio' : utils.CheckPortaudio,
}
2008-09-23 00:24:28 +00:00
2009-04-12 21:30:22 +00:00
#object files
env['build_dir'] = os.path.join(basedir, 'Build', platform.system() + '-' + platform.machine() + '-' + env['flavor'] + os.sep)
VariantDir(env['build_dir'], '.', duplicate=0)
2008-12-11 00:45:14 +00:00
2008-12-05 13:46:19 +00:00
conf = env.Configure(custom_tests = tests,
config_h="Source/Core/Common/Src/Config.h")
2008-09-21 13:13:20 +00:00
2008-09-24 17:39:15 +00:00
if not conf.CheckPKGConfig('0.15.0'):
2008-12-05 13:46:19 +00:00
print "Can't find pkg-config, some tests will fail"
2008-09-24 17:39:15 +00:00
2009-03-03 22:34:32 +00:00
# find ports/fink for library and include path
if sys.platform == 'darwin':
#ports usually has newer versions
conf.CheckMacports()
conf.CheckFink()
2008-12-05 13:46:19 +00:00
env['HAVE_SDL'] = conf.CheckSDL('1.0.0')
2008-09-24 17:39:15 +00:00
2008-12-05 13:46:19 +00:00
# Bluetooth for wii support
2009-03-07 22:12:01 +00:00
env['HAVE_BLUEZ'] = conf.CheckPKG('bluez')
2008-12-04 15:15:21 +00:00
2008-12-05 13:46:19 +00:00
# needed for sound
2009-03-07 22:12:01 +00:00
env['HAVE_AO'] = conf.CheckPKG('ao')
2008-09-24 17:39:15 +00:00
2009-03-30 17:24:55 +00:00
# Sound lib
env['HAVE_OPENAL'] = conf.CheckPKG('openal')
2009-04-24 09:54:51 +00:00
if sys.platform != 'darwin':
# needed for mic
2009-04-24 09:54:51 +00:00
env['HAVE_PORTAUDIO'] = conf.CheckPortaudio(1890)
else:
env['HAVE_PORTAUDIO'] = 0
2009-03-02 01:28:12 +00:00
# sfml
env['HAVE_SFML'] = 0
2009-05-14 08:46:18 +00:00
if conf.CheckPKG('sfml-network') and conf.CheckCXXHeader("SFML/Network/Ftp.hpp"):
2009-03-07 22:12:01 +00:00
env['HAVE_SFML'] = 1;
2008-12-05 13:46:19 +00:00
#osx 64 specifics
2008-12-10 18:33:13 +00:00
if sys.platform == 'darwin':
2008-12-10 23:23:05 +00:00
if env['osx'] == '64cocoa':
env['nowx'] = True
2008-12-10 23:39:59 +00:00
compileFlags += ['-arch' , 'x86_64' ]
conf.Define('MAP_32BIT', 0)
2008-12-10 23:23:05 +00:00
if not env['osx'] == '32x11':
2008-12-10 18:33:13 +00:00
env['HAVE_X11'] = 0
2009-01-09 12:11:48 +00:00
env['HAVE_COCOA'] = 1
2009-03-07 22:12:01 +00:00
2008-12-10 18:33:13 +00:00
else:
env['HAVE_X11'] = conf.CheckPKG('x11')
env['HAVE_COCOA'] = 0
2008-12-13 23:19:56 +00:00
# handling wx flags CCFLAGS should be created before
2009-08-26 19:39:11 +00:00
wxmods = ['aui', 'adv', 'core', 'base']
2008-12-13 23:19:56 +00:00
env['USE_WX'] = 0
if env['wxgl']:
wxmods.append('gl')
env['USE_WX'] = 1
env['HAVE_X11'] = 0
env['HAVE_COCOA'] = 0
2009-03-09 00:36:59 +00:00
if sys.platform == 'win32':
env['HAVE_WX'] = 1
env['USE_WX'] = 1
2009-01-08 11:50:49 +00:00
# Gui less build
if env['nowx']:
env['HAVE_WX'] = 0;
else:
env['HAVE_WX'] = conf.CheckWXConfig('2.8', wxmods, 0)
2008-12-13 23:19:56 +00:00
# SDL backend
env['USE_SDL'] = 0
if env['sdlgl']:
env['USE_SDL'] = 1
env['HAVE_X11'] = 0
env['HAVE_COCOA'] = 0
env['USE_WX'] = 0
env['GLTEST'] = 0
if env['gltest']:
env['GLTEST'] = 1
conf.Define('GLTEST', env['GLTEST'])
env['JITTEST'] = 0
if env['jittest']:
env['JITTEST'] = 1
env['NOJIT'] = 0
if env['nojit']:
env['NOJIT'] = 1
conf.Define('JITTEST', env['JITTEST'])
conf.Define('NOJIT', env['NOJIT'])
2008-12-05 13:46:19 +00:00
# Creating config.h defines
conf.Define('HAVE_SDL', env['HAVE_SDL'])
2008-12-13 23:19:56 +00:00
conf.Define('USE_SDL', env['USE_SDL'])
2008-12-05 13:46:19 +00:00
conf.Define('HAVE_BLUEZ', env['HAVE_BLUEZ'])
conf.Define('HAVE_AO', env['HAVE_AO'])
2009-03-30 17:24:55 +00:00
conf.Define('HAVE_OPENAL', env['HAVE_OPENAL'])
2008-12-05 13:46:19 +00:00
conf.Define('HAVE_WX', env['HAVE_WX'])
2008-12-10 23:39:59 +00:00
conf.Define('USE_WX', env['USE_WX'])
2008-12-06 22:28:32 +00:00
conf.Define('HAVE_X11', env['HAVE_X11'])
2008-12-10 18:33:13 +00:00
conf.Define('HAVE_COCOA', env['HAVE_COCOA'])
conf.Define('HAVE_PORTAUDIO', env['HAVE_PORTAUDIO'])
2009-03-02 01:28:12 +00:00
conf.Define('HAVE_SFML', env['HAVE_SFML'])
2008-12-05 13:46:19 +00:00
2009-01-04 10:20:38 +00:00
# profile
env['USE_OPROFILE'] = 0
if (flavour == 'prof'):
2009-01-04 10:37:10 +00:00
proflibs = [ '/usr/lib/oprofile', '/usr/local/lib/oprofile' ]
env['LIBPATH'].append(proflibs)
env['RPATH'].append(proflibs)
2009-01-04 10:20:38 +00:00
if conf.CheckPKG('opagent'):
env['USE_OPROFILE'] = 1
else:
print "Can't build prof without oprofile, disabling"
conf.Define('USE_OPROFILE', env['USE_OPROFILE'])
2008-12-05 13:46:19 +00:00
# After all configuration tests are done
conf.Finish()
#wx windows flags
if env['HAVE_WX']:
wxconfig.ParseWXConfig(env)
2008-12-06 23:32:10 +00:00
else:
print "WX not found or disabled, not building GUI"
2008-12-05 13:46:19 +00:00
2008-09-21 19:54:29 +00:00
# add methods from utils to env
env.AddMethod(utils.filterWarnings)
2008-11-13 08:12:48 +00:00
# Where do we run from
2009-04-12 21:30:22 +00:00
env['base_dir'] = os.getcwd()+ '/'
2008-11-13 08:12:48 +00:00
# install paths
2008-12-28 17:56:59 +00:00
extra=''
2009-01-04 10:20:38 +00:00
if flavour == 'debug':
2008-12-28 17:56:59 +00:00
extra = '-debug'
2009-01-04 10:20:38 +00:00
elif flavour == 'prof':
extra = '-prof'
2008-12-28 17:56:59 +00:00
2008-11-13 08:12:48 +00:00
# TODO: support global install
2008-12-28 17:56:59 +00:00
env['prefix'] = os.path.join(env['base_dir'] + 'Binary', platform.system() + '-' + platform.machine() + extra +os.sep)
2008-11-13 08:12:48 +00:00
#TODO add lib
2009-01-09 12:11:48 +00:00
if sys.platform == 'darwin':
env['plugin_dir'] = env['prefix'] + 'Dolphin.app/Contents/PlugIns/'
else:
env['plugin_dir'] = env['prefix'] + 'Plugins/'
2008-11-13 08:12:48 +00:00
#TODO add bin
env['binary_dir'] = env['prefix']
2008-11-19 11:41:42 +00:00
#TODO add bin
2008-11-19 10:49:36 +00:00
env['libs_dir'] = env['prefix'] + 'Libs/'
2008-11-13 08:12:48 +00:00
#TODO where should this go?
if sys.platform == 'darwin':
env['data_dir'] = env['prefix'] + 'Dolphin.app/Contents/'
else:
env['data_dir'] = env['prefix']
2008-11-11 20:59:48 +00:00
2009-01-04 19:54:56 +00:00
env['RPATH'].append(env['libs_dir'])
2008-12-05 13:46:19 +00:00
2009-04-12 21:30:22 +00:00
# static libs goes here
env['local_libs'] = env['build_dir'] + os.sep + 'libs' + os.sep
env['LIBPATH'].append(env['local_libs'])
2009-01-04 19:54:56 +00:00
env['LIBPATH'].append(env['libs_dir'])
2008-12-05 13:46:19 +00:00
2008-07-12 17:40:22 +00:00
2008-11-13 10:04:10 +00:00
rev = utils.GenerateRevFile(env['flavor'],
"Source/Core/Common/Src/svnrev_template.h",
"Source/Core/Common/Src/svnrev.h")
2008-09-20 22:06:22 +00:00
# print a nice progress indication when not compiling
2008-09-23 00:24:28 +00:00
Progress(['-\r', '\\\r', '|\r', '/\r'], interval = 5)
# die on unknown variables
unknown = vars.UnknownVariables()
if unknown:
2008-10-05 18:49:55 +00:00
print "Unknown variables:", unknown.keys()
Exit(1)
2008-09-20 22:06:22 +00:00
# generate help
Help(vars.GenerateHelpText(env))
2008-12-05 13:46:19 +00:00
Export('env')
for subdir in dirs:
2008-10-05 18:49:55 +00:00
SConscript(
subdir + os.sep + 'SConscript',
2009-04-12 21:30:22 +00:00
variant_dir = env[ 'build_dir' ] + subdir + os.sep,
2008-12-11 00:45:14 +00:00
duplicate=0
2008-10-05 18:49:55 +00:00
)
2008-11-13 08:12:48 +00:00
# Data install
env.Install(env['data_dir'], 'Data/Sys')
env.Install(env['data_dir'], 'Data/User')
if sys.platform == 'darwin':
env.Install(env['binary_dir'] + 'Dolphin.app/Contents/Resources/',
2008-11-18 08:33:49 +00:00
'Source/Core/DolphinWX/resources/Dolphin.icns')
2008-11-13 10:04:10 +00:00
if env['bundle']:
# Make tar ball (TODO put inside normal dir)
tar_env = env.Clone()
tarball = tar_env.Tar('dolphin-'+rev +'.tar.bz2', env['prefix'])
tar_env.Append(TARFLAGS='-j',
TARCOMSTR="Creating release tarball")
#TODO clean all bundles
#env.Clean(all, 'dolphin-*'+ '.tar.bz2')