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()
18eb1780238621c7be0342d9129eb639e4892c004dVinson Leeif host_platform.startswith('cygwin'):
19eb1780238621c7be0342d9129eb639e4892c004dVinson Lee    host_platform = 'cygwin'
209409043c58bbcac37b439032fc61aff2a0b0d543José Fonseca
21601498ae73e654c2de997ea75075613a694d604dJosé Fonseca# Search sys.argv[] for a "platform=foo" argument since we don't have
22601498ae73e654c2de997ea75075613a694d604dJosé Fonseca# an 'env' variable at this point.
23601498ae73e654c2de997ea75075613a694d604dJosé Fonsecaif 'platform' in SCons.Script.ARGUMENTS:
24e1bc68b0140fef465cda26b74602aeb1cbcfdafcJosé Fonseca    target_platform = SCons.Script.ARGUMENTS['platform']
25601498ae73e654c2de997ea75075613a694d604dJosé Fonsecaelse:
26e1bc68b0140fef465cda26b74602aeb1cbcfdafcJosé Fonseca    target_platform = host_platform
27601498ae73e654c2de997ea75075613a694d604dJosé Fonseca
289409043c58bbcac37b439032fc61aff2a0b0d543José Fonseca_machine_map = {
299409043c58bbcac37b439032fc61aff2a0b0d543José Fonseca	'x86': 'x86',
309409043c58bbcac37b439032fc61aff2a0b0d543José Fonseca	'i386': 'x86',
319409043c58bbcac37b439032fc61aff2a0b0d543José Fonseca	'i486': 'x86',
329409043c58bbcac37b439032fc61aff2a0b0d543José Fonseca	'i586': 'x86',
339409043c58bbcac37b439032fc61aff2a0b0d543José Fonseca	'i686': 'x86',
345481b5adcf47366ddc641f893e2fa79624cf68caAlexander von Gluck IV	'BePC': 'x86',
355481b5adcf47366ddc641f893e2fa79624cf68caAlexander von Gluck IV	'Intel': 'x86',
366b69e3c71741d99a54c6f4dcb605a3c241239aebMichel Dänzer	'ppc' : 'ppc',
375481b5adcf47366ddc641f893e2fa79624cf68caAlexander von Gluck IV	'BeBox': 'ppc',
385481b5adcf47366ddc641f893e2fa79624cf68caAlexander von Gluck IV	'BeMac': 'ppc',
3933d8ff9c317eeb1300bc8e189d7b9c00b352323aJosé Fonseca	'AMD64': 'x86_64',
409409043c58bbcac37b439032fc61aff2a0b0d543José Fonseca	'x86_64': 'x86_64',
415481b5adcf47366ddc641f893e2fa79624cf68caAlexander von Gluck IV	'sparc': 'sparc',
425481b5adcf47366ddc641f893e2fa79624cf68caAlexander von Gluck IV	'sun4u': 'sparc',
439409043c58bbcac37b439032fc61aff2a0b0d543José Fonseca}
446ca6189e099a56028f052077be9cb51f09a834a1Brian Paul
456ca6189e099a56028f052077be9cb51f09a834a1Brian Paul
46e1bc68b0140fef465cda26b74602aeb1cbcfdafcJosé Fonseca# find host_machine value
479409043c58bbcac37b439032fc61aff2a0b0d543José Fonsecaif 'PROCESSOR_ARCHITECTURE' in os.environ:
48e1bc68b0140fef465cda26b74602aeb1cbcfdafcJosé Fonseca	host_machine = os.environ['PROCESSOR_ARCHITECTURE']
499409043c58bbcac37b439032fc61aff2a0b0d543José Fonsecaelse:
50e1bc68b0140fef465cda26b74602aeb1cbcfdafcJosé Fonseca	host_machine = _platform.machine()
51e1bc68b0140fef465cda26b74602aeb1cbcfdafcJosé Fonsecahost_machine = _machine_map.get(host_machine, 'generic')
52e1bc68b0140fef465cda26b74602aeb1cbcfdafcJosé Fonseca
53e1bc68b0140fef465cda26b74602aeb1cbcfdafcJosé Fonsecadefault_machine = host_machine
54601498ae73e654c2de997ea75075613a694d604dJosé Fonsecadefault_toolchain = 'default'
55601498ae73e654c2de997ea75075613a694d604dJosé Fonseca
56ae760279f142244590c8aa76e3139529ca42952fJosé Fonsecaif target_platform == 'windows' and host_platform != 'windows':
57601498ae73e654c2de997ea75075613a694d604dJosé Fonseca    default_machine = 'x86'
58601498ae73e654c2de997ea75075613a694d604dJosé Fonseca    default_toolchain = 'crossmingw'
599409043c58bbcac37b439032fc61aff2a0b0d543José Fonseca
606ca6189e099a56028f052077be9cb51f09a834a1Brian Paul
616ca6189e099a56028f052077be9cb51f09a834a1Brian Paul# find default_llvm value
62cd4e5879ebd4fe71c5e95d83cdf4a2ebd2fd1e06José Fonsecaif 'LLVM' in os.environ:
63ea532f0e725bd68e7784189c9b7f6f7bf7f9d901José Fonseca    default_llvm = 'yes'
64ea532f0e725bd68e7784189c9b7f6f7bf7f9d901José Fonsecaelse:
65ea532f0e725bd68e7784189c9b7f6f7bf7f9d901José Fonseca    default_llvm = 'no'
66cd4e5879ebd4fe71c5e95d83cdf4a2ebd2fd1e06José Fonseca    try:
67e1bc68b0140fef465cda26b74602aeb1cbcfdafcJosé Fonseca        if target_platform != 'windows' and \
68601498ae73e654c2de997ea75075613a694d604dJosé Fonseca           subprocess.call(['llvm-config', '--version'], stdout=subprocess.PIPE) == 0:
69cd4e5879ebd4fe71c5e95d83cdf4a2ebd2fd1e06José Fonseca            default_llvm = 'yes'
70cd4e5879ebd4fe71c5e95d83cdf4a2ebd2fd1e06José Fonseca    except:
71cd4e5879ebd4fe71c5e95d83cdf4a2ebd2fd1e06José Fonseca        pass
72ea532f0e725bd68e7784189c9b7f6f7bf7f9d901José Fonseca
736ca6189e099a56028f052077be9cb51f09a834a1Brian Paul
749409043c58bbcac37b439032fc61aff2a0b0d543José Fonseca#######################################################################
759409043c58bbcac37b439032fc61aff2a0b0d543José Fonseca# Common options
769409043c58bbcac37b439032fc61aff2a0b0d543José Fonseca
7713174c195e057f443b23df788ea0c10251942189José Fonsecadef AddOptions(opts):
78c9acd439b1af4b037ded324139664cf9832930f8José Fonseca	try:
79c9acd439b1af4b037ded324139664cf9832930f8José Fonseca		from SCons.Variables.BoolVariable import BoolVariable as BoolOption
80c9acd439b1af4b037ded324139664cf9832930f8José Fonseca	except ImportError:
810d0417cc75c3f7047a783c42a76bf378d8ab1397José Fonseca		from SCons.Options.BoolOption import BoolOption
820d0417cc75c3f7047a783c42a76bf378d8ab1397José Fonseca	try:
83c9acd439b1af4b037ded324139664cf9832930f8José Fonseca		from SCons.Variables.EnumVariable import EnumVariable as EnumOption
840d0417cc75c3f7047a783c42a76bf378d8ab1397José Fonseca	except ImportError:
850d0417cc75c3f7047a783c42a76bf378d8ab1397José Fonseca		from SCons.Options.EnumOption import EnumOption
8667450f0644f61fc17ab1315124dfe50537d36e9eJosé Fonseca	opts.Add(EnumOption('build', 'build type', 'debug',
8767450f0644f61fc17ab1315124dfe50537d36e9eJosé Fonseca	                  allowed_values=('debug', 'checked', 'profile', 'release')))
88c7bd0fa4851187c3102948f5f4d70c26d1b55a5eJosé Fonseca	opts.Add(BoolOption('verbose', 'verbose output', 'no'))
899409043c58bbcac37b439032fc61aff2a0b0d543José Fonseca	opts.Add(EnumOption('machine', 'use machine-specific assembly code', default_machine,
906b69e3c71741d99a54c6f4dcb605a3c241239aebMichel Dänzer											 allowed_values=('generic', 'ppc', 'x86', 'x86_64')))
91e1bc68b0140fef465cda26b74602aeb1cbcfdafcJosé Fonseca	opts.Add(EnumOption('platform', 'target platform', host_platform,
925cf693266faebd1fc130709fd7e7b2452bbd156cVinson Lee											 allowed_values=('cygwin', 'darwin', 'freebsd', 'haiku', 'linux', 'sunos', 'windows')))
9341750107496858a047afa8d81d20fe903f285a78José Fonseca	opts.Add(BoolOption('embedded', 'embedded build', 'no'))
94601498ae73e654c2de997ea75075613a694d604dJosé Fonseca	opts.Add('toolchain', 'compiler toolchain', default_toolchain)
95bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wu	opts.Add(BoolOption('gles', 'EXPERIMENTAL: enable OpenGL ES support', 'no'))
96ea532f0e725bd68e7784189c9b7f6f7bf7f9d901José Fonseca	opts.Add(BoolOption('llvm', 'use LLVM', default_llvm))
97e411cd7b0a54d2f9b9f4cda4918aa7742ed5c2a6Andreas Fänger	opts.Add(BoolOption('openmp', 'EXPERIMENTAL: compile with openmp (swrast)', 'no'))
9867450f0644f61fc17ab1315124dfe50537d36e9eJosé Fonseca	opts.Add(BoolOption('debug', 'DEPRECATED: debug build', 'yes'))
9967450f0644f61fc17ab1315124dfe50537d36e9eJosé Fonseca	opts.Add(BoolOption('profile', 'DEPRECATED: profile build', 'no'))
1002699fce0d69db5158427c8b6c8194b2eefc5e58bJosé Fonseca	opts.Add(BoolOption('quiet', 'DEPRECATED: profile build', 'yes'))
1013d6892c4793ae1fd1ef82d40e4af8004393b0480Vinson Lee	opts.Add(BoolOption('texture_float', 'enable floating-point textures and renderbuffers', 'no'))
102c9be435c79e2bbc883701c5533ae0490780495beJosé Fonseca	if host_platform == 'windows':
103c9be435c79e2bbc883701c5533ae0490780495beJosé Fonseca		opts.Add(EnumOption('MSVS_VERSION', 'MS Visual C++ version', None, allowed_values=('7.1', '8.0', '9.0')))
104