aboutsummaryrefslogtreecommitdiff
path: root/mesalib/scons
diff options
context:
space:
mode:
authormarha <marha@users.sourceforge.net>2011-08-29 14:48:31 +0200
committermarha <marha@users.sourceforge.net>2011-08-29 14:48:31 +0200
commit924a6ffc82a7af0ca311af711ea2cf973dc6ff15 (patch)
treef5ee6d0aaf321029a4abb12c3c051c0434dde308 /mesalib/scons
parent8e57a7fcbf736b8e437baf0bbccb93095d97617f (diff)
parent01df5d59e56a1b060568f8cad2e89f7eea22fc70 (diff)
downloadvcxsrv-924a6ffc82a7af0ca311af711ea2cf973dc6ff15.tar.gz
vcxsrv-924a6ffc82a7af0ca311af711ea2cf973dc6ff15.tar.bz2
vcxsrv-924a6ffc82a7af0ca311af711ea2cf973dc6ff15.zip
Merge remote-tracking branch 'origin/released'
Conflicts: apps/xwininfo/configure.ac apps/xwininfo/xwininfo.c libX11/configure.ac libX11/specs/libX11/AppC.xml libX11/specs/libX11/AppD.xml libX11/specs/libX11/CH03.xml libX11/specs/libX11/CH04.xml libX11/specs/libX11/CH05.xml libX11/specs/libX11/CH06.xml libX11/specs/libX11/CH07.xml libX11/specs/libX11/CH08.xml libX11/specs/libX11/CH09.xml libX11/specs/libX11/CH11.xml libX11/specs/libX11/CH12.xml libX11/specs/libX11/CH13.xml libX11/specs/libX11/CH14.xml libX11/specs/libX11/CH15.xml libX11/specs/libX11/CH16.xml libxcb/configure.ac libxcb/src/c_client.py libxcb/src/xcb_auth.c libxcb/src/xcb_util.c mesalib/common.py mesalib/configs/linux-dri mesalib/docs/GL3.txt mesalib/docs/download.html mesalib/docs/install.html mesalib/include/GL/internal/dri_interface.h mesalib/scons/custom.py mesalib/scons/gallium.py mesalib/src/gallium/auxiliary/util/u_math.h mesalib/src/gallium/auxiliary/util/u_vbuf_mgr.c mesalib/src/glsl/ast_function.cpp mesalib/src/glsl/ast_to_hir.cpp mesalib/src/glsl/glcpp/glcpp-parse.y mesalib/src/glsl/glsl_parser_extras.cpp mesalib/src/glsl/glsl_parser_extras.h mesalib/src/glsl/ir.cpp mesalib/src/glsl/ir.h mesalib/src/glsl/ir_clone.cpp mesalib/src/glsl/ir_print_visitor.cpp mesalib/src/glsl/ir_validate.cpp mesalib/src/glsl/linker.cpp mesalib/src/glsl/main.cpp mesalib/src/glsl/opt_tree_grafting.cpp mesalib/src/mapi/glapi/gen/Makefile mesalib/src/mapi/glapi/gen/gl_XML.py mesalib/src/mapi/glapi/gen/gl_table.py mesalib/src/mapi/glapi/glapi_mapi_tmp.h mesalib/src/mapi/glapi/glapi_sparc.S mesalib/src/mapi/glapi/glapi_x86-64.S mesalib/src/mapi/glapi/glapi_x86.S mesalib/src/mapi/glapi/glapitemp.h mesalib/src/mapi/glapi/glprocs.h mesalib/src/mapi/mapi/u_thread.c mesalib/src/mapi/mapi/u_thread.h mesalib/src/mesa/SConscript mesalib/src/mesa/drivers/common/driverfuncs.c mesalib/src/mesa/drivers/windows/gldirect/dglcontext.c mesalib/src/mesa/main/api_arrayelt.c mesalib/src/mesa/main/bufferobj.c mesalib/src/mesa/main/compiler.h mesalib/src/mesa/main/dd.h mesalib/src/mesa/main/dlist.c mesalib/src/mesa/main/enums.c mesalib/src/mesa/main/es_generator.py mesalib/src/mesa/main/fbobject.c mesalib/src/mesa/main/imports.h mesalib/src/mesa/main/mtypes.h mesalib/src/mesa/main/pbo.c mesalib/src/mesa/main/remap_helper.h mesalib/src/mesa/main/shared.c mesalib/src/mesa/main/texgetimage.c mesalib/src/mesa/main/teximage.c mesalib/src/mesa/main/uniforms.c mesalib/src/mesa/program/ir_to_mesa.cpp mesalib/src/mesa/program/prog_optimize.c mesalib/src/mesa/program/register_allocate.c mesalib/src/mesa/program/register_allocate.h mesalib/src/mesa/sources.mak mesalib/src/mesa/state_tracker/st_cb_bufferobjects.c mesalib/src/mesa/state_tracker/st_cb_texture.c mesalib/src/mesa/state_tracker/st_texture.h mesalib/src/mesa/swrast/s_context.c mesalib/src/mesa/tnl/t_draw.c mesalib/src/mesa/vbo/vbo_exec_array.c mesalib/src/mesa/vbo/vbo_save_api.c pixman/pixman/pixman-arm-common.h pixman/pixman/pixman-fast-path.c pixman/pixman/pixman-inlines.h pixman/test/Makefile.am pixman/test/utils.c pixman/test/utils.h xorg-server/configure.ac xorg-server/fb/fbblt.c xorg-server/hw/xquartz/darwin.c xorg-server/xkeyboard-config/symbols/de
Diffstat (limited to 'mesalib/scons')
-rw-r--r--mesalib/scons/crossmingw.py38
-rw-r--r--mesalib/scons/custom.py36
-rw-r--r--mesalib/scons/gallium.py12
-rw-r--r--mesalib/scons/llvm.py18
-rw-r--r--mesalib/scons/source_list.py123
5 files changed, 226 insertions, 1 deletions
diff --git a/mesalib/scons/crossmingw.py b/mesalib/scons/crossmingw.py
index cc046229e..4a695a440 100644
--- a/mesalib/scons/crossmingw.py
+++ b/mesalib/scons/crossmingw.py
@@ -128,6 +128,42 @@ res_builder = SCons.Builder.Builder(action=res_action, suffix='.o',
source_scanner=SCons.Tool.SourceFileScanner)
SCons.Tool.SourceFileScanner.add_scanner('.rc', SCons.Defaults.CScan)
+
+
+def compile_without_gstabs(env, sources, c_file):
+ '''This is a hack used to compile some source files without the
+ -gstabs option.
+
+ It seems that some versions of mingw32's gcc (4.4.2 at least) die
+ when compiling large files with the -gstabs option. -gstabs is
+ related to debug symbols and can be omitted from the effected
+ files.
+
+ This function compiles the given c_file without -gstabs, removes
+ the c_file from the sources list, then appends the new .o file to
+ sources. Then return the new sources list.
+ '''
+
+ # Modify CCFLAGS to not have -gstabs option:
+ env2 = env.Clone()
+ flags = str(env2['CCFLAGS'])
+ flags = flags.replace("-gstabs", "")
+ env2['CCFLAGS'] = SCons.Util.CLVar(flags)
+
+ # Build the special-case files:
+ obj_file = env2.SharedObject(c_file)
+
+ # Replace ".cpp" or ".c" with ".o"
+ o_file = c_file.replace(".cpp", ".o")
+ o_file = o_file.replace(".c", ".o")
+
+ # Replace the .c files with the specially-compiled .o file
+ sources.remove(c_file)
+ sources.append(o_file)
+
+ return sources
+
+
def generate(env):
mingw_prefix = find(env)
@@ -197,5 +233,7 @@ def generate(env):
# Avoid depending on gcc runtime DLLs
env.AppendUnique(LINKFLAGS = ['-static-libgcc'])
+ env.AddMethod(compile_without_gstabs, 'compile_without_gstabs')
+
def exists(env):
return find(env)
diff --git a/mesalib/scons/custom.py b/mesalib/scons/custom.py
index 5de5537bf..d006ded01 100644
--- a/mesalib/scons/custom.py
+++ b/mesalib/scons/custom.py
@@ -42,6 +42,7 @@ import SCons.Scanner
import fixes
+import source_list
def quietCommandLines(env):
# Quiet command lines
@@ -229,6 +230,40 @@ def createPkgConfigMethods(env):
env.AddMethod(pkg_use_modules, 'PkgUseModules')
+def parse_source_list(env, filename, names=None):
+ # parse the source list file
+ parser = source_list.SourceListParser()
+ src = env.File(filename).srcnode()
+ sym_table = parser.parse(src.abspath)
+
+ if names:
+ if isinstance(names, basestring):
+ names = [names]
+
+ symbols = names
+ else:
+ symbols = sym_table.keys()
+
+ # convert the symbol table to source lists
+ src_lists = {}
+ for sym in symbols:
+ val = sym_table[sym]
+ src_lists[sym] = [f for f in val.split(' ') if f]
+
+ # if names are given, concatenate the lists
+ if names:
+ srcs = []
+ for name in names:
+ srcs.extend(src_lists[name])
+
+ return srcs
+ else:
+ return src_lists
+
+def createParseSourceListMethod(env):
+ env.AddMethod(parse_source_list, 'ParseSourceList')
+
+
def generate(env):
"""Common environment generation code"""
@@ -240,6 +275,7 @@ def generate(env):
createConvenienceLibBuilder(env)
createCodeGenerateMethod(env)
createPkgConfigMethods(env)
+ createParseSourceListMethod(env)
# for debugging
#print env.Dump()
diff --git a/mesalib/scons/gallium.py b/mesalib/scons/gallium.py
index 1cdc11cb5..091c74078 100644
--- a/mesalib/scons/gallium.py
+++ b/mesalib/scons/gallium.py
@@ -596,6 +596,18 @@ def generate(env):
libs += ['m', 'pthread', 'dl']
env.Append(LIBS = libs)
+ # OpenMP
+ if env['openmp']:
+ if env['msvc']:
+ env.Append(CCFLAGS = ['/openmp'])
+ # When building openmp release VS2008 link.exe crashes with LNK1103 error.
+ # Workaround: overwrite PDB flags with empty value as it isn't required anyways
+ if env['build'] == 'release':
+ env['PDB'] = ''
+ if env['gcc']:
+ env.Append(CCFLAGS = ['-fopenmp'])
+ env.Append(LIBS = ['gomp'])
+
# Load tools
env.Tool('lex')
env.Tool('yacc')
diff --git a/mesalib/scons/llvm.py b/mesalib/scons/llvm.py
index 66f972df5..57fe922d0 100644
--- a/mesalib/scons/llvm.py
+++ b/mesalib/scons/llvm.py
@@ -92,7 +92,21 @@ def generate(env):
'HAVE_STDINT_H',
])
env.Prepend(LIBPATH = [os.path.join(llvm_dir, 'lib')])
- if llvm_version >= distutils.version.LooseVersion('2.7'):
+ if llvm_version >= distutils.version.LooseVersion('2.9'):
+ # 2.9
+ env.Prepend(LIBS = [
+ 'LLVMObject', 'LLVMMCJIT', 'LLVMMCDisassembler',
+ 'LLVMLinker', 'LLVMipo', 'LLVMInterpreter',
+ 'LLVMInstrumentation', 'LLVMJIT', 'LLVMExecutionEngine',
+ 'LLVMBitWriter', 'LLVMX86Disassembler', 'LLVMX86AsmParser',
+ 'LLVMMCParser', 'LLVMX86AsmPrinter', 'LLVMX86CodeGen',
+ 'LLVMSelectionDAG', 'LLVMX86Utils', 'LLVMX86Info', 'LLVMAsmPrinter',
+ 'LLVMCodeGen', 'LLVMScalarOpts', 'LLVMInstCombine',
+ 'LLVMTransformUtils', 'LLVMipa', 'LLVMAsmParser',
+ 'LLVMArchive', 'LLVMBitReader', 'LLVMAnalysis', 'LLVMTarget',
+ 'LLVMCore', 'LLVMMC', 'LLVMSupport',
+ ])
+ elif llvm_version >= distutils.version.LooseVersion('2.7'):
# 2.7
env.Prepend(LIBS = [
'LLVMLinker', 'LLVMipo', 'LLVMInterpreter',
@@ -121,6 +135,8 @@ def generate(env):
env.Append(LIBS = [
'imagehlp',
'psapi',
+ 'shell32',
+ 'advapi32'
])
if env['msvc']:
# Some of the LLVM C headers use the inline keyword without
diff --git a/mesalib/scons/source_list.py b/mesalib/scons/source_list.py
new file mode 100644
index 000000000..fbd3ef7dc
--- /dev/null
+++ b/mesalib/scons/source_list.py
@@ -0,0 +1,123 @@
+"""Source List Parser
+
+The syntax of a source list file is a very small subset of GNU Make. These
+features are supported
+
+ operators: +=, :=
+ line continuation
+ non-nested variable expansion
+ comment
+
+The goal is to allow Makefile's and SConscript's to share source listing.
+"""
+
+class SourceListParser(object):
+ def __init__(self):
+ self._reset()
+
+ def _reset(self, filename=None):
+ self.filename = filename
+
+ self.line_no = 1
+ self.line_cont = ''
+ self.symbol_table = {}
+
+ def _error(self, msg):
+ raise RuntimeError('%s:%d: %s' % (self.filename, self.line_no, msg))
+
+ def _next_dereference(self, val, cur):
+ """Locate the next $(...) in value."""
+ deref_pos = val.find('$', cur)
+ if deref_pos < 0:
+ return (-1, -1)
+ elif val[deref_pos + 1] != '(':
+ self._error('non-variable dereference')
+
+ deref_end = val.find(')', deref_pos + 2)
+ if deref_end < 0:
+ self._error('unterminated variable dereference')
+
+ return (deref_pos, deref_end + 1)
+
+ def _expand_value(self, val):
+ """Perform variable expansion."""
+ expanded = ''
+ cur = 0
+ while True:
+ deref_pos, deref_end = self._next_dereference(val, cur)
+ if deref_pos < 0:
+ expanded += val[cur:]
+ break
+
+ sym = val[(deref_pos + 2):(deref_end - 1)]
+ expanded += val[cur:deref_pos] + self.symbol_table[sym]
+ cur = deref_end
+
+ return expanded
+
+ def _parse_definition(self, line):
+ """Parse a variable definition line."""
+ op_pos = line.find('=')
+ op_end = op_pos + 1
+ if op_pos < 0:
+ self._error('not a variable definition')
+
+ if op_pos > 0 and line[op_pos - 1] in [':', '+']:
+ op_pos -= 1
+ else:
+ self._error('only := and += are supported')
+
+ # set op, sym, and val
+ op = line[op_pos:op_end]
+ sym = line[:op_pos].strip()
+ val = self._expand_value(line[op_end:].lstrip())
+
+ if op == ':=':
+ self.symbol_table[sym] = val
+ elif op == '+=':
+ self.symbol_table[sym] += ' ' + val
+
+ def _parse_line(self, line):
+ """Parse a source list line."""
+ # more lines to come
+ if line and line[-1] == '\\':
+ # spaces around "\\\n" are replaced by a single space
+ if self.line_cont:
+ self.line_cont += line[:-1].strip() + ' '
+ else:
+ self.line_cont = line[:-1].rstrip() + ' '
+ return 0
+
+ # combine with previous lines
+ if self.line_cont:
+ line = self.line_cont + line.lstrip()
+ self.line_cont = ''
+
+ if line:
+ begins_with_tab = (line[0] == '\t')
+
+ line = line.lstrip()
+ if line[0] != '#':
+ if begins_with_tab:
+ self._error('recipe line not supported')
+ else:
+ self._parse_definition(line)
+
+ return 1
+
+ def parse(self, filename):
+ """Parse a source list file."""
+ if self.filename != filename:
+ fp = open(filename)
+ lines = fp.read().splitlines()
+ fp.close()
+
+ try:
+ self._reset(filename)
+ for line in lines:
+ self.line_no += self._parse_line(line)
+ except:
+ self._reset()
+ raise
+
+ return self.symbol_table