Commit 491f384c authored by José Fonseca's avatar José Fonseca
Browse files

scons: Get GLSL code building correctly when cross compiling.

This is quite messy. GLSL code has to be built twice: one for the
host OS, another for the target OS.
parent 289eab53
......@@ -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'],
......
Import('*')
SConscript('glsl/pp/SConscript')
SConscript('glsl/cl/SConscript')
SConscript('glsl/apps/SConscript')
SConscript('glsl/SConscript')
SConscript('gallium/SConscript')
if 'mesa' in env['statetrackers']:
......
......@@ -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'],
)
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')
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')
Import('*')
env = env.Clone()
glslcl = env.StaticLibrary(
target = 'glslcl',
source = [
'sl_cl_parse.c',
],
)
Export('glslcl')
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')
......@@ -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')
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment