# 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'],
Import('*')
-SConscript('glsl/pp/SConscript')
-SConscript('glsl/cl/SConscript')
-SConscript('glsl/apps/SConscript')
+SConscript('glsl/SConscript')
SConscript('gallium/SConscript')
if 'mesa' in env['statetrackers']:
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'],
)
--- /dev/null
+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')
+++ /dev/null
-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')
+++ /dev/null
-Import('*')
-
-env = env.Clone()
-
-glslcl = env.StaticLibrary(
- target = 'glslcl',
- source = [
- 'sl_cl_parse.c',
- ],
-)
-Export('glslcl')
+++ /dev/null
-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')
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')