scons: Get GLSL code building correctly when cross compiling.
authorJosé Fonseca <jfonseca@vmware.com>
Thu, 10 Dec 2009 16:29:04 +0000 (16:29 +0000)
committerJosé Fonseca <jfonseca@vmware.com>
Thu, 10 Dec 2009 16:30:08 +0000 (16:30 +0000)
This is quite messy. GLSL code has to be built twice: one for the
host OS, another for the target OS.

SConstruct
src/SConscript
src/gallium/winsys/gdi/SConscript
src/glsl/SConscript [new file with mode: 0644]
src/glsl/apps/SConscript [deleted file]
src/glsl/cl/SConscript [deleted file]
src/glsl/pp/SConscript [deleted file]
src/mesa/shader/slang/library/SConscript

index e9baab0947b1fe056fdf3e8aedfe7d32a887f71e..e71fcd673a0234fffecf464cf4a0f2741e0a899d 100644 (file)
@@ -160,6 +160,25 @@ Export('env')
 # TODO: Build several variants at the same time?
 # http://www.scons.org/wiki/SimultaneousVariantBuilds
 
+if env['platform'] != common.default_platform:
+    # GLSL code has to be built twice -- one for the host OS, another for the target OS...
+
+    host_env = Environment(
+        # options are ignored
+        # default tool is used
+        toolpath = ['#scons'], 
+        ENV = os.environ,
+    )
+
+    host_env['platform'] = common.default_platform
+
+    SConscript(
+        'src/glsl/SConscript',
+        variant_dir = env['build'] + '/host',
+        duplicate = 0, # http://www.scons.org/doc/0.97/HTML/scons-user/x2261.html
+        exports={'env':host_env},
+    )
+
 SConscript(
        'src/SConscript',
        variant_dir = env['build'],
index f7fac33790bfd892f9b5c1ffa7943533ce6f7caf..6083fcbec98cc903930696e7a5572eedf0067f19 100644 (file)
@@ -1,8 +1,6 @@
 Import('*')
 
-SConscript('glsl/pp/SConscript')
-SConscript('glsl/cl/SConscript')
-SConscript('glsl/apps/SConscript')
+SConscript('glsl/SConscript')
 SConscript('gallium/SConscript')
 
 if 'mesa' in env['statetrackers']:
index 5b6364a01df2e1294deb2331d4bbe9632e063527..9fbe9e800c3b39498912f1b8b408a1d2ca30a16a 100644 (file)
@@ -39,5 +39,5 @@ if env['platform'] == 'windows':
     env.SharedLibrary(
         target ='opengl32',
         source = sources,
-        LIBS = wgl + glapi + mesa + drivers + auxiliaries + glsl + glslcl + env['LIBS'],
+        LIBS = wgl + glapi + mesa + drivers + auxiliaries + glsl + env['LIBS'],
     )
diff --git a/src/glsl/SConscript b/src/glsl/SConscript
new file mode 100644 (file)
index 0000000..6f1f81b
--- /dev/null
@@ -0,0 +1,68 @@
+import common
+
+Import('*')
+
+env = env.Clone()
+
+sources = [
+    'pp/sl_pp_context.c',
+    'pp/sl_pp_define.c',
+    'pp/sl_pp_dict.c',
+    'pp/sl_pp_error.c',
+    'pp/sl_pp_expression.c',
+    'pp/sl_pp_extension.c',
+    'pp/sl_pp_if.c',
+    'pp/sl_pp_line.c',
+    'pp/sl_pp_macro.c',
+    'pp/sl_pp_pragma.c',
+    'pp/sl_pp_process.c',
+    'pp/sl_pp_purify.c',
+    'pp/sl_pp_token.c',
+    'pp/sl_pp_version.c',
+    'cl/sl_cl_parse.c',
+]
+
+glsl = env.StaticLibrary(
+    target = 'glsl',
+    source = sources,
+)
+
+Export('glsl')
+
+env = env.Clone()
+
+if env['platform'] == 'windows':
+    env.PrependUnique(LIBS = [
+        'user32',
+    ])
+
+env.Prepend(LIBS = [glsl])
+
+env.Program(
+    target = 'purify',
+    source = ['apps/purify.c'],
+)
+
+env.Program(
+    target = 'tokenise',
+    source = ['apps/tokenise.c'],
+)
+
+env.Program(
+    target = 'version',
+    source = ['apps/version.c'],
+)
+
+env.Program(
+    target = 'process',
+    source = ['apps/process.c'],
+)
+
+glsl_compile = env.Program(
+    target = 'compile',
+    source = ['apps/compile.c'],
+)
+
+if env['platform'] == common.default_platform:
+    # Only export the GLSL compiler when building for the host platform
+    Export('glsl_compile')
diff --git a/src/glsl/apps/SConscript b/src/glsl/apps/SConscript
deleted file mode 100644 (file)
index 4c81b3b..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-Import('*')
-
-env = env.Clone()
-
-if env['platform'] == 'windows':
-    env.PrependUnique(LIBS = [
-        'user32',
-    ])
-
-env.Prepend(LIBS = [glsl, glslcl])
-
-env.Program(
-    target = 'purify',
-    source = ['purify.c'],
-)
-
-env.Program(
-    target = 'tokenise',
-    source = ['tokenise.c'],
-)
-
-env.Program(
-    target = 'version',
-    source = ['version.c'],
-)
-
-env.Program(
-    target = 'process',
-    source = ['process.c'],
-)
-
-glsl_compile = env.Program(
-    target = 'compile',
-    source = ['compile.c'],
-)
-Export('glsl_compile')
diff --git a/src/glsl/cl/SConscript b/src/glsl/cl/SConscript
deleted file mode 100644 (file)
index 9a4e4c1..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-Import('*')
-
-env = env.Clone()
-
-glslcl = env.StaticLibrary(
-    target = 'glslcl',
-    source = [
-        'sl_cl_parse.c',
-    ],
-)
-Export('glslcl')
diff --git a/src/glsl/pp/SConscript b/src/glsl/pp/SConscript
deleted file mode 100644 (file)
index 5bd615c..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-Import('*')
-
-env = env.Clone()
-
-glsl = env.StaticLibrary(
-    target = 'glsl',
-    source = [
-        'sl_pp_context.c',
-        'sl_pp_define.c',
-        'sl_pp_dict.c',
-        'sl_pp_error.c',
-        'sl_pp_expression.c',
-        'sl_pp_extension.c',
-        'sl_pp_if.c',
-        'sl_pp_line.c',
-        'sl_pp_macro.c',
-        'sl_pp_pragma.c',
-        'sl_pp_process.c',
-        'sl_pp_purify.c',
-        'sl_pp_token.c',
-        'sl_pp_version.c',
-    ],
-)
-Export('glsl')
index 8b3fd03b6bc58003dd7f481b727965a62c58e7e6..ef131146be56ba17d7896987d6448817c48b8b76 100644 (file)
@@ -5,13 +5,21 @@ Import('*')
 
 env = env.Clone()
 
+# See also http://www.scons.org/wiki/UsingCodeGenerators
+
+def glsl_compile_emitter(target, source, env):
+       env.Depends(target, glsl_compile)
+       return (target, source)
 bld_frag = Builder(
        action = glsl_compile[0].abspath + ' fragment $SOURCE $TARGET',
+       emitter = glsl_compile_emitter,
        suffix = '.gc',
        src_suffix = '_gc.h')
        
 bld_vert = Builder(
        action = glsl_compile[0].abspath + ' vertex $SOURCE $TARGET',
+       emitter = glsl_compile_emitter,
        suffix = '.gc',
        src_suffix = '_gc.h')