X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=scons%2Fcrossmingw.py;h=23c56c0a2da573141a61b8756d47ee402fa92f53;hb=c57fb034b19156e06e2ec25d9b06a0e174d861c9;hp=9533b2b362c31cdce9aa7bf76b646b4673d39b73;hpb=1318848f782cce716d6376ca13aebf68b728e24c;p=mesa.git diff --git a/scons/crossmingw.py b/scons/crossmingw.py index 9533b2b362c..23c56c0a2da 100644 --- a/scons/crossmingw.py +++ b/scons/crossmingw.py @@ -42,7 +42,7 @@ import SCons.Tool import SCons.Util # This is what we search for to find mingw: -prefixes = SCons.Util.Split(""" +prefixes32 = SCons.Util.Split(""" mingw32- mingw32msvc- i386-mingw32- @@ -54,9 +54,20 @@ prefixes = SCons.Util.Split(""" i586-mingw32msvc- i686-mingw32msvc- i686-pc-mingw32- + i686-w64-mingw32- +""") +prefixes64 = SCons.Util.Split(""" + x86_64-w64-mingw32- + amd64-mingw32- + amd64-mingw32msvc- + amd64-pc-mingw32- """) def find(env): + if env['machine'] == 'x86_64': + prefixes = prefixes64 + else: + prefixes = prefixes32 for prefix in prefixes: # First search in the SCons path and then the OS path: if env.WhereIs(prefix + 'gcc') or SCons.Util.WhereIs(prefix + 'gcc'): @@ -117,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) @@ -174,14 +221,13 @@ def generate(env): env['LIBPREFIXES'] = [ 'lib', '' ] env['LIBSUFFIXES'] = [ '.a', '.lib' ] - # MinGW port of gdb does not handle well dwarf debug info which is the - # default in recent gcc versions - env.AppendUnique(CCFLAGS = ['-gstabs']) + # MinGW x86 port of gdb does not handle well dwarf debug info which is the + # default in recent gcc versions. The x64 port gdb from mingw-w64 seems to + # handle it fine though, so stick with the default there. + if env['machine'] != 'x86_64': + env.AppendUnique(CCFLAGS = ['-gstabs']) - env.AppendUnique(CPPDEFINES = [('__MSVCRT_VERSION__', '0x0700')]) - #env.AppendUnique(LIBS = ['iberty']) - env.AppendUnique(SHLINKFLAGS = ['-Wl,--enable-stdcall-fixup']) - #env.AppendUnique(SHLINKFLAGS = ['-Wl,--kill-at']) + env.AddMethod(compile_without_gstabs, 'compile_without_gstabs') def exists(env): return find(env)