diff options
author | Brian Paul <[email protected]> | 2011-08-25 16:50:56 -0600 |
---|---|---|
committer | Brian Paul <[email protected]> | 2011-08-26 08:05:36 -0600 |
commit | cdb7396390b0afffc0d33c9aba2898012802e6d0 (patch) | |
tree | 2cb735b00ff543b3d09c9d32b75c6b61e7b79f28 | |
parent | 3d1af78fdc4319b04f9cf324106f127b498b962d (diff) |
scons: don't compile some files with -gstabs if using mingw32
Compiling some (large) files with i686-pc-mingw32-gcc 4.2.2 (at least)
and the -gstabs option triggers a compiler error. Use this work-around
to simply compile the effected files without -gstabs.
-rw-r--r-- | scons/crossmingw.py | 38 | ||||
-rw-r--r-- | src/gallium/auxiliary/SConscript | 4 | ||||
-rw-r--r-- | src/mapi/glapi/SConscript | 5 |
3 files changed, 47 insertions, 0 deletions
diff --git a/scons/crossmingw.py b/scons/crossmingw.py index cc046229e2c..4a695a440d6 100644 --- a/scons/crossmingw.py +++ b/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/src/gallium/auxiliary/SConscript b/src/gallium/auxiliary/SConscript index e00040d97ab..07c420e138d 100644 --- a/src/gallium/auxiliary/SConscript +++ b/src/gallium/auxiliary/SConscript @@ -58,6 +58,10 @@ if env['llvm']: 'GALLIVM_CPP_SOURCES' ]) + if env['toolchain'] == 'crossmingw': + # compile lp_bld_misc.cpp without -gstabs option + source = env.compile_without_gstabs(source, "gallivm/lp_bld_misc.cpp") + gallium = env.ConvenienceLibrary( target = 'gallium', source = source, diff --git a/src/mapi/glapi/SConscript b/src/mapi/glapi/SConscript index a7764745eda..fdd65790013 100644 --- a/src/mapi/glapi/SConscript +++ b/src/mapi/glapi/SConscript @@ -74,6 +74,11 @@ if env['platform'] != 'winddk': else: pass + if env['toolchain'] == 'crossmingw': + # compile these files without -gstabs option + glapi_sources = env.compile_without_gstabs(glapi_sources, "glapi_dispatch.c") + glapi_sources = env.compile_without_gstabs(glapi_sources, "glapi_getproc.c") + glapi = env.ConvenienceLibrary( target = 'glapi', source = glapi_sources, |