#######################################################################
# SConscript for glapi


from sys import executable as python_cmd

Import('*')

env = env.Clone()

env.MSVC2013Compat()

env.Append(CPPDEFINES = [
    'MAPI_MODE_UTIL',
])

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
        'KHRONOS_DLL_EXPORTS', # declare gl* as __declspec(dllexport) in Khronos headers
    ])
    if env['gles']:
        env.Append(CPPDEFINES = ['_GLAPI_DLL_EXPORTS'])
    else:
        # prevent _glapi_* from being declared __declspec(dllimport)
        env.Append(CPPDEFINES = ['_GLAPI_NO_EXPORTS'])

env.Append(CPPPATH = [
    '#/src',
    '#/src/mapi',
    '#/src/mesa',
    Dir('..'), # src/mapi build path
])

glapi_sources = [
    'glapi_dispatch.c',
    'glapi_entrypoint.c',
    'glapi_getproc.c',
    'glapi_nop.c',
    'glapi.c',
]

mapi_sources = [
    'u_current.c',
    'u_execmem.c',
]
for s in mapi_sources:
    o = env.SharedObject(s[:-2], '../' + s)
    glapi_sources.append(o)

#
# Assembly sources
#
if (env['gcc'] or env['clang']) and \
   env['platform'] not in ('cygwin', 'darwin', 'windows'):
    GLAPI = '#src/mapi/glapi/'
    sources = [GLAPI + 'gen/gl_and_es_API.xml'] + env.Glob(GLAPI + 'gen/*.xml')

    if env['machine'] == 'x86':
        env.Append(CPPDEFINES = [
            'USE_X86_ASM',
        ])
        glapi_sources += [
            'glapi_x86.S',
        ]
        env.CodeGenerate(
            target = 'glapi_x86.S',
            script = GLAPI + 'gen/gl_x86_asm.py',
            source = sources,
            command = python_cmd + ' $SCRIPT -f $SOURCE > $TARGET'
            )
    elif env['machine'] == 'x86_64':
        env.Append(CPPDEFINES = [
            'USE_X86_64_ASM',
        ])
        glapi_sources += [
            'glapi_x86-64.S'
        ]
        env.CodeGenerate(
            target = 'glapi_x86-64.S',
            script = GLAPI + 'gen/gl_x86-64_asm.py',
            source = sources,
            command = python_cmd + ' $SCRIPT -f $SOURCE > $TARGET'
            )
    elif env['machine'] == 'sparc':
        env.Append(CPPDEFINES = [
            'USE_SPARC_ASM',
        ])
        glapi_sources += [
            'glapi_sparc.S'
        ]
        env.CodeGenerate(
            target = 'glapi_sparc.S',
            script = GLAPI + 'gen/gl_SPARC_asm.py',
            source = sources,
            command = python_cmd + ' $SCRIPT -f $SOURCE > $TARGET'
            )
    else:
        pass

glapi = env.ConvenienceLibrary(
    target = 'glapi',
    source = glapi_sources,
)
Export('glapi')