From baa3ec0a62379b3c293b09f0428a86eef3429132 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Thu, 14 Mar 2024 12:02:01 +0530 Subject: [PATCH] Explicitly detect compiler types gcc vs clang --- glfw/glfw.py | 19 +++++++++++++++++-- setup.py | 6 +++--- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/glfw/glfw.py b/glfw/glfw.py index 766a69c33..1d60fbfa7 100755 --- a/glfw/glfw.py +++ b/glfw/glfw.py @@ -46,6 +46,12 @@ class BinaryArch(NamedTuple): isa: ISA = ISA.AMD64 +class CompilerType(Enum): + gcc = 'gcc' + clang = 'clang' + unknown = 'unknown' + + class Env: cc: List[str] = [] @@ -80,6 +86,7 @@ def __init__( self.binary_arch = binary_arch self.native_optimizations = native_optimizations self._cc_version_string = '' + self._compiler_type: Optional[CompilerType] = None @property def cc_version_string(self) -> str: @@ -88,8 +95,16 @@ def cc_version_string(self) -> str: return self._cc_version_string @property - def is_clang(self) -> bool: - return 'clang' in self.cc_version_string.split() + def compiler_type(self) -> CompilerType: + if self._compiler_type is None: + raw = self.cc_version_string + if 'Free Software Foundation' in raw: + self._compiler_type = CompilerType.gcc + elif 'clang' in raw.lower().split(): + self._compiler_type = CompilerType.clang + else: + self._compiler_type = CompilerType.unknown + return self._compiler_type def copy(self) -> 'Env': ans = Env(self.cc, list(self.cppflags), list(self.cflags), list(self.ldflags), dict(self.library_paths), list(self.ldpaths), self.ccver) diff --git a/setup.py b/setup.py index e26e2f4a9..84b5111d5 100755 --- a/setup.py +++ b/setup.py @@ -23,7 +23,7 @@ from typing import Callable, Dict, FrozenSet, Iterable, Iterator, List, Optional, Sequence, Set, Tuple, Union, cast from glfw import glfw -from glfw.glfw import ISA, BinaryArch, Command, CompileKey +from glfw.glfw import ISA, BinaryArch, Command, CompileKey, CompilerType if sys.version_info[:2] < (3, 8): raise SystemExit('kitty requires python >= 3.8') @@ -701,7 +701,7 @@ def get_source_specific_cflags(env: Env, src: str) -> List[str]: ans.append('-msse4.2' if '128' in src else '-mavx2') if '256' in src: # We have manual vzeroupper so prevent compiler from emitting it causing duplicates - if env.is_clang: + if env.compiler_type is CompilerType.clang: ans.append('-mllvm') ans.append('-x86-use-vzeroupper=0') else: @@ -1170,7 +1170,7 @@ def build_launcher(args: Options, launcher_dir: str = '.', bundle_type: str = 's sanitize_args = get_sanitize_args(env.cc, env.ccver) cflags.extend(sanitize_args) ldflags.extend(sanitize_args) - libs += ['-lasan'] if not is_macos and not env.is_clang else [] + libs += ['-lasan'] if not is_macos and env.compiler_type is not CompilerType.clang else [] else: cflags.append('-g') if args.profile: