2010-06-10 14:18:21 +00:00
|
|
|
# -*- python -*-
|
2008-09-20 17:31:54 +00:00
|
|
|
|
2008-07-12 17:40:22 +00:00
|
|
|
import os
|
2008-07-30 09:12:52 +00:00
|
|
|
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')
|
2010-06-10 14:18:21 +00:00
|
|
|
import wxconfig
|
2008-09-21 19:54:29 +00:00
|
|
|
import utils
|
2008-09-21 13:13:20 +00:00
|
|
|
|
2010-06-10 14:18:21 +00:00
|
|
|
# Some features need at least SCons 1.2
|
2009-06-08 14:36:00 +00:00
|
|
|
EnsureSConsVersion(1, 2)
|
2008-09-21 13:13:20 +00:00
|
|
|
|
2008-08-26 21:02:23 +00:00
|
|
|
warnings = [
|
2008-10-05 18:49:55 +00:00
|
|
|
'all',
|
|
|
|
'write-strings',
|
|
|
|
'shadow',
|
|
|
|
'pointer-arith',
|
|
|
|
'packed',
|
|
|
|
'no-conversion',
|
|
|
|
]
|
2010-06-02 20:35:12 +00:00
|
|
|
|
2008-08-26 21:02:23 +00:00
|
|
|
compileFlags = [
|
2008-10-05 18:49:55 +00:00
|
|
|
'-fno-exceptions',
|
|
|
|
'-fno-strict-aliasing',
|
|
|
|
'-msse2',
|
2010-06-02 20:35:12 +00:00
|
|
|
'-fPIC',
|
2008-10-05 18:49:55 +00:00
|
|
|
]
|
2008-09-18 10:04:03 +00:00
|
|
|
|
2008-09-19 15:03:31 +00:00
|
|
|
cppDefines = [
|
2008-10-05 18:49:55 +00:00
|
|
|
( '_FILE_OFFSET_BITS', 64),
|
|
|
|
'_LARGEFILE_SOURCE',
|
|
|
|
'GCC_HASCLASSVISIBILITY',
|
|
|
|
]
|
2008-09-19 15:03:31 +00:00
|
|
|
|
2010-06-14 18:07:29 +00:00
|
|
|
basedir = os.getcwd() + '/'
|
2009-04-12 21:30:22 +00:00
|
|
|
|
2008-08-26 21:02:23 +00:00
|
|
|
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',
|
2009-08-23 13:13:58 +00:00
|
|
|
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',
|
2010-06-12 20:33:29 +00:00
|
|
|
basedir + 'Source/Core/InputUICommon/Src',
|
2009-04-12 21:30:22 +00:00
|
|
|
basedir + 'Source/Core/AudioCommon/Src',
|
2009-07-08 08:29:22 +00:00
|
|
|
basedir + 'Source/Core/DebuggerUICommon/Src',
|
2010-06-14 18:07:29 +00:00
|
|
|
basedir + 'Source/Core/DolphinWX/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
|
|
|
|
2008-08-20 11:01:29 +00:00
|
|
|
dirs = [
|
2008-10-05 18:49:55 +00:00
|
|
|
'Externals/Bochs_disasm',
|
2009-08-23 13:13:58 +00:00
|
|
|
'Externals/Lua',
|
2010-06-14 18:07:29 +00:00
|
|
|
'Externals/MemcardManager',
|
2010-06-10 14:18:21 +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',
|
2010-06-12 20:33:29 +00:00
|
|
|
'Source/Core/InputUICommon/Src/',
|
2008-10-05 18:49:55 +00:00
|
|
|
'Source/Plugins/Plugin_VideoOGL/Src',
|
2009-10-12 16:29:32 +00:00
|
|
|
'Source/Plugins/Plugin_VideoSoftware/Src',
|
2008-10-05 18:49:55 +00:00
|
|
|
'Source/Plugins/Plugin_DSP_HLE/Src',
|
2009-04-08 20:21:07 +00:00
|
|
|
'Source/Plugins/Plugin_DSP_LLE/Src',
|
2009-02-03 22:06:18 +00:00
|
|
|
'Source/Plugins/Plugin_Wiimote/Src',
|
2010-06-12 13:50:24 +00:00
|
|
|
'Source/Plugins/Plugin_WiimoteNew/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',
|
2010-04-12 05:33:17 +00:00
|
|
|
'Source/UnitTests/',
|
2008-10-05 18:49:55 +00:00
|
|
|
]
|
|
|
|
|
2008-08-12 23:17:29 +00:00
|
|
|
builders = {}
|
2008-08-26 21:02:23 +00:00
|
|
|
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))
|
2008-10-17 09:44:44 +00:00
|
|
|
builders['Plist'] = Builder(action = createPlist)
|
2008-08-12 23:17:29 +00:00
|
|
|
|
2010-06-09 19:41:17 +00:00
|
|
|
# Handle command line options
|
2008-09-21 15:55:27 +00:00
|
|
|
vars = Variables('args.cache')
|
2008-12-10 18:33:13 +00:00
|
|
|
|
2008-09-19 15:03:31 +00:00
|
|
|
vars.AddVariables(
|
2010-07-09 01:26:53 +00:00
|
|
|
BoolVariable('verbose', 'Set to show compilation lines', False),
|
|
|
|
BoolVariable('bundle', 'Set to create distribution bundle', False),
|
2008-10-05 18:49:55 +00:00
|
|
|
BoolVariable('lint', 'Set for lint build (extra warnings)', False),
|
2010-06-26 19:17:43 +00:00
|
|
|
BoolVariable('nowx', 'Set for building with no WX libs', False),
|
2008-10-05 18:49:55 +00:00
|
|
|
EnumVariable('flavor', 'Choose a build flavor', 'release',
|
2010-06-02 20:35:12 +00:00
|
|
|
allowed_values = ('release','devel','debug','fastlog','prof'),
|
2010-06-26 19:17:43 +00:00
|
|
|
ignorecase = 2),
|
2010-07-09 01:26:53 +00:00
|
|
|
PathVariable('wxconfig', 'Path to wxconfig', None),
|
|
|
|
('CC', 'The C compiler', 'gcc'),
|
|
|
|
('CXX', 'The C++ compiler', 'g++'),
|
2008-10-05 18:49:55 +00:00
|
|
|
)
|
2008-09-19 15:03:31 +00:00
|
|
|
|
2010-06-26 19:17:43 +00:00
|
|
|
if not sys.platform == 'win32' and not sys.platform == 'darwin':
|
|
|
|
vars.AddVariables(
|
|
|
|
PathVariable('destdir',
|
|
|
|
'Temporary install location (for package building)',
|
|
|
|
None, PathVariable.PathAccept),
|
|
|
|
EnumVariable('install',
|
|
|
|
'Choose a local or global installation', 'local',
|
|
|
|
allowed_values = ('local', 'global'), ignorecase = 2),
|
|
|
|
PathVariable('prefix',
|
|
|
|
'Installation prefix (only used for a global build)',
|
|
|
|
'/usr', PathVariable.PathAccept),
|
|
|
|
PathVariable('userdir',
|
|
|
|
'Set the name of the user data directory in home',
|
|
|
|
'.dolphin-emu', PathVariable.PathAccept),
|
|
|
|
BoolVariable('opencl', 'Build with OpenCL', False),
|
2010-07-09 01:26:53 +00:00
|
|
|
EnumVariable('pgo', 'Profile-Guided Optimization (generate or use)',
|
|
|
|
'none', allowed_values = ('none', 'generate', 'use'),
|
|
|
|
ignorecase = 2),
|
2010-06-26 19:17:43 +00:00
|
|
|
BoolVariable('shared_glew', 'Use system shared libGLEW', True),
|
|
|
|
BoolVariable('shared_lzo', 'Use system shared liblzo2', True),
|
|
|
|
BoolVariable('shared_sdl', 'Use system shared libSDL', True),
|
|
|
|
BoolVariable('shared_sfml', 'Use system shared libsfml-network', True),
|
|
|
|
BoolVariable('shared_soil', 'Use system shared libSOIL', True),
|
|
|
|
BoolVariable('shared_zlib', 'Use system shared libz', True),
|
|
|
|
)
|
|
|
|
|
2010-06-14 18:07:29 +00:00
|
|
|
env = Environment(
|
|
|
|
CPPPATH = include_paths,
|
|
|
|
RPATH = [],
|
|
|
|
LIBS = [],
|
|
|
|
LIBPATH = [],
|
|
|
|
BUILDERS = builders,
|
|
|
|
variables = vars,
|
|
|
|
)
|
|
|
|
|
Some scons updates,
windows scons will build if dirs =
'Externals/Bochs_disasm',
'Externals/LZO',
'Externals/WiiUseSrc/Src',
#'Source/Core/Common/Src',
#'Source/Core/Core/Src',
# 'Source/Core/DiscIO/Src',
# 'Source/Core/VideoCommon/Src',
#'Source/Core/InputCommon/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_PadSimpleEvnt/Src',
# 'Source/Plugins/Plugin_nJoy_SDL/Src',
#'Source/Plugins/Plugin_nJoy_Testing/Src',
#'Source/Plugins/Plugin_Wiimote/Src',
# 'Source/Core/DolphinWX/Src',
'Source/Core/DebuggerWX/Src',
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@2627 8ced0084-cf51-0410-be5f-012b33b47a6e
2009-03-09 00:36:59 +00:00
|
|
|
if sys.platform == 'win32':
|
2010-06-14 18:07:29 +00:00
|
|
|
env['tools'] = ['mingw']
|
|
|
|
env['ENV'] = os.environ
|
Some scons updates,
windows scons will build if dirs =
'Externals/Bochs_disasm',
'Externals/LZO',
'Externals/WiiUseSrc/Src',
#'Source/Core/Common/Src',
#'Source/Core/Core/Src',
# 'Source/Core/DiscIO/Src',
# 'Source/Core/VideoCommon/Src',
#'Source/Core/InputCommon/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_PadSimpleEvnt/Src',
# 'Source/Plugins/Plugin_nJoy_SDL/Src',
#'Source/Plugins/Plugin_nJoy_Testing/Src',
#'Source/Plugins/Plugin_Wiimote/Src',
# 'Source/Core/DolphinWX/Src',
'Source/Core/DebuggerWX/Src',
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@2627 8ced0084-cf51-0410-be5f-012b33b47a6e
2009-03-09 00:36:59 +00:00
|
|
|
else:
|
2010-06-14 18:07:29 +00:00
|
|
|
env['ENV'] = {
|
|
|
|
'PATH' : os.environ['PATH'],
|
|
|
|
'HOME' : os.environ['HOME'],
|
|
|
|
'PKG_CONFIG_PATH' : os.environ.get('PKG_CONFIG_PATH')
|
|
|
|
}
|
2008-07-12 17:40:22 +00:00
|
|
|
|
2010-06-09 19:41:17 +00:00
|
|
|
# Save the given command line options
|
2008-09-21 15:55:27 +00:00
|
|
|
vars.Save('args.cache', env)
|
|
|
|
|
2010-06-09 19:41:17 +00:00
|
|
|
# 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
|
|
|
|
2010-06-09 19:41:17 +00:00
|
|
|
# Build flavor
|
2010-03-14 21:01:02 +00:00
|
|
|
flavour = env['flavor']
|
2008-09-20 22:06:22 +00:00
|
|
|
if (flavour == 'debug'):
|
2009-12-02 10:24:15 +00:00
|
|
|
compileFlags.append('-ggdb')
|
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?
|
2010-06-10 14:18:21 +00:00
|
|
|
cppDefines.append('NDEBUG')
|
2008-09-24 17:39:15 +00:00
|
|
|
elif (flavour == 'devel'):
|
2009-12-02 10:24:15 +00:00
|
|
|
compileFlags.append('-ggdb')
|
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')
|
2009-12-02 10:24:15 +00:00
|
|
|
compileFlags.append('-ggdb')
|
2009-01-04 10:20:38 +00:00
|
|
|
elif (flavour == 'release'):
|
2008-10-05 18:49:55 +00:00
|
|
|
compileFlags.append('-O3')
|
2009-12-02 10:24:15 +00:00
|
|
|
compileFlags.append('-fomit-frame-pointer');
|
2010-06-09 19:41:17 +00:00
|
|
|
# More warnings
|
2008-09-20 22:06:22 +00:00
|
|
|
if env['lint']:
|
2010-06-03 18:49:35 +00:00
|
|
|
warnings.append('error')
|
2010-06-09 19:41:17 +00:00
|
|
|
# Should check for the availability of these (in GCC 4.3 or newer)
|
2010-06-04 05:21:46 +00:00
|
|
|
if sys.platform != 'darwin':
|
|
|
|
warnings.append('no-array-bounds')
|
|
|
|
warnings.append('no-unused-result')
|
2010-06-09 19:41:17 +00:00
|
|
|
# wxWidgets causes too many warnings with these
|
2010-06-03 18:49:35 +00:00
|
|
|
#warnings.append('unreachable-code')
|
|
|
|
#warnings.append('float-equal')
|
2008-09-20 22:06:22 +00:00
|
|
|
|
2010-06-09 19:41:17 +00:00
|
|
|
# Add the warnings to the compile flags
|
2009-09-08 21:16:05 +00:00
|
|
|
compileFlags += [ ('-W' + warning) for warning in warnings ]
|
2008-09-20 22:06:22 +00:00
|
|
|
|
|
|
|
env['CCFLAGS'] = compileFlags
|
|
|
|
env['CPPDEFINES'] = cppDefines
|
2010-06-26 13:29:44 +00:00
|
|
|
if not sys.platform == 'win32':
|
|
|
|
env['CXXFLAGS'] = ['-fvisibility-inlines-hidden']
|
2010-07-09 01:26:53 +00:00
|
|
|
cppDefines.append('LUA_USE_LINUX')
|
2010-02-05 09:53:33 +00:00
|
|
|
|
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,
|
|
|
|
'CheckPortaudio' : utils.CheckPortaudio,
|
|
|
|
}
|
2008-09-23 00:24:28 +00:00
|
|
|
|
2010-06-09 19:41:17 +00:00
|
|
|
# Object files
|
2010-06-02 20:35:12 +00:00
|
|
|
env['build_dir'] = os.path.join(basedir, 'Build',
|
|
|
|
platform.system() + '-' + platform.machine() + '-' + env['flavor'] + os.sep)
|
2009-04-12 21:30:22 +00:00
|
|
|
|
2010-05-26 21:31:50 +00:00
|
|
|
# Static libs go here
|
|
|
|
env['local_libs'] = env['build_dir'] + os.sep + 'libs' + os.sep
|
2008-12-11 00:45:14 +00:00
|
|
|
|
2010-02-02 21:56:29 +00:00
|
|
|
# Where do we run from
|
|
|
|
env['base_dir'] = os.getcwd()+ '/'
|
|
|
|
|
2010-06-09 19:41:17 +00:00
|
|
|
# Install paths
|
2010-02-02 21:56:29 +00:00
|
|
|
extra=''
|
|
|
|
if flavour == 'debug':
|
|
|
|
extra = '-debug'
|
|
|
|
elif flavour == 'prof':
|
|
|
|
extra = '-prof'
|
|
|
|
|
2010-02-02 23:21:19 +00:00
|
|
|
# Set up the install locations
|
2010-06-26 19:17:43 +00:00
|
|
|
if sys.platform == 'linux2' and env['install'] == 'global':
|
2010-02-02 21:56:29 +00:00
|
|
|
env['prefix'] = os.path.join(env['prefix'] + os.sep)
|
|
|
|
env['binary_dir'] = env['prefix'] + 'bin/'
|
2010-06-10 14:18:21 +00:00
|
|
|
env['plugin_dir'] = env['prefix'] + 'lib/dolphin-emu/'
|
2010-02-02 21:56:29 +00:00
|
|
|
env['data_dir'] = env['prefix'] + "share/dolphin-emu/"
|
|
|
|
else:
|
2010-06-02 20:35:12 +00:00
|
|
|
env['prefix'] = os.path.join(env['base_dir'] + 'Binary',
|
|
|
|
platform.system() + '-' + platform.machine() + extra + os.sep)
|
2010-02-02 23:21:19 +00:00
|
|
|
env['binary_dir'] = env['prefix']
|
2010-06-10 14:18:21 +00:00
|
|
|
env['plugin_dir'] = env['prefix'] + 'plugins/'
|
2010-05-26 21:31:50 +00:00
|
|
|
env['data_dir'] = env['prefix']
|
|
|
|
if sys.platform == 'darwin':
|
|
|
|
env['plugin_dir'] = env['prefix'] + 'Dolphin.app/Contents/PlugIns/'
|
|
|
|
env['data_dir'] = env['prefix'] + 'Dolphin.app/Contents/'
|
2010-02-02 21:56:29 +00:00
|
|
|
|
2010-07-09 01:26:53 +00:00
|
|
|
shared = {}
|
|
|
|
shared['glew'] = shared['lzo'] = shared['sdl'] = \
|
|
|
|
shared['soil'] = shared['sfml'] = shared['zlib'] = 0
|
|
|
|
wxmods = ['aui', 'adv', 'core', 'base', 'gl']
|
2010-06-26 13:56:29 +00:00
|
|
|
env['HAVE_OPENCL'] = 0
|
2010-07-09 01:26:53 +00:00
|
|
|
env['HAVE_WX'] = 0
|
2010-06-16 16:35:19 +00:00
|
|
|
|
2010-06-14 18:07:29 +00:00
|
|
|
# OS X specifics
|
|
|
|
if sys.platform == 'darwin':
|
2010-07-09 01:26:53 +00:00
|
|
|
compileFlags.append('-mmacosx-version-min=10.5')
|
|
|
|
cppDefines.append('MAP_32BIT=0')
|
|
|
|
if not env['nowx']:
|
|
|
|
cppDefines.append('HAVE_WX=1')
|
|
|
|
conf = env.Configure(custom_tests = tests)
|
|
|
|
# wxWidgets 2.9 has Cocoa support
|
|
|
|
env['HAVE_WX'] = conf.CheckWXConfig(2.9, wxmods, 0)
|
|
|
|
wxconfig.ParseWXConfig(env)
|
|
|
|
# Make sure that the libraries claimed by wx-config are valid
|
|
|
|
if not conf.CheckLib('wx_baseu-2.9'):
|
|
|
|
print "WX libraries not found - see config.log"
|
|
|
|
Exit(1)
|
|
|
|
conf.Finish()
|
|
|
|
# wx-config wants us to link with the OS X QuickTime framework
|
|
|
|
# which is not available for x86_64 and we don't use it anyway.
|
|
|
|
# Strip it out to silence some harmless linker warnings.
|
|
|
|
if env['FRAMEWORKS'].count('QuickTime'):
|
|
|
|
env['FRAMEWORKS'].remove('QuickTime')
|
2010-06-14 18:07:29 +00:00
|
|
|
env['CC'] = "gcc-4.2"
|
|
|
|
env['CFLAGS'] = ['-x', 'objective-c']
|
|
|
|
env['CXX'] = "g++-4.2"
|
|
|
|
env['CXXFLAGS'] = ['-x', 'objective-c++']
|
2010-07-09 01:26:53 +00:00
|
|
|
env['CCFLAGS'] += ['-arch', 'x86_64', '-arch', 'i386']
|
2010-07-08 17:59:56 +00:00
|
|
|
env['LIBS'] += ['iconv']
|
2010-07-09 01:26:53 +00:00
|
|
|
env['LINKFLAGS'] += ['-arch', 'x86_64', '-arch', 'i386']
|
|
|
|
env['FRAMEWORKS'] += ['AppKit', 'CoreFoundation', 'CoreServices']
|
2010-06-14 18:07:29 +00:00
|
|
|
env['FRAMEWORKS'] += ['IOBluetooth', 'IOKit', 'OpenGL']
|
|
|
|
env['FRAMEWORKS'] += ['AudioUnit', 'CoreAudio']
|
2010-06-26 19:17:43 +00:00
|
|
|
if platform.mac_ver()[0] >= '10.6.0':
|
|
|
|
env['HAVE_OPENCL'] = 1
|
|
|
|
env['LINKFLAGS'] += ['-weak_framework', 'OpenCL']
|
|
|
|
env['FRAMEWORKS'] += ['Cg']
|
2010-07-09 01:26:53 +00:00
|
|
|
|
|
|
|
if not sys.platform == 'win32' and not sys.platform == 'darwin':
|
|
|
|
conf = env.Configure(custom_tests = tests,
|
|
|
|
config_h="Source/Core/Common/Src/Config.h")
|
|
|
|
|
2010-06-16 11:39:23 +00:00
|
|
|
if not conf.CheckPKGConfig('0.15.0'):
|
|
|
|
print "Can't find pkg-config, some tests will fail"
|
2010-06-14 18:07:29 +00:00
|
|
|
|
2010-07-09 01:26:53 +00:00
|
|
|
env['LINKFLAGS'] += ['-pthread']
|
|
|
|
|
2010-06-17 01:18:22 +00:00
|
|
|
if env['shared_glew']:
|
|
|
|
shared['glew'] = conf.CheckPKG('GLEW')
|
|
|
|
if env['shared_sdl']:
|
|
|
|
shared['sdl'] = conf.CheckPKG('SDL')
|
|
|
|
if env['shared_zlib']:
|
|
|
|
shared['zlib'] = conf.CheckPKG('z')
|
|
|
|
if env['shared_lzo']:
|
2010-06-16 16:35:19 +00:00
|
|
|
shared['lzo'] = conf.CheckPKG('lzo2')
|
2010-06-17 01:18:22 +00:00
|
|
|
# TODO: Check the version of sfml. It should be at least version 1.5
|
|
|
|
if env['shared_sfml']:
|
2010-06-16 16:35:19 +00:00
|
|
|
shared['sfml'] = conf.CheckPKG('sfml-network') and \
|
|
|
|
conf.CheckCXXHeader("SFML/Network/Ftp.hpp")
|
2010-06-17 01:18:22 +00:00
|
|
|
if env['shared_soil']:
|
2010-06-16 16:35:19 +00:00
|
|
|
shared['soil'] = conf.CheckPKG('SOIL')
|
2010-06-16 11:39:23 +00:00
|
|
|
for lib in shared:
|
|
|
|
if not shared[lib]:
|
|
|
|
print "Shared library " + lib + " not detected, " \
|
|
|
|
"falling back to the static library"
|
|
|
|
|
2010-07-09 01:26:53 +00:00
|
|
|
if not env['nowx']:
|
|
|
|
# wxGLCanvas does not play well with wxGTK
|
|
|
|
wxmods.remove('gl')
|
|
|
|
env['HAVE_WX'] = conf.CheckWXConfig(2.8, wxmods, 0)
|
|
|
|
wxconfig.ParseWXConfig(env)
|
2010-06-04 21:00:39 +00:00
|
|
|
|
2010-07-09 01:26:53 +00:00
|
|
|
if not env['HAVE_WX'] and not env['nowx']:
|
|
|
|
print "WX libraries not found - see config.log"
|
|
|
|
Exit(1)
|
2010-06-10 14:18:21 +00:00
|
|
|
|
2010-07-09 01:26:53 +00:00
|
|
|
conf.Define('HAVE_WX', env['HAVE_WX'])
|
2010-06-16 00:07:52 +00:00
|
|
|
|
|
|
|
env['HAVE_BLUEZ'] = conf.CheckPKG('bluez')
|
2010-06-26 19:17:43 +00:00
|
|
|
conf.Define('HAVE_BLUEZ', env['HAVE_BLUEZ'])
|
2010-06-16 00:07:52 +00:00
|
|
|
|
|
|
|
env['HAVE_ALSA'] = conf.CheckPKG('alsa')
|
2010-06-26 19:17:43 +00:00
|
|
|
conf.Define('HAVE_ALSA', env['HAVE_ALSA'])
|
|
|
|
|
2010-06-16 00:07:52 +00:00
|
|
|
env['HAVE_AO'] = conf.CheckPKG('ao')
|
2010-06-26 19:17:43 +00:00
|
|
|
conf.Define('HAVE_AO', env['HAVE_AO'])
|
|
|
|
|
2010-06-16 00:07:52 +00:00
|
|
|
env['HAVE_OPENAL'] = conf.CheckPKG('openal')
|
2010-06-26 19:17:43 +00:00
|
|
|
conf.Define('HAVE_OPENAL', env['HAVE_OPENAL'])
|
|
|
|
|
2010-06-16 00:07:52 +00:00
|
|
|
env['HAVE_PORTAUDIO'] = conf.CheckPortaudio(1890)
|
2010-06-26 19:17:43 +00:00
|
|
|
conf.Define('HAVE_PORTAUDIO', env['HAVE_PORTAUDIO'])
|
|
|
|
|
2010-06-16 00:07:52 +00:00
|
|
|
env['HAVE_PULSEAUDIO'] = conf.CheckPKG('libpulse-simple')
|
2010-06-26 19:17:43 +00:00
|
|
|
conf.Define('HAVE_PULSEAUDIO', env['HAVE_PULSEAUDIO'])
|
2010-06-16 00:07:52 +00:00
|
|
|
|
2010-06-14 18:07:29 +00:00
|
|
|
env['HAVE_X11'] = conf.CheckPKG('x11')
|
|
|
|
env['HAVE_XRANDR'] = env['HAVE_X11'] and conf.CheckPKG('xrandr')
|
2010-06-26 19:17:43 +00:00
|
|
|
conf.Define('HAVE_XRANDR', env['HAVE_XRANDR'])
|
|
|
|
conf.Define('HAVE_X11', env['HAVE_X11'])
|
|
|
|
|
|
|
|
# Check for GTK 2.0 or newer
|
|
|
|
if env['HAVE_WX'] and not conf.CheckPKG('gtk+-2.0'):
|
|
|
|
print "gtk+-2.0 developement headers not detected"
|
|
|
|
print "gtk+-2.0 is required to build the WX GUI"
|
|
|
|
Exit(1)
|
|
|
|
|
2010-06-10 14:18:21 +00:00
|
|
|
if not conf.CheckPKG('GL'):
|
|
|
|
print "Must have OpenGL to build"
|
|
|
|
Exit(1)
|
|
|
|
if not conf.CheckPKG('GLU'):
|
|
|
|
print "Must have GLU to build"
|
|
|
|
Exit(1)
|
2010-06-26 19:17:43 +00:00
|
|
|
if not conf.CheckPKG('Cg'):
|
2010-07-09 01:26:53 +00:00
|
|
|
print "Must have Cg toolkit from NVidia to build"
|
2010-06-26 19:17:43 +00:00
|
|
|
Exit(1)
|
2010-06-10 14:18:21 +00:00
|
|
|
if not conf.CheckPKG('CgGL'):
|
|
|
|
print "Must have CgGl to build"
|
|
|
|
Exit(1)
|
2010-07-09 01:26:53 +00:00
|
|
|
|
2010-06-26 19:17:43 +00:00
|
|
|
if env['opencl']:
|
|
|
|
env['HAVE_OPENCL'] = conf.CheckPKG('OpenCL')
|
2010-06-10 14:18:21 +00:00
|
|
|
|
2010-06-26 19:17:43 +00:00
|
|
|
conf.Define('USER_DIR', "\"" + env['userdir'] + "\"")
|
|
|
|
if (env['install'] == 'global'):
|
|
|
|
conf.Define('DATA_DIR', "\"" + env['data_dir'] + "\"")
|
|
|
|
conf.Define('LIBS_DIR', "\"" + env['prefix'] + 'lib/' + "\"")
|
|
|
|
|
2010-07-09 01:26:53 +00:00
|
|
|
# PGO - Profile Guided Optimization
|
|
|
|
if env['pgo']=='generate':
|
|
|
|
compileFlags.append('-fprofile-generate')
|
|
|
|
env['LINKFLAGS']='-fprofile-generate'
|
|
|
|
if env['pgo']=='use':
|
|
|
|
compileFlags.append('-fprofile-use')
|
|
|
|
env['LINKFLAGS']='-fprofile-use'
|
|
|
|
|
|
|
|
# Profiling
|
|
|
|
if (flavour == 'prof'):
|
|
|
|
proflibs = [ '/usr/lib/oprofile', '/usr/local/lib/oprofile' ]
|
|
|
|
env['LIBPATH'].append(proflibs)
|
|
|
|
env['RPATH'].append(proflibs)
|
|
|
|
if conf.CheckPKG('opagent'):
|
|
|
|
conf.Define('USE_OPROFILE', 1)
|
|
|
|
else:
|
|
|
|
print "Can't build prof without oprofile, disabling"
|
|
|
|
|
|
|
|
conf.Define('HAVE_OPENCL', env['HAVE_OPENCL'])
|
|
|
|
|
|
|
|
# After all configuration tests are done
|
|
|
|
conf.Finish()
|
|
|
|
|
|
|
|
# Local (static) libraries must be first in the search path for the build in
|
|
|
|
# order that they can override system libraries, but they must not be found
|
|
|
|
# during autoconfiguration as they will then be detected as system libraries.
|
|
|
|
env['LIBPATH'].insert(0, env['local_libs'])
|
|
|
|
|
|
|
|
if not shared['glew']:
|
|
|
|
env['CPPPATH'] += [basedir + 'Externals/GLew/include']
|
|
|
|
dirs += ['Externals/GLew']
|
|
|
|
if not shared['lzo']:
|
|
|
|
env['CPPPATH'] += [basedir + 'Externals/LZO']
|
|
|
|
dirs += ['Externals/LZO']
|
|
|
|
if not shared['sdl']:
|
|
|
|
env['CPPPATH'] += [basedir + 'Externals/SDL']
|
|
|
|
env['CPPPATH'] += [basedir + 'Externals/SDL/include']
|
|
|
|
dirs += ['Externals/SDL']
|
|
|
|
if not shared['soil']:
|
|
|
|
env['CPPPATH'] += [basedir + 'Externals/SOIL']
|
|
|
|
dirs += ['Externals/SOIL']
|
|
|
|
if not shared['sfml']:
|
|
|
|
env['CPPPATH'] += [basedir + 'Externals/SFML/include']
|
|
|
|
dirs += ['Externals/SFML/src']
|
|
|
|
if not shared['zlib']:
|
|
|
|
env['CPPPATH'] += [basedir + 'Externals/zlib']
|
|
|
|
dirs += ['Externals/zlib']
|
2010-06-16 12:42:49 +00:00
|
|
|
|
2010-06-10 14:18:21 +00:00
|
|
|
rev = utils.GenerateRevFile(env['flavor'],
|
2008-11-13 10:04:10 +00:00
|
|
|
"Source/Core/Common/Src/svnrev_template.h",
|
|
|
|
"Source/Core/Common/Src/svnrev.h")
|
2010-07-09 01:26:53 +00:00
|
|
|
|
2010-06-09 19:41:17 +00:00
|
|
|
# Print a nice progress indication when not compiling
|
2010-06-05 16:42:04 +00:00
|
|
|
Progress(['-\r', '\\\r', '|\r', '/\r'], interval=5)
|
2008-09-19 15:03:31 +00:00
|
|
|
|
2010-02-02 21:56:29 +00:00
|
|
|
# Setup destdir for package building
|
|
|
|
# Warning: The program will not run from this location. It is assumed the
|
|
|
|
# package will later install it to the prefix as it was defined before this.
|
|
|
|
if env.has_key('destdir'):
|
|
|
|
env['prefix'] = env['destdir'] + env['prefix']
|
|
|
|
env['plugin_dir'] = env['destdir'] + env['plugin_dir']
|
|
|
|
env['binary_dir'] = env['destdir'] + env['binary_dir']
|
|
|
|
env['data_dir'] = env['destdir'] + env['data_dir']
|
|
|
|
|
2010-06-09 19:41:17 +00:00
|
|
|
# Die on unknown variables
|
2008-09-19 15:03:31 +00:00
|
|
|
unknown = vars.UnknownVariables()
|
|
|
|
if unknown:
|
2008-10-05 18:49:55 +00:00
|
|
|
print "Unknown variables:", unknown.keys()
|
|
|
|
Exit(1)
|
2008-09-19 15:03:31 +00:00
|
|
|
|
2010-06-09 19:41:17 +00:00
|
|
|
# Generate help
|
2008-09-19 15:03:31 +00:00
|
|
|
Help(vars.GenerateHelpText(env))
|
|
|
|
|
2008-12-05 13:46:19 +00:00
|
|
|
Export('env')
|
|
|
|
|
2008-08-26 21:02:23 +00:00
|
|
|
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
|
|
|
|
if sys.platform == 'darwin':
|
2010-02-02 21:56:29 +00:00
|
|
|
env.Install(env['data_dir'], 'Data/Sys')
|
|
|
|
env.Install(env['data_dir'], 'Data/User')
|
|
|
|
else:
|
|
|
|
env.InstallAs(env['data_dir'] + 'sys', 'Data/Sys')
|
|
|
|
env.InstallAs(env['data_dir'] + 'user', 'Data/User')
|
|
|
|
|
|
|
|
env.Alias('install', env['prefix'])
|
2008-11-13 10:04:10 +00:00
|
|
|
|
|
|
|
if env['bundle']:
|
2010-05-27 03:51:00 +00:00
|
|
|
if sys.platform == 'linux2':
|
|
|
|
# Make tar ball (TODO put inside normal dir)
|
|
|
|
tar_env = env.Clone()
|
2010-06-26 13:29:44 +00:00
|
|
|
tarball = tar_env.Tar('dolphin-' + rev + '.tar.bz2', env['prefix'])
|
2010-05-27 03:51:00 +00:00
|
|
|
tar_env.Append(TARFLAGS='-j', TARCOMSTR="Creating release tarball")
|
2010-06-26 13:29:44 +00:00
|
|
|
env.Clean(all, tarball)
|
2010-05-27 03:51:00 +00:00
|
|
|
elif sys.platform == 'darwin':
|
2010-06-26 13:29:44 +00:00
|
|
|
app = env['binary_dir'] + 'Dolphin.app'
|
|
|
|
dmg = env['binary_dir'] + 'Dolphin-r' + rev + '.dmg'
|
|
|
|
env.Command('.', app + '/Contents/MacOS/Dolphin', 'rm -f ' + dmg +
|
|
|
|
' && hdiutil create -srcfolder ' + app + ' -format UDBZ ' + dmg +
|
|
|
|
' && hdiutil internet-enable -yes ' + dmg)
|
|
|
|
env.Clean(all, dmg)
|