scons: add code to generate the various GL API files
authorBrian Paul <brianp@vmware.com>
Wed, 30 May 2012 16:08:11 +0000 (10:08 -0600)
committerBrian Paul <brianp@vmware.com>
Thu, 31 May 2012 15:40:35 +0000 (09:40 -0600)
This fixes recent build breakage when we began building the generated
API files from xml as part of the normal build process.

Fixes http://bugs.freedesktop.org/show_bug.cgi?id=50475

src/SConscript
src/gallium/targets/libgl-xlib/SConscript
src/glx/SConscript
src/mapi/glapi/SConscript
src/mapi/glapi/gen/SConscript [new file with mode: 0644]
src/mesa/SConscript
src/mesa/drivers/osmesa/SConscript

index 3d0087887f4b047e2b70308a1e7db4e18ccb4051..75c444677b3077892c5242e7b9acc6511d08c347 100644 (file)
@@ -16,6 +16,7 @@ if env['hostonly']:
 # used.  libgl-xlib and libgl-gdi adapt themselves to use the targets defined
 # in mapi/glapi-shared/SConscript.  mesa/SConscript also adapts itself to
 # enable OpenGL ES support.
+SConscript('mapi/glapi/gen/SConscript')
 SConscript('mapi/glapi/SConscript')
 SConscript('mesa/SConscript')
 
index 25a4582d7a33669e6d260a141813b15fb8183a62..1b92c30773028a38e952ba67feaee3251ed51c6e 100644 (file)
@@ -35,6 +35,9 @@ sources = [
     'xlib.c',
 ]
 
+# The sources depend on the python-generated GL API files/headers.
+env.Depends(sources, glapi_headers)
+
 if True:
     env.Append(CPPDEFINES = ['GALLIUM_TRACE', 'GALLIUM_RBUG', 'GALLIUM_GALAHAD', 'GALLIUM_SOFTPIPE'])
     env.Prepend(LIBS = [trace, rbug, galahad, softpipe])
index 17a5690ee863cb3d0ea5d4292ddda0be9dda3852..664cb86268da9dd228e0ae21dd0dc768b9a10bdb 100644 (file)
@@ -1,8 +1,11 @@
 Import('*')
 
+from sys import executable as python_cmd
+
 env = env.Clone()
 
 env.Prepend(CPPPATH = [
+       '.',           # the build/<platform>/glx/ directory
        '#include',
        '#include/GL/internal',
        '#src/mesa',
@@ -80,6 +83,54 @@ libgl = env.SharedLibrary(
     source = sources,
 )
 
+
+# Generate GLX-specific .c and .h files here.  Other GL API-related
+# files are used, but they're generated in mapi/glapi/gen/ since they're
+# used by other targets as well.
+
+GLAPI = '#src/mapi/glapi/'
+
+env.CodeGenerate(
+    target = 'indirect.c',
+    script = GLAPI + 'gen/glX_proto_send.py',
+    source = GLAPI + 'gen/gl_and_es_API.xml',
+    command = python_cmd + ' $SCRIPT -f $SOURCE -m proto > $TARGET'
+    )
+
+env.CodeGenerate(
+    target = 'indirect_size.c', 
+    script = GLAPI + 'gen/glX_proto_size.py',
+    source = GLAPI + 'gen/gl_API.xml',
+    command = python_cmd + ' $SCRIPT -f $SOURCE -m size_c --only-set > $TARGET'
+)
+
+env.CodeGenerate(
+    target = 'indirect_init.c', 
+    script = GLAPI + 'gen/glX_proto_send.py',
+    source = GLAPI + 'gen/gl_API.xml',
+    command = python_cmd + ' $SCRIPT -f $SOURCE -m init_c > $TARGET'
+)
+
+headers = []
+
+headers += env.CodeGenerate(
+    target = 'indirect_size.h',
+    script = GLAPI + 'gen/glX_proto_size.py',
+    source = GLAPI + 'gen/gl_API.xml',
+    command = python_cmd + ' $SCRIPT -f $SOURCE -m size_h --only-set -h _INDIRECT_SIZE_H > $TARGET'
+)
+
+headers += env.CodeGenerate(
+    target = 'indirect.h',
+    script = GLAPI + 'gen/glX_proto_send.py',
+    source = GLAPI + 'gen/gl_API.xml',
+    command = python_cmd + ' $SCRIPT -m init_h -f $SOURCE > $TARGET',
+    )
+
+
+env.Depends(sources, headers)
+
+
 libgl = env.InstallSharedLibrary(libgl, version=(1, 2))
 
 env.Alias('glx', libgl)
index 4097a7fe13894a556c381ec1ec8244b3ead5f849..ad007a6f43615fc84deec102b2e58fc0a0b9c5b1 100644 (file)
@@ -2,6 +2,8 @@
 # SConscript for glapi
 
 
+from sys import executable as python_cmd
+
 Import('*')
 
 env = env.Clone()
@@ -47,6 +49,8 @@ for s in mapi_sources:
 # Assembly sources
 #
 if env['gcc'] and env['platform'] not in ('darwin', 'windows'):
+    GLAPI = '#src/mapi/glapi/'
+
     if env['machine'] == 'x86':
         env.Append(CPPDEFINES = [
             'USE_X86_ASM',
@@ -54,6 +58,12 @@ if env['gcc'] and env['platform'] not in ('darwin', 'windows'):
         glapi_sources += [
             'glapi_x86.S',
         ]
+        env.CodeGenerate(
+            target = 'glapi_x86.S',
+            script = GLAPI + 'gen/gl_x86_asm.py',
+            source = GLAPI + 'gen/gl_API.xml',
+            command = python_cmd + ' $SCRIPT -f $SOURCE > $TARGET'
+            )
     elif env['machine'] == 'x86_64':
         env.Append(CPPDEFINES = [
             'USE_X86_64_ASM',
@@ -61,6 +71,12 @@ if env['gcc'] and env['platform'] not in ('darwin', 'windows'):
         glapi_sources += [
             'glapi_x86-64.S'
         ]
+        env.CodeGenerate(
+            target = 'glapi_x86-64.S',
+            script = GLAPI + 'gen/gl_x86-64_asm.py',
+            source = GLAPI + 'gen/gl_API.xml',
+            command = python_cmd + ' $SCRIPT -f $SOURCE > $TARGET'
+            )
     elif env['machine'] == 'sparc':
         env.Append(CPPDEFINES = [
             'USE_SPARC_ASM',
@@ -68,6 +84,12 @@ if env['gcc'] and env['platform'] not in ('darwin', 'windows'):
         glapi_sources += [
             'glapi_sparc.S'
         ]
+        env.CodeGenerate(
+            target = 'glapi_sparc.S',
+            script = GLAPI + 'gen/gl_SPARC_asm.py',
+            source = GLAPI + 'gen/gl_API.xml',
+            command = python_cmd + ' $SCRIPT -f $SOURCE > $TARGET'
+            )
     else:
         pass
 
@@ -81,3 +103,6 @@ glapi = env.ConvenienceLibrary(
     source = glapi_sources,
 )
 Export('glapi')
+
+
+env.Depends(glapi_sources, glapi_headers)
diff --git a/src/mapi/glapi/gen/SConscript b/src/mapi/glapi/gen/SConscript
new file mode 100644 (file)
index 0000000..81f69df
--- /dev/null
@@ -0,0 +1,42 @@
+Import('*')
+
+from sys import executable as python_cmd
+
+
+# Generate the GL API headers that are used by various parts of the
+# Mesa and GLX tree.  Other .c and .h files are generated elsewhere
+# if they're only used in one place.
+
+GLAPI = '#src/mapi/glapi/'
+
+glapi_headers = []
+
+glapi_headers += env.CodeGenerate(
+    target = '#src/mesa/main/dispatch.h',
+    script = GLAPI + 'gen/gl_table.py',
+    source = GLAPI + 'gen/gl_API.xml',
+    command = python_cmd + ' $SCRIPT -m remap_table -f $SOURCE > $TARGET',
+    )
+
+glapi_headers += env.CodeGenerate(
+    target = '#src/mapi/glapi/glapitemp.h',
+    script = GLAPI + 'gen/gl_apitemp.py',
+    source = GLAPI + 'gen/gl_API.xml',
+    command = python_cmd + ' $SCRIPT -f $SOURCE > $TARGET'
+    )
+
+glapi_headers += env.CodeGenerate(
+    target = '#src/mapi/glapi/glprocs.h',
+    script = GLAPI + 'gen/gl_procs.py',
+    source = GLAPI + 'gen/gl_API.xml',
+    command = python_cmd + ' $SCRIPT -f $SOURCE > $TARGET'
+    )
+
+glapi_headers += env.CodeGenerate(
+    target = '#src/mesa/main/remap_helper.h',
+    script = GLAPI + 'gen/remap_helper.py',
+    source = GLAPI + 'gen/gl_API.xml',
+    command = python_cmd + ' $SCRIPT -f $SOURCE > $TARGET'
+    )
+
+env.Export('glapi_headers')
index d7932c7c9cedac3c0b97595f84d04fd0fc4d2797..99bdfad46cda420b841da72955d485923b9f45d6 100644 (file)
@@ -6,6 +6,7 @@ Import('*')
 import filecmp
 import os
 import subprocess
+from sys import executable as python_cmd
 
 env = env.Clone()
 
@@ -328,8 +329,9 @@ mesa_sources = (
     statetracker_sources
 )
 
+GLAPI = '#src/mapi/glapi/'
+
 if env['gles']:
-    from sys import executable as python_cmd
 
     env.Append(CPPDEFINES = ['FEATURE_ES1=1', 'FEATURE_ES2=1'])
 
@@ -349,7 +351,6 @@ if env['gles']:
     )
 
     # generate GLES headers
-    GLAPI = '#src/mapi/glapi/'
     gles_headers = []
     gles_headers += env.CodeGenerate(
         target = 'main/api_exec_es1_dispatch.h',
@@ -452,6 +453,16 @@ if env['gcc'] and env['platform'] not in ('darwin', 'windows'):
         env.Append(CPPPATH = [matypes[0].dir])
 
 
+# The enums.c file is generated from the GL/ES API.xml file
+env.CodeGenerate(
+    target = 'main/enums.c',
+    script = GLAPI + 'gen/gl_enums.py',
+    source = GLAPI + 'gen/gl_and_es_API.xml',
+    command = python_cmd + ' $SCRIPT -f $SOURCE > $TARGET'
+    )
+
+# We also depend on the auto-generated GL API headers
+env.Depends(mesa_sources, glapi_headers)
 
 
 def write_git_sha1_h_file(filename):
index 5ccef5f130cb7cb5e6a9266d30a7fd0d1c2f015a..e4f23c2ac5eca82cef67a75cc85c7b660b1f2dd8 100644 (file)
@@ -34,3 +34,5 @@ osmesa = env.SharedLibrary(
 )
 
 env.Alias('osmesa', osmesa)
+
+env.Depends(sources, glapi_headers)