diff options
author | Olexa Bilaniuk <obilaniu@gmail.com> | 2021-03-12 05:51:44 -0500 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2021-03-28 20:12:45 +0300 |
commit | 3dbd493de218cbecac056fc133e9147a2246a91d (patch) | |
tree | aea07ccb8b82000238e1895041b5b19ba2979da0 | |
parent | 268a78f0f473c1b5193e8b44a067030b74a6559d (diff) | |
download | meson-3dbd493de218cbecac056fc133e9147a2246a91d.zip meson-3dbd493de218cbecac056fc133e9147a2246a91d.tar.gz meson-3dbd493de218cbecac056fc133e9147a2246a91d.tar.bz2 |
Canonicalize and merge consecutive -Xcompiler flags together.
Makes command-line more readable.
-rw-r--r-- | mesonbuild/compilers/cuda.py | 48 |
1 files changed, 47 insertions, 1 deletions
diff --git a/mesonbuild/compilers/cuda.py b/mesonbuild/compilers/cuda.py index ef6375a..1471d84 100644 --- a/mesonbuild/compilers/cuda.py +++ b/mesonbuild/compilers/cuda.py @@ -260,6 +260,52 @@ class CudaCompiler(Compiler): return r'\,'.join(l) @classmethod + def _merge_flags(cls, flags: T.List[str]) -> T.List[str]: + r""" + The flags to NVCC gets exceedingly verbose and unreadable when too many of them + are shielded with -Xcompiler. Merge consecutive -Xcompiler-wrapped arguments + into one. + """ + if len(flags) <= 1: + return flags + flagit = iter(flags) + xflags = [] + + def is_xcompiler_flag_isolated(flag: str) -> bool: + return flag == '-Xcompiler' + def is_xcompiler_flag_glued(flag: str) -> bool: + return flag.startswith('-Xcompiler=') + def is_xcompiler_flag(flag: str) -> bool: + return is_xcompiler_flag_isolated(flag) or is_xcompiler_flag_glued(flag) + def get_xcompiler_val(flag: str, flagit: T.Iterator[str]) -> str: + if is_xcompiler_flag_glued(flag): + return flag[len('-Xcompiler='):] + else: + try: + return next(flagit) + except StopIteration: + return "" + + ingroup = False + for flag in flagit: + if not is_xcompiler_flag(flag): + ingroup = False + xflags.append(flag) + elif ingroup: + xflags[-1] += ',' + xflags[-1] += get_xcompiler_val(flag, flagit) + elif is_xcompiler_flag_isolated(flag): + ingroup = True + xflags.append(flag) + xflags.append(get_xcompiler_val(flag, flagit)) + elif is_xcompiler_flag_glued(flag): + ingroup = True + xflags.append(flag) + else: + raise ValueError("-Xcompiler flag merging failed, unknown argument form!") + return xflags + + @classmethod def _to_host_flags(cls, flags: T.List[str], phase: _Phase = _Phase.COMPILER) -> T.List[str]: """ Translate generic "GCC-speak" plus particular "NVCC-speak" flags to NVCC flags. @@ -432,7 +478,7 @@ class CudaCompiler(Compiler): xflags.append(flag) xflags.append(val) - return xflags + return cls._merge_flags(xflags) def needs_static_linker(self) -> bool: return False |