Home | History | Annotate | Line # | Download | only in shared-glapi
SConscript revision 1.1
      1  1.1  mrg #######################################################################
      2  1.1  mrg # SConscript for shared-glapi/es1api/es2api
      3  1.1  mrg 
      4  1.1  mrg from sys import executable as python_cmd
      5  1.1  mrg 
      6  1.1  mrg Import('*')
      7  1.1  mrg 
      8  1.1  mrg def mapi_objects(env, printer, mode):
      9  1.1  mrg     """Return mapi objects built for the given printer and mode."""
     10  1.1  mrg     mapi_sources = {
     11  1.1  mrg         'glapi': [
     12  1.1  mrg             'entry.c',
     13  1.1  mrg             'mapi_glapi.c',
     14  1.1  mrg             'stub.c',
     15  1.1  mrg             'table.c',
     16  1.1  mrg             'u_current.c',
     17  1.1  mrg             'u_execmem.c',
     18  1.1  mrg         ],
     19  1.1  mrg         'bridge': ['entry.c'],
     20  1.1  mrg     }
     21  1.1  mrg     mapi_defines = {
     22  1.1  mrg         'glapi': ['MAPI_MODE_GLAPI'],
     23  1.1  mrg         'bridge': ['MAPI_MODE_BRIDGE'],
     24  1.1  mrg     }
     25  1.1  mrg 
     26  1.1  mrg     header_name = '%s-tmp.h' % (printer)
     27  1.1  mrg 
     28  1.1  mrg     # generate ABI header
     29  1.1  mrg     header = env.CodeGenerate(
     30  1.1  mrg         target = header_name,
     31  1.1  mrg         script = '../mapi_abi.py',
     32  1.1  mrg         source = '../glapi/gen/gl_and_es_API.xml',
     33  1.1  mrg         command = python_cmd + ' $SCRIPT ' + \
     34  1.1  mrg                 '--printer %s --mode lib $SOURCE > $TARGET' % (printer),
     35  1.1  mrg     )
     36  1.1  mrg 
     37  1.1  mrg     cpppath = [
     38  1.1  mrg         header[0].dir,
     39  1.1  mrg         '#/include',
     40  1.1  mrg         '#/src/mapi',
     41  1.1  mrg     ]
     42  1.1  mrg     
     43  1.1  mrg     cppdefines = mapi_defines[mode] + [
     44  1.1  mrg         'MAPI_ABI_HEADER=\\"%s\\"' % (header_name),
     45  1.1  mrg     ]
     46  1.1  mrg 
     47  1.1  mrg     if env['platform'] == 'windows':
     48  1.1  mrg         if mode == 'glapi':
     49  1.1  mrg             cppdefines += [
     50  1.1  mrg                 '_GLAPI_DLL_EXPORTS', # declare _glapi_* as __declspec(dllexport) in glapi.h
     51  1.1  mrg             ]
     52  1.1  mrg         else:
     53  1.1  mrg             cppdefines += [
     54  1.1  mrg                 '_GDI32_', # prevent gl* being declared __declspec(dllimport) in MS headers
     55  1.1  mrg                 'BUILD_GL32', # declare gl* as __declspec(dllexport) in Mesa headers
     56  1.1  mrg             ]
     57  1.1  mrg 
     58  1.1  mrg     objects = []
     59  1.1  mrg     for s in mapi_sources[mode]:
     60  1.1  mrg         o = env.SharedObject(
     61  1.1  mrg             target = '%s-%s' % (printer, s[:-2]),
     62  1.1  mrg             source = '../' + s,
     63  1.1  mrg             CPPPATH = cpppath,
     64  1.1  mrg             CPPDEFINES = cppdefines,
     65  1.1  mrg         )
     66  1.1  mrg         objects.append(o[0])
     67  1.1  mrg 
     68  1.1  mrg     env.Depends(objects, header)
     69  1.1  mrg 
     70  1.1  mrg     return objects
     71  1.1  mrg 
     72  1.1  mrg env = env.Clone()
     73  1.1  mrg 
     74  1.1  mrg env['SHLIBPREFIX'] = 'lib'
     75  1.1  mrg env['LIBPREFIX'] = 'lib'
     76  1.1  mrg 
     77  1.1  mrg shared_glapi_objects = mapi_objects(env, 'shared-glapi', 'glapi')
     78  1.1  mrg shared_glapi = env.SharedLibrary(
     79  1.1  mrg     target = 'glapi',
     80  1.1  mrg     source = shared_glapi_objects,
     81  1.1  mrg )
     82  1.1  mrg 
     83  1.1  mrg # manually add LIBPREFIX on windows
     84  1.1  mrg if env['platform'] == 'windows':
     85  1.1  mrg     libs = ['libglapi']
     86  1.1  mrg else:
     87  1.1  mrg     libs = ['glapi']
     88  1.1  mrg 
     89  1.1  mrg es1api_objects = mapi_objects(env, 'es1api', 'bridge')
     90  1.1  mrg es1api = env.SharedLibrary(
     91  1.1  mrg     target = 'GLESv1_CM',
     92  1.1  mrg     source = es1api_objects,
     93  1.1  mrg     LIBPATH = ['.'],
     94  1.1  mrg     LIBS = libs,
     95  1.1  mrg )
     96  1.1  mrg 
     97  1.1  mrg es2api_objects = mapi_objects(env, 'es2api', 'bridge')
     98  1.1  mrg es2api = env.SharedLibrary(
     99  1.1  mrg     target = 'GLESv2',
    100  1.1  mrg     source = es2api_objects,
    101  1.1  mrg     LIBPATH = ['.'],
    102  1.1  mrg     LIBS = libs,
    103  1.1  mrg )
    104  1.1  mrg 
    105  1.1  mrg env.InstallSharedLibrary(shared_glapi, version=(0, 0, 0))
    106  1.1  mrg env.InstallSharedLibrary(es1api, version=(1, 0, 0))
    107  1.1  mrg env.InstallSharedLibrary(es2api, version=(2, 0, 0))
    108  1.1  mrg 
    109  1.1  mrg if env['platform'] == 'windows':
    110  1.1  mrg     shared_glapi = env.FindIxes(shared_glapi, 'LIBPREFIX', 'LIBSUFFIX')
    111  1.1  mrg else:
    112  1.1  mrg     shared_glapi = env.FindIxes(shared_glapi, 'SHLIBPREFIX', 'SHLIBSUFFIX')
    113  1.1  mrg 
    114  1.1  mrg # build glapi bridge as a convenience libarary for libgl-xlib/libgl-gdi
    115  1.1  mrg bridge_glapi_objects = mapi_objects(env, 'glapi', 'bridge')
    116  1.1  mrg bridge_glapi = env.ConvenienceLibrary(
    117  1.1  mrg     target = 'glapi_bridge',
    118  1.1  mrg     source = bridge_glapi_objects,
    119  1.1  mrg )
    120  1.1  mrg 
    121  1.1  mrg Export(['shared_glapi', 'bridge_glapi'])
    122