mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-26 10:18:12 +02:00
SCons doesn't understand nir yet and doesn't want to compile the glsl to nir pass. Move the files to their own variable so we can add it only for automake. Tested-by: Brian Paul <brianp@vmware.com>
130 lines
3.4 KiB
Python
130 lines
3.4 KiB
Python
import common
|
|
|
|
Import('*')
|
|
|
|
from sys import executable as python_cmd
|
|
|
|
env = env.Clone()
|
|
|
|
env.MSVC2013Compat()
|
|
|
|
env.Prepend(CPPPATH = [
|
|
'#include',
|
|
'#src',
|
|
'#src/mapi',
|
|
'#src/mesa',
|
|
'#src/gallium/include',
|
|
'#src/gallium/auxiliary',
|
|
'#src/glsl',
|
|
'#src/glsl/nir',
|
|
'#src/glsl/glcpp',
|
|
])
|
|
|
|
env.Prepend(LIBS = [mesautil])
|
|
|
|
# Make glcpp-parse.h and glsl_parser.h reachable from the include path.
|
|
env.Append(CPPPATH = [Dir('.').abspath, Dir('glcpp').abspath])
|
|
|
|
glcpp_env = env.Clone()
|
|
glcpp_env.Append(YACCFLAGS = [
|
|
'-d',
|
|
'-p', 'glcpp_parser_'
|
|
])
|
|
|
|
glsl_env = env.Clone()
|
|
glsl_env.Append(YACCFLAGS = [
|
|
'--defines=%s' % File('glsl_parser.h').abspath,
|
|
'-p', '_mesa_glsl_',
|
|
])
|
|
|
|
# without this line scons will expect "glsl_parser.hpp" instead of
|
|
# "glsl_parser.h", causing glsl_parser.cpp to be regenerated every time
|
|
glsl_env['YACCHXXFILESUFFIX'] = '.h'
|
|
|
|
glcpp_lexer = glcpp_env.CFile('glcpp/glcpp-lex.c', 'glcpp/glcpp-lex.l')
|
|
glcpp_parser = glcpp_env.CFile('glcpp/glcpp-parse.c', 'glcpp/glcpp-parse.y')
|
|
glsl_lexer = glsl_env.CXXFile('glsl_lexer.cpp', 'glsl_lexer.ll')
|
|
glsl_parser = glsl_env.CXXFile('glsl_parser.cpp', 'glsl_parser.yy')
|
|
|
|
# common generated sources
|
|
glsl_sources = [
|
|
glcpp_lexer,
|
|
glcpp_parser[0],
|
|
glsl_lexer,
|
|
glsl_parser[0],
|
|
]
|
|
|
|
# parse Makefile.sources
|
|
source_lists = env.ParseSourceList('Makefile.sources')
|
|
|
|
# add non-generated sources
|
|
for l in ('LIBGLCPP_FILES', 'LIBGLSL_FILES'):
|
|
glsl_sources += source_lists[l]
|
|
|
|
# add nir/glsl_types.cpp manually, because SCons still doesn't know about NIR.
|
|
# XXX: Remove this once we build NIR and NIR_FILES.
|
|
glsl_sources += [
|
|
'nir/glsl_types.cpp',
|
|
'nir/shader_enums.c',
|
|
]
|
|
|
|
if env['msvc']:
|
|
env.Prepend(CPPPATH = ['#/src/getopt'])
|
|
env.PrependUnique(LIBS = [getopt])
|
|
|
|
# Copy these files to avoid generation object files into src/mesa/program
|
|
env.Prepend(CPPPATH = ['#src/mesa/main'])
|
|
env.Command('imports.c', '#src/mesa/main/imports.c', Copy('$TARGET', '$SOURCE'))
|
|
# Copy these files to avoid generation object files into src/mesa/program
|
|
env.Prepend(CPPPATH = ['#src/mesa/program'])
|
|
env.Command('prog_hash_table.c', '#src/mesa/program/prog_hash_table.c', Copy('$TARGET', '$SOURCE'))
|
|
env.Command('symbol_table.c', '#src/mesa/program/symbol_table.c', Copy('$TARGET', '$SOURCE'))
|
|
env.Command('dummy_errors.c', '#src/mesa/program/dummy_errors.c', Copy('$TARGET', '$SOURCE'))
|
|
|
|
compiler_objs = env.StaticObject(source_lists['GLSL_COMPILER_CXX_FILES'])
|
|
|
|
mesa_objs = env.StaticObject([
|
|
'imports.c',
|
|
'prog_hash_table.c',
|
|
'symbol_table.c',
|
|
'dummy_errors.c',
|
|
])
|
|
|
|
compiler_objs += mesa_objs
|
|
|
|
glsl = env.ConvenienceLibrary(
|
|
target = 'glsl',
|
|
source = glsl_sources,
|
|
)
|
|
|
|
# SCons builtin dependency scanner doesn't detect that glsl_lexer.ll depends on
|
|
# glsl_parser.h
|
|
env.Depends(glsl, glsl_parser)
|
|
|
|
Export('glsl')
|
|
|
|
# Skip building these programs as they will cause SCons error "Two environments
|
|
# with different actions were specified for the same target"
|
|
if env['crosscompile'] or env['embedded']:
|
|
Return()
|
|
|
|
env = env.Clone()
|
|
|
|
if env['platform'] == 'windows':
|
|
env.PrependUnique(LIBS = [
|
|
'user32',
|
|
])
|
|
|
|
env.Prepend(LIBS = [glsl])
|
|
|
|
glsl_compiler = env.Program(
|
|
target = 'glsl_compiler',
|
|
source = compiler_objs,
|
|
)
|
|
env.Alias('glsl_compiler', glsl_compiler)
|
|
|
|
glcpp = env.Program(
|
|
target = 'glcpp/glcpp',
|
|
source = ['glcpp/glcpp.c'] + mesa_objs,
|
|
)
|
|
env.Alias('glcpp', glcpp)
|