1bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wu#######################################################################
2bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wu# SConscript for shared-glapi/es1api/es2api
3bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wu
4bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wufrom sys import executable as python_cmd
5bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wu
6bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I WuImport('*')
7bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wu
8bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wudef mapi_objects(env, printer, mode):
9bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wu    """Return mapi objects built for the given printer and mode."""
10bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wu    mapi_sources = {
111d1033926dc8deb6e22b918889ec4be65637e4bfJosé Fonseca        'glapi': [
121d1033926dc8deb6e22b918889ec4be65637e4bfJosé Fonseca            'entry.c',
131d1033926dc8deb6e22b918889ec4be65637e4bfJosé Fonseca            'mapi_glapi.c',
141d1033926dc8deb6e22b918889ec4be65637e4bfJosé Fonseca            'stub.c',
151d1033926dc8deb6e22b918889ec4be65637e4bfJosé Fonseca            'table.c',
161d1033926dc8deb6e22b918889ec4be65637e4bfJosé Fonseca            'u_current.c',
171d1033926dc8deb6e22b918889ec4be65637e4bfJosé Fonseca            'u_execmem.c',
181d1033926dc8deb6e22b918889ec4be65637e4bfJosé Fonseca        ],
19bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wu        'bridge': ['entry.c'],
20bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wu    }
21bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wu    mapi_defines = {
22bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wu        'glapi': ['MAPI_MODE_GLAPI'],
23bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wu        'bridge': ['MAPI_MODE_BRIDGE'],
24bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wu    }
25bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wu
26bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wu    header_name = '%s-tmp.h' % (printer)
27bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wu
28bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wu    # generate ABI header
29bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wu    header = env.CodeGenerate(
30bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wu        target = header_name,
31bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wu        script = '../mapi/mapi_abi.py',
32bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wu        source = '../glapi/gen/gl_and_es_API.xml',
33bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wu        command = python_cmd + ' $SCRIPT ' + \
34bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wu                '--printer %s --mode lib $SOURCE > $TARGET' % (printer),
35bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wu    )
36bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wu
37bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wu    cpppath = [
38bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wu        header[0].dir,
39bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wu        '#/include',
40bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wu        '#/src/mapi',
41bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wu    ]
42bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wu    
43bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wu    cppdefines = mapi_defines[mode] + [
44bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wu        'MAPI_ABI_HEADER=\\"%s\\"' % (header_name),
45bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wu    ]
46bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wu
47bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wu    if env['platform'] == 'windows':
48bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wu        if mode == 'glapi':
49bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wu            cppdefines += [
50bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wu                '_GLAPI_DLL_EXPORTS', # declare _glapi_* as __declspec(dllexport) in glapi.h
51bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wu            ]
52bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wu        else:
53bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wu            cppdefines += [
54bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wu                '_GDI32_', # prevent gl* being declared __declspec(dllimport) in MS headers
55bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wu                'BUILD_GL32', # declare gl* as __declspec(dllexport) in Mesa headers
56bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wu            ]
57bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wu
58bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wu    objects = []
59bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wu    for s in mapi_sources[mode]:
60bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wu        o = env.SharedObject(
61bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wu            target = '%s-%s' % (printer, s[:-2]),
62bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wu            source = '../mapi/' + s,
63bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wu            CPPPATH = cpppath,
64bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wu            CPPDEFINES = cppdefines,
65bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wu        )
66bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wu        objects.append(o[0])
67bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wu
68bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wu    env.Depends(objects, header)
69bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wu
70bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wu    return objects
71bb770af3a59e5935c108c05ee45490fc5668d4a3Chia-I Wu
7210b07665be5cff9fa9f03b0f7db459f3b380570dJosé Fonsecaenv = env.Clone()
7310b07665be5cff9fa9f03b0f7db459f3b380570dJosé Fonseca
7410b07665be5cff9fa9f03b0f7db459f3b380570dJosé Fonsecaenv['SHLIBPREFIX'] = 'lib'
7510b07665be5cff9fa9f03b0f7db459f3b380570dJosé Fonsecaenv['LIBPREFIX'] = 'lib'
7610b07665be5cff9fa9f03b0f7db459f3b380570dJosé Fonseca
7710b07665be5cff9fa9f03b0f7db459f3b380570dJosé Fonsecashared_glapi_objects = mapi_objects(env, 'shared-glapi', 'glapi')
7810b07665be5cff9fa9f03b0f7db459f3b380570dJosé Fonsecashared_glapi = env.SharedLibrary(
7910b07665be5cff9fa9f03b0f7db459f3b380570dJosé Fonseca    target = 'glapi',
8010b07665be5cff9fa9f03b0f7db459f3b380570dJosé Fonseca    source = shared_glapi_objects,
8110b07665be5cff9fa9f03b0f7db459f3b380570dJosé Fonseca)
8210b07665be5cff9fa9f03b0f7db459f3b380570dJosé Fonseca
8310b07665be5cff9fa9f03b0f7db459f3b380570dJosé Fonseca# manually add LIBPREFIX on windows
8410b07665be5cff9fa9f03b0f7db459f3b380570dJosé Fonsecaif env['platform'] == 'windows':
8510b07665be5cff9fa9f03b0f7db459f3b380570dJosé Fonseca    libs = ['libglapi']
8610b07665be5cff9fa9f03b0f7db459f3b380570dJosé Fonsecaelse:
8710b07665be5cff9fa9f03b0f7db459f3b380570dJosé Fonseca    libs = ['glapi']
8810b07665be5cff9fa9f03b0f7db459f3b380570dJosé Fonseca
8910b07665be5cff9fa9f03b0f7db459f3b380570dJosé Fonsecaes1api_objects = mapi_objects(env, 'es1api', 'bridge')
9010b07665be5cff9fa9f03b0f7db459f3b380570dJosé Fonsecaes1api = env.SharedLibrary(
9110b07665be5cff9fa9f03b0f7db459f3b380570dJosé Fonseca    target = 'GLESv1_CM',
9210b07665be5cff9fa9f03b0f7db459f3b380570dJosé Fonseca    source = es1api_objects,
9310b07665be5cff9fa9f03b0f7db459f3b380570dJosé Fonseca    LIBPATH = ['.'],
9410b07665be5cff9fa9f03b0f7db459f3b380570dJosé Fonseca    LIBS = libs,
9510b07665be5cff9fa9f03b0f7db459f3b380570dJosé Fonseca)
9610b07665be5cff9fa9f03b0f7db459f3b380570dJosé Fonseca
9710b07665be5cff9fa9f03b0f7db459f3b380570dJosé Fonsecaes2api_objects = mapi_objects(env, 'es2api', 'bridge')
9810b07665be5cff9fa9f03b0f7db459f3b380570dJosé Fonsecaes2api = env.SharedLibrary(
9910b07665be5cff9fa9f03b0f7db459f3b380570dJosé Fonseca    target = 'GLESv2',
10010b07665be5cff9fa9f03b0f7db459f3b380570dJosé Fonseca    source = es2api_objects,
10110b07665be5cff9fa9f03b0f7db459f3b380570dJosé Fonseca    LIBPATH = ['.'],
10210b07665be5cff9fa9f03b0f7db459f3b380570dJosé Fonseca    LIBS = libs,
10310b07665be5cff9fa9f03b0f7db459f3b380570dJosé Fonseca)
10410b07665be5cff9fa9f03b0f7db459f3b380570dJosé Fonseca
10510b07665be5cff9fa9f03b0f7db459f3b380570dJosé Fonsecaenv.InstallSharedLibrary(shared_glapi, version=(0, 0, 0))
10610b07665be5cff9fa9f03b0f7db459f3b380570dJosé Fonsecaenv.InstallSharedLibrary(es1api, version=(1, 0, 0))
10710b07665be5cff9fa9f03b0f7db459f3b380570dJosé Fonsecaenv.InstallSharedLibrary(es2api, version=(2, 0, 0))
10810b07665be5cff9fa9f03b0f7db459f3b380570dJosé Fonseca
10910b07665be5cff9fa9f03b0f7db459f3b380570dJosé Fonsecaif env['platform'] == 'windows':
11010b07665be5cff9fa9f03b0f7db459f3b380570dJosé Fonseca    shared_glapi = env.FindIxes(shared_glapi, 'LIBPREFIX', 'LIBSUFFIX')
11110b07665be5cff9fa9f03b0f7db459f3b380570dJosé Fonsecaelse:
11210b07665be5cff9fa9f03b0f7db459f3b380570dJosé Fonseca    shared_glapi = env.FindIxes(shared_glapi, 'SHLIBPREFIX', 'SHLIBSUFFIX')
11310b07665be5cff9fa9f03b0f7db459f3b380570dJosé Fonseca
11410b07665be5cff9fa9f03b0f7db459f3b380570dJosé Fonseca# build glapi bridge as a convenience libarary for libgl-xlib/libgl-gdi
11510b07665be5cff9fa9f03b0f7db459f3b380570dJosé Fonsecabridge_glapi_objects = mapi_objects(env, 'glapi', 'bridge')
11610b07665be5cff9fa9f03b0f7db459f3b380570dJosé Fonsecabridge_glapi = env.ConvenienceLibrary(
11710b07665be5cff9fa9f03b0f7db459f3b380570dJosé Fonseca    target = 'glapi_bridge',
11810b07665be5cff9fa9f03b0f7db459f3b380570dJosé Fonseca    source = bridge_glapi_objects,
11910b07665be5cff9fa9f03b0f7db459f3b380570dJosé Fonseca)
12010b07665be5cff9fa9f03b0f7db459f3b380570dJosé Fonseca
12110b07665be5cff9fa9f03b0f7db459f3b380570dJosé FonsecaExport(['shared_glapi', 'bridge_glapi'])
122