• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#######################################################################
2# SConscript for Mesa
3
4
5Import('*')
6from sys import executable as python_cmd
7
8env = env.Clone()
9
10env.MSVC2013Compat()
11
12env.Append(CPPPATH = [
13    '../compiler/nir',  # for generated nir_opcodes.h, etc
14    '../compiler/glsl',  # for generated headers
15    '#/src',
16    Dir('../mapi'), # src/mapi build path
17    '#/src/mapi',
18    Dir('.'), # src/mesa build path
19    '#/src/mesa',
20    Dir('main'),  # src/mesa/main/ build path
21    '#/src/mesa/main',
22    '#/src/gallium/include',
23    '#/src/gallium/auxiliary',
24])
25
26if env['platform'] == 'windows':
27    env.Append(CPPDEFINES = [
28        '_GDI32_', # prevent gl* being declared __declspec(dllimport) in MS headers
29        'BUILD_GL32', # declare gl* as __declspec(dllexport) in Mesa headers
30    ])
31    if not env['gles']:
32        # prevent _glapi_* from being declared __declspec(dllimport)
33        env.Append(CPPDEFINES = ['_GLAPI_NO_EXPORTS'])
34
35# parse Makefile.sources
36source_lists = env.ParseSourceList('Makefile.sources')
37
38env.Append(YACCFLAGS = ['-d', '-p', '_mesa_program_'])
39env.CFile('program/lex.yy.c', 'program/program_lexer.l')
40env.CFile('program/program_parse.tab.c', 'program/program_parse.y')
41
42mesa_sources = (
43    source_lists['MESA_FILES'] +
44    source_lists['PROGRAM_FILES'] +
45    source_lists['STATETRACKER_FILES']
46)
47
48GLAPI = '#src/mapi/glapi/'
49
50get_hash_header = env.CodeGenerate(
51      target = 'main/get_hash.h',
52      script = 'main/get_hash_generator.py',
53      source = [GLAPI + 'gen/gl_and_es_API.xml'] + env.Glob(GLAPI + 'gen/*.xml'),
54      command = python_cmd + ' $SCRIPT ' + ' -f $SOURCE > $TARGET'
55)
56
57format_info = env.CodeGenerate(
58      target = 'main/format_info.h',
59      script = 'main/format_info.py',
60      source = 'main/formats.csv',
61      command = python_cmd + ' $SCRIPT ' + ' $SOURCE > $TARGET'
62)
63
64format_pack = env.CodeGenerate(
65      target = 'main/format_pack.c',
66      script = 'main/format_pack.py',
67      source = 'main/formats.csv',
68      command = python_cmd + ' $SCRIPT ' + ' $SOURCE > $TARGET'
69)
70
71format_unpack = env.CodeGenerate(
72      target = 'main/format_unpack.c',
73      script = 'main/format_unpack.py',
74      source = 'main/formats.csv',
75      command = python_cmd + ' $SCRIPT ' + ' $SOURCE > $TARGET'
76)
77
78format_fallback = env.CodeGenerate(
79      target = 'main/format_fallback.c',
80      script = 'main/format_fallback.py',
81      source = 'main/formats.csv',
82      command = python_cmd + ' $SCRIPT ' + ' $SOURCE ' + ' $TARGET'
83)
84
85#
86# Assembly sources
87#
88if env['platform'] not in ('cygwin', 'darwin', 'windows', 'haiku'):
89    if env['machine'] == 'x86':
90        env.Append(CPPDEFINES = [
91            'USE_X86_ASM',
92            'USE_MMX_ASM',
93            'USE_3DNOW_ASM',
94            'USE_SSE_ASM',
95        ])
96        mesa_sources += source_lists['X86_FILES']
97    elif env['machine'] == 'x86_64':
98        env.Append(CPPDEFINES = [
99            'USE_X86_64_ASM',
100        ])
101        mesa_sources += source_lists['X86_64_FILES']
102    elif env['machine'] == 'sparc':
103        mesa_sources += source_lists['SPARC_FILES']
104    else:
105        pass
106
107    # Generate matypes.h
108    if env['machine'] in ('x86', 'x86_64'):
109        # See http://www.scons.org/wiki/UsingCodeGenerators
110        gen_matypes = env.Program(
111            target = 'gen_matypes',
112            source = 'x86/gen_matypes.c',
113        )
114        matypes = env.Command(
115            'matypes.h',
116            gen_matypes,
117            gen_matypes[0].abspath + ' > $TARGET',
118        )
119        # Add the dir containing the generated header (somewhere inside  the
120        # build dir) to the include path
121        env.Prepend(CPPPATH = [matypes[0].dir])
122
123
124# The marshal_generated.c file is generated from the GL/ES API.xml file
125env.CodeGenerate(
126    target = 'main/marshal_generated.c',
127    script = GLAPI + 'gen/gl_marshal.py',
128    source = [GLAPI + 'gen/gl_and_es_API.xml'] + env.Glob(GLAPI + 'gen/*.xml'),
129    command = python_cmd + ' $SCRIPT -f $SOURCE > $TARGET'
130    )
131
132# The marshal_generated.h file is generated from the GL/ES API.xml file
133env.CodeGenerate(
134    target = 'main/marshal_generated.h',
135    script = GLAPI + 'gen/gl_marshal_h.py',
136    source = [GLAPI + 'gen/gl_and_es_API.xml'] + env.Glob(GLAPI + 'gen/*.xml'),
137    command = python_cmd + ' $SCRIPT -f $SOURCE > $TARGET'
138    )
139
140#
141# Libraries
142#
143
144mesa = env.ConvenienceLibrary(
145    target = 'mesa',
146    source = mesa_sources,
147)
148
149env.Alias('mesa', mesa)
150
151Export('mesa')
152
153SConscript('drivers/SConscript')
154