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