#######################################################################
# SConscript for Mesa


Import('*')
from sys import executable as python_cmd

env = env.Clone()

env.MSVC2013Compat()

env.Append(CPPPATH = [
    '../compiler/nir',  # for generated nir_opcodes.h, etc
    '../compiler/glsl',  # for generated headers
    '#/src',
    Dir('../mapi'), # src/mapi build path
    '#/src/mapi',
    Dir('.'), # src/mesa build path
    '#/src/mesa',
    Dir('main'),  # src/mesa/main/ build path
    '#/src/mesa/main',
    '#/src/gallium/include',
    '#/src/gallium/auxiliary',
])

if env['platform'] == 'windows':
    env.Append(CPPDEFINES = [
        '_GDI32_', # prevent gl* being declared __declspec(dllimport) in MS headers
        'BUILD_GL32', # declare gl* as __declspec(dllexport) in Mesa headers
        '_GLAPI_NO_EXPORTS', # prevent _glapi_* from being declared __declspec(dllimport)
    ])

# parse Makefile.sources
source_lists = env.ParseSourceList('Makefile.sources')

env.Append(YACCFLAGS = ['-d', '-p', '_mesa_program_'])
env.CFile('program/lex.yy.c', 'program/program_lexer.l')
env.CFile('program/program_parse.tab.c', 'program/program_parse.y')

mesa_sources = (
    source_lists['MESA_FILES'] +
    source_lists['PROGRAM_FILES'] +
    source_lists['PROGRAM_NIR_FILES'] +
    source_lists['STATETRACKER_FILES']
)

GLAPI = '#src/mapi/glapi/'

get_hash_header = env.CodeGenerate(
      target = 'main/get_hash.h',
      script = 'main/get_hash_generator.py',
      source = [GLAPI + 'gen/gl_and_es_API.xml'] + env.Glob(GLAPI + 'gen/*.xml'),
      command = python_cmd + ' $SCRIPT ' + ' -f $SOURCE > $TARGET'
)

format_info = env.CodeGenerate(
      target = 'main/format_info.h',
      script = 'main/format_info.py',
      source = 'main/formats.csv',
      command = python_cmd + ' $SCRIPT ' + ' $SOURCE > $TARGET'
)

format_pack = env.CodeGenerate(
      target = 'main/format_pack.c',
      script = 'main/format_pack.py',
      source = 'main/formats.csv',
      command = python_cmd + ' $SCRIPT ' + ' $SOURCE > $TARGET'
)

format_unpack = env.CodeGenerate(
      target = 'main/format_unpack.c',
      script = 'main/format_unpack.py',
      source = 'main/formats.csv',
      command = python_cmd + ' $SCRIPT ' + ' $SOURCE > $TARGET'
)

format_fallback = env.CodeGenerate(
      target = 'main/format_fallback.c',
      script = 'main/format_fallback.py',
      source = 'main/formats.csv',
      command = python_cmd + ' $SCRIPT ' + ' $SOURCE ' + ' $TARGET'
)

#
# Assembly sources
#
if env['platform'] not in ('cygwin', 'darwin', 'windows', 'haiku'):
    if env['machine'] == 'x86':
        env.Append(CPPDEFINES = [
            'USE_X86_ASM',
            'USE_MMX_ASM',
            'USE_3DNOW_ASM',
            'USE_SSE_ASM',
        ])
        mesa_sources += source_lists['X86_FILES']
    elif env['machine'] == 'x86_64':
        env.Append(CPPDEFINES = [
            'USE_X86_64_ASM',
        ])
        mesa_sources += source_lists['X86_64_FILES']
    elif env['machine'] == 'sparc':
        mesa_sources += source_lists['SPARC_FILES']
    else:
        pass

# The marshal_generated.c file is generated from the GL/ES API.xml file
for i in range(8):
    env.CodeGenerate(
        target = 'main/marshal_generated{0}.c'.format(i),
        script = GLAPI + 'gen/gl_marshal.py',
        source = [GLAPI + 'gen/gl_and_es_API.xml'] + env.Glob(GLAPI + 'gen/*.xml'),
        command = python_cmd + ' $SCRIPT -f $SOURCE -i {0} -n 8 > $TARGET'.format(i)
        )

# The marshal_generated.h file is generated from the GL/ES API.xml file
env.CodeGenerate(
    target = 'main/marshal_generated.h',
    script = GLAPI + 'gen/gl_marshal_h.py',
    source = [GLAPI + 'gen/gl_and_es_API.xml'] + env.Glob(GLAPI + 'gen/*.xml'),
    command = python_cmd + ' $SCRIPT -f $SOURCE > $TARGET'
    )

#
# Libraries
#

mesa = env.ConvenienceLibrary(
    target = 'mesa',
    source = mesa_sources,
)

env.Alias('mesa', mesa)

Export('mesa')
