diff options
author | V3n3RiX <venerix@redcorelinux.org> | 2020-05-30 11:44:06 +0100 |
---|---|---|
committer | V3n3RiX <venerix@redcorelinux.org> | 2020-05-30 11:44:06 +0100 |
commit | f516638b7fe9592837389826a6152a7e1b251c54 (patch) | |
tree | 8bfecb640b7b6403d7a3d662d923eed630033da7 /dev-util/meson/files | |
parent | 1a61119f9f7b057830e2ce0563f913ec86f282ad (diff) |
gentoo resync : 30.05.2020
Diffstat (limited to 'dev-util/meson/files')
-rw-r--r-- | dev-util/meson/files/0.54.2-multilib-clang.patch | 181 |
1 files changed, 181 insertions, 0 deletions
diff --git a/dev-util/meson/files/0.54.2-multilib-clang.patch b/dev-util/meson/files/0.54.2-multilib-clang.patch new file mode 100644 index 000000000000..b3aa3693e697 --- /dev/null +++ b/dev-util/meson/files/0.54.2-multilib-clang.patch @@ -0,0 +1,181 @@ +From 9dc3ca2c1c9fbb47e731551c6432df144f725261 Mon Sep 17 00:00:00 2001 +From: Yevhenii Kolesnikov <yevhenii.kolesnikov@globallogic.com> +Date: Thu, 21 May 2020 18:58:47 +0300 +Subject: [PATCH] compilers: add fetching of define list for clang + +Simmilar to gcc, the list of pre-processor defines can be fetched with +`-dM -E` option. The way cpu_family is determined on linux relies on +this list. + +Fixes incorrect value of cpu_family on linux, when crosscompiling: + +``` +CC="clang -m32" meson ./build +``` + +Signed-off-by: Yevhenii Kolesnikov <yevhenii.kolesnikov@globallogic.com> +Co-authored-by: Dylan Baker <dylan@pnwbakers.com> +--- + mesonbuild/compilers/c.py | 5 +++-- + mesonbuild/compilers/cpp.py | 5 +++-- + mesonbuild/compilers/fortran.py | 2 +- + mesonbuild/compilers/mixins/clang.py | 9 ++++++++- + mesonbuild/compilers/objc.py | 2 +- + mesonbuild/compilers/objcpp.py | 2 +- + mesonbuild/environment.py | 26 +++++++++++++++++++++++++- + 7 files changed, 42 insertions(+), 9 deletions(-) + +diff --git a/mesonbuild/compilers/c.py b/mesonbuild/compilers/c.py +index 1bc9e84998..aac99b4269 100644 +--- a/mesonbuild/compilers/c.py ++++ b/mesonbuild/compilers/c.py +@@ -86,9 +86,10 @@ class ClangCCompiler(ClangCompiler, CCompiler): + _C18_VERSION = '>=8.0.0' + + def __init__(self, exelist, version, for_machine: MachineChoice, +- is_cross, info: 'MachineInfo', exe_wrapper=None, **kwargs): ++ is_cross, info: 'MachineInfo', exe_wrapper=None, ++ defines: T.Optional[T.List[str]] = None, **kwargs): + CCompiler.__init__(self, exelist, version, for_machine, is_cross, info, exe_wrapper, **kwargs) +- ClangCompiler.__init__(self) ++ ClangCompiler.__init__(self, defines) + default_warn_args = ['-Wall', '-Winvalid-pch'] + self.warn_args = {'0': [], + '1': default_warn_args, +diff --git a/mesonbuild/compilers/cpp.py b/mesonbuild/compilers/cpp.py +index f4bcfa9f89..478a68c13c 100644 +--- a/mesonbuild/compilers/cpp.py ++++ b/mesonbuild/compilers/cpp.py +@@ -155,10 +155,11 @@ def _find_best_cpp_std(self, cpp_std): + + class ClangCPPCompiler(ClangCompiler, CPPCompiler): + def __init__(self, exelist, version, for_machine: MachineChoice, +- is_cross, info: 'MachineInfo', exe_wrapper=None, **kwargs): ++ is_cross, info: 'MachineInfo', exe_wrapper=None, ++ defines : T.Optional[T.List[str]] = None, **kwargs): + CPPCompiler.__init__(self, exelist, version, for_machine, is_cross, + info, exe_wrapper, **kwargs) +- ClangCompiler.__init__(self) ++ ClangCompiler.__init__(self, defines) + default_warn_args = ['-Wall', '-Winvalid-pch', '-Wnon-virtual-dtor'] + self.warn_args = {'0': [], + '1': default_warn_args, +diff --git a/mesonbuild/compilers/fortran.py b/mesonbuild/compilers/fortran.py +index c155b5b4f3..af83c0e564 100644 +--- a/mesonbuild/compilers/fortran.py ++++ b/mesonbuild/compilers/fortran.py +@@ -424,7 +424,7 @@ def __init__(self, exelist, version, for_machine: MachineChoice, + **kwargs): + FortranCompiler.__init__(self, exelist, version, for_machine, + is_cross, info, exe_wrapper, **kwargs) +- ClangCompiler.__init__(self) ++ ClangCompiler.__init__(self, []) + self.id = 'flang' + default_warn_args = ['-Minform=inform'] + self.warn_args = {'0': [], +diff --git a/mesonbuild/compilers/mixins/clang.py b/mesonbuild/compilers/mixins/clang.py +index 1c0ee452f4..0ee10ad5d5 100644 +--- a/mesonbuild/compilers/mixins/clang.py ++++ b/mesonbuild/compilers/mixins/clang.py +@@ -42,9 +42,10 @@ + } # type: T.Dict[str, T.List[str]] + + class ClangCompiler(GnuLikeCompiler): +- def __init__(self): ++ def __init__(self, defines: T.Optional[T.Dict[str, str]]): + super().__init__() + self.id = 'clang' ++ self.defines = defines or {} + self.base_options.append('b_colorout') + # TODO: this really should be part of the linker base_options, but + # linkers don't have base_options. +@@ -56,6 +57,12 @@ def __init__(self): + def get_colorout_args(self, colortype: str) -> T.List[str]: + return clang_color_args[colortype][:] + ++ def has_builtin_define(self, define: str) -> bool: ++ return define in self.defines ++ ++ def get_builtin_define(self, define: str) -> T.Optional[str]: ++ return self.defines.get(define) ++ + def get_optimization_args(self, optimization_level: str) -> T.List[str]: + return clang_optimization_args[optimization_level] + +diff --git a/mesonbuild/compilers/objc.py b/mesonbuild/compilers/objc.py +index 52d258dcdb..d351c8826a 100644 +--- a/mesonbuild/compilers/objc.py ++++ b/mesonbuild/compilers/objc.py +@@ -86,7 +86,7 @@ def __init__(self, exelist, version, for_machine: MachineChoice, + **kwargs): + ObjCCompiler.__init__(self, exelist, version, for_machine, is_cross, + info, exe_wrapper, **kwargs) +- ClangCompiler.__init__(self) ++ ClangCompiler.__init__(self, []) + default_warn_args = ['-Wall', '-Winvalid-pch'] + self.warn_args = {'0': [], + '1': default_warn_args, +diff --git a/mesonbuild/compilers/objcpp.py b/mesonbuild/compilers/objcpp.py +index c8b422b35d..10555b4551 100644 +--- a/mesonbuild/compilers/objcpp.py ++++ b/mesonbuild/compilers/objcpp.py +@@ -84,7 +84,7 @@ def __init__(self, exelist, version, for_machine: MachineChoice, + is_cross, info: 'MachineInfo', exe_wrapper=None, + **kwargs): + ObjCPPCompiler.__init__(self, exelist, version, for_machine, is_cross, info, exe_wrapper, **kwargs) +- ClangCompiler.__init__(self) ++ ClangCompiler.__init__(self, []) + default_warn_args = ['-Wall', '-Winvalid-pch', '-Wnon-virtual-dtor'] + self.warn_args = {'0': [], + '1': default_warn_args, +diff --git a/mesonbuild/environment.py b/mesonbuild/environment.py +index 8fad6288b1..cb6ae7d514 100644 +--- a/mesonbuild/environment.py ++++ b/mesonbuild/environment.py +@@ -726,6 +726,28 @@ def get_lcc_version_from_defines(defines): + minor = defines.get('__LCC_MINOR__', '0') + return dot.join((generation, major, minor)) + ++ @staticmethod ++ def get_clang_compiler_defines(compiler): ++ """ ++ Get the list of Clang pre-processor defines ++ """ ++ args = compiler + ['-E', '-dM', '-'] ++ p, output, error = Popen_safe(args, write='', stdin=subprocess.PIPE) ++ if p.returncode != 0: ++ raise EnvironmentException('Unable to get clang pre-processor defines:\n' + output + error) ++ defines = {} ++ for line in output.split('\n'): ++ if not line: ++ continue ++ d, *rest = line.split(' ', 2) ++ if d != '#define': ++ continue ++ if len(rest) == 1: ++ defines[rest] = True ++ if len(rest) == 2: ++ defines[rest[0]] = rest[1] ++ return defines ++ + def _get_compilers(self, lang, for_machine): + ''' + The list of compilers is detected in the exact same way for +@@ -1043,6 +1065,8 @@ def sanitize(p): + if 'clang' in out: + linker = None + ++ defines = self.get_clang_compiler_defines(compiler) ++ + # Even if the for_machine is darwin, we could be using vanilla + # clang. + if 'Apple' in out: +@@ -1063,7 +1087,7 @@ def sanitize(p): + + return cls( + ccache + compiler, version, for_machine, is_cross, info, +- exe_wrap, full_version=full_version, linker=linker) ++ exe_wrap, defines, full_version=full_version, linker=linker) + + if 'Intel(R) C++ Intel(R)' in err: + version = search_version(err) |