common.py revision 33d8ff9c317eeb1300bc8e189d7b9c00b352323a
19409043c58bbcac37b439032fc61aff2a0b0d543José Fonseca#######################################################################
29409043c58bbcac37b439032fc61aff2a0b0d543José Fonseca# Common SCons code
39409043c58bbcac37b439032fc61aff2a0b0d543José Fonseca
49409043c58bbcac37b439032fc61aff2a0b0d543José Fonsecaimport os
59409043c58bbcac37b439032fc61aff2a0b0d543José Fonsecaimport os.path
65c682485b872537277951a1f6418d97d211a2651Brian Paulimport re
7ea532f0e725bd68e7784189c9b7f6f7bf7f9d901José Fonsecaimport subprocess
89409043c58bbcac37b439032fc61aff2a0b0d543José Fonsecaimport sys
99409043c58bbcac37b439032fc61aff2a0b0d543José Fonsecaimport platform as _platform
109409043c58bbcac37b439032fc61aff2a0b0d543José Fonseca
11601498ae73e654c2de997ea75075613a694d604dJosé Fonsecaimport SCons.Script.SConscript
12601498ae73e654c2de997ea75075613a694d604dJosé Fonseca
139409043c58bbcac37b439032fc61aff2a0b0d543José Fonseca
149409043c58bbcac37b439032fc61aff2a0b0d543José Fonseca#######################################################################
159409043c58bbcac37b439032fc61aff2a0b0d543José Fonseca# Defaults
169409043c58bbcac37b439032fc61aff2a0b0d543José Fonseca
17ae760279f142244590c8aa76e3139529ca42952fJosé Fonsecahost_platform = _platform.system().lower()
189409043c58bbcac37b439032fc61aff2a0b0d543José Fonseca
19601498ae73e654c2de997ea75075613a694d604dJosé Fonseca# Search sys.argv[] for a "platform=foo" argument since we don't have
20601498ae73e654c2de997ea75075613a694d604dJosé Fonseca# an 'env' variable at this point.
21601498ae73e654c2de997ea75075613a694d604dJosé Fonsecaif 'platform' in SCons.Script.ARGUMENTS:
22e1bc68b0140fef465cda26b74602aeb1cbcfdafcJosé Fonseca    target_platform = SCons.Script.ARGUMENTS['platform']
23601498ae73e654c2de997ea75075613a694d604dJosé Fonsecaelse:
24e1bc68b0140fef465cda26b74602aeb1cbcfdafcJosé Fonseca    target_platform = host_platform
25601498ae73e654c2de997ea75075613a694d604dJosé Fonseca
269409043c58bbcac37b439032fc61aff2a0b0d543José Fonseca_machine_map = {
279409043c58bbcac37b439032fc61aff2a0b0d543José Fonseca	'x86': 'x86',
289409043c58bbcac37b439032fc61aff2a0b0d543José Fonseca	'i386': 'x86',
299409043c58bbcac37b439032fc61aff2a0b0d543José Fonseca	'i486': 'x86',
309409043c58bbcac37b439032fc61aff2a0b0d543José Fonseca	'i586': 'x86',
319409043c58bbcac37b439032fc61aff2a0b0d543José Fonseca	'i686': 'x86',
326b69e3c71741d99a54c6f4dcb605a3c241239aebMichel Dänzer	'ppc' : 'ppc',
3333d8ff9c317eeb1300bc8e189d7b9c00b352323aJosé Fonseca	'AMD64': 'x86_64',
349409043c58bbcac37b439032fc61aff2a0b0d543José Fonseca	'x86_64': 'x86_64',
359409043c58bbcac37b439032fc61aff2a0b0d543José Fonseca}
366ca6189e099a56028f052077be9cb51f09a834a1Brian Paul
376ca6189e099a56028f052077be9cb51f09a834a1Brian Paul
38e1bc68b0140fef465cda26b74602aeb1cbcfdafcJosé Fonseca# find host_machine value
399409043c58bbcac37b439032fc61aff2a0b0d543José Fonsecaif 'PROCESSOR_ARCHITECTURE' in os.environ:
40e1bc68b0140fef465cda26b74602aeb1cbcfdafcJosé Fonseca	host_machine = os.environ['PROCESSOR_ARCHITECTURE']
419409043c58bbcac37b439032fc61aff2a0b0d543José Fonsecaelse:
42e1bc68b0140fef465cda26b74602aeb1cbcfdafcJosé Fonseca	host_machine = _platform.machine()
43e1bc68b0140fef465cda26b74602aeb1cbcfdafcJosé Fonsecahost_machine = _machine_map.get(host_machine, 'generic')
44e1bc68b0140fef465cda26b74602aeb1cbcfdafcJosé Fonseca
45e1bc68b0140fef465cda26b74602aeb1cbcfdafcJosé Fonsecadefault_machine = host_machine
46601498ae73e654c2de997ea75075613a694d604dJosé Fonsecadefault_toolchain = 'default'
47601498ae73e654c2de997ea75075613a694d604dJosé Fonseca
48ae760279f142244590c8aa76e3139529ca42952fJosé Fonsecaif target_platform == 'windows' and host_platform != 'windows':
49601498ae73e654c2de997ea75075613a694d604dJosé Fonseca    default_machine = 'x86'
50601498ae73e654c2de997ea75075613a694d604dJosé Fonseca    default_toolchain = 'crossmingw'
519409043c58bbcac37b439032fc61aff2a0b0d543José Fonseca
526ca6189e099a56028f052077be9cb51f09a834a1Brian Paul
536ca6189e099a56028f052077be9cb51f09a834a1Brian Paul# find default_llvm value
54cd4e5879ebd4fe71c5e95d83cdf4a2ebd2fd1e06José Fonsecaif 'LLVM' in os.environ:
55ea532f0e725bd68e7784189c9b7f6f7bf7f9d901José Fonseca    default_llvm = 'yes'
56ea532f0e725bd68e7784189c9b7f6f7bf7f9d901José Fonsecaelse:
57ea532f0e725bd68e7784189c9b7f6f7bf7f9d901José Fonseca    default_llvm = 'no'
58cd4e5879ebd4fe71c5e95d83cdf4a2ebd2fd1e06José Fonseca    try:
59e1bc68b0140fef465cda26b74602aeb1cbcfdafcJosé Fonseca        if target_platform != 'windows' and \
60601498ae73e654c2de997ea75075613a694d604dJosé Fonseca           subprocess.call(['llvm-config', '--version'], stdout=subprocess.PIPE) == 0:
61cd4e5879ebd4fe71c5e95d83cdf4a2ebd2fd1e06José Fonseca            default_llvm = 'yes'
62cd4e5879ebd4fe71c5e95d83cdf4a2ebd2fd1e06José Fonseca    except:
63cd4e5879ebd4fe71c5e95d83cdf4a2ebd2fd1e06José Fonseca        pass
64ea532f0e725bd68e7784189c9b7f6f7bf7f9d901José Fonseca
656ca6189e099a56028f052077be9cb51f09a834a1Brian Paul
669409043c58bbcac37b439032fc61aff2a0b0d543José Fonseca#######################################################################
679409043c58bbcac37b439032fc61aff2a0b0d543José Fonseca# Common options
689409043c58bbcac37b439032fc61aff2a0b0d543José Fonseca
6913174c195e057f443b23df788ea0c10251942189José Fonsecadef AddOptions(opts):
70c9acd439b1af4b037ded324139664cf9832930f8José Fonseca	try:
71c9acd439b1af4b037ded324139664cf9832930f8José Fonseca		from SCons.Variables.BoolVariable import BoolVariable as BoolOption
72c9acd439b1af4b037ded324139664cf9832930f8José Fonseca	except ImportError:
730d0417cc75c3f7047a783c42a76bf378d8ab1397José Fonseca		from SCons.Options.BoolOption import BoolOption
740d0417cc75c3f7047a783c42a76bf378d8ab1397José Fonseca	try:
75c9acd439b1af4b037ded324139664cf9832930f8José Fonseca		from SCons.Variables.EnumVariable import EnumVariable as EnumOption
760d0417cc75c3f7047a783c42a76bf378d8ab1397José Fonseca	except ImportError:
770d0417cc75c3f7047a783c42a76bf378d8ab1397José Fonseca		from SCons.Options.EnumOption import EnumOption
7867450f0644f61fc17ab1315124dfe50537d36e9eJosé Fonseca	opts.Add(EnumOption('build', 'build type', 'debug',
7967450f0644f61fc17ab1315124dfe50537d36e9eJosé Fonseca	                  allowed_values=('debug', 'checked', 'profile', 'release')))
800f50c4fab8acfe291ddd426f331eea5eec66ba13José Fonseca	opts.Add(BoolOption('quiet', 'quiet command lines', 'yes'))
819409043c58bbcac37b439032fc61aff2a0b0d543José Fonseca	opts.Add(EnumOption('machine', 'use machine-specific assembly code', default_machine,
826b69e3c71741d99a54c6f4dcb605a3c241239aebMichel Dänzer											 allowed_values=('generic', 'ppc', 'x86', 'x86_64')))
83e1bc68b0140fef465cda26b74602aeb1cbcfdafcJosé Fonseca	opts.Add(EnumOption('platform', 'target platform', host_platform,
844a859cd12fa47811c9f4d3773bb5e3506f89f2b4Vinson Lee											 allowed_values=('linux', 'cell', 'windows', 'winddk', 'wince', 'darwin', 'embedded', 'cygwin', 'sunos5', 'freebsd8')))
85601498ae73e654c2de997ea75075613a694d604dJosé Fonseca	opts.Add('toolchain', 'compiler toolchain', default_toolchain)
86bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wu	opts.Add(BoolOption('gles', 'EXPERIMENTAL: enable OpenGL ES support', 'no'))
87ea532f0e725bd68e7784189c9b7f6f7bf7f9d901José Fonseca	opts.Add(BoolOption('llvm', 'use LLVM', default_llvm))
8867450f0644f61fc17ab1315124dfe50537d36e9eJosé Fonseca	opts.Add(BoolOption('debug', 'DEPRECATED: debug build', 'yes'))
8967450f0644f61fc17ab1315124dfe50537d36e9eJosé Fonseca	opts.Add(BoolOption('profile', 'DEPRECATED: profile build', 'no'))
90792caebced5f8f6dbd7bf23aa8d94230aa786d00José Fonseca	opts.Add(EnumOption('MSVS_VERSION', 'MS Visual C++ version', None, allowed_values=('7.1', '8.0', '9.0')))
91