diff options
Diffstat (limited to 'project/toolchain.py')
-rw-r--r-- | project/toolchain.py | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/project/toolchain.py b/project/toolchain.py new file mode 100644 index 0000000..d931c6b --- /dev/null +++ b/project/toolchain.py @@ -0,0 +1,45 @@ +# Copyright (c) 2020 Egor Tensin <Egor.Tensin@gmail.com> +# This file is part of the "cmake-common" project. +# For details, see https://github.com/egor-tensin/cmake-common. +# Distributed under the MIT License. + +'''Supported platform/build system/compiler combinations include, but are not +limited to: + +* Linux / make / Clang, +* Linux / make / GCC, +* Linux / make / MinGW-w64, +* Windows / make / Clang (clang.exe & clang++.exe), +* Windows / make / Clang (clang-cl.exe, Boost 1.69.0 or higher only), +* Windows / make / MinGW-w64, +* Windows / msbuild / MSVC, +* Cygwin / make / Clang, +* Cygwin / make / GCC, +* Cygwin / make / MinGW-w64. +''' + +import argparse +from enum import Enum + + +class ToolchainType(Enum): + AUTO = 'auto' # This most commonly means GCC on Linux and MSVC on Windows. + MSVC = 'msvc' # Force MSVC. + GCC = 'gcc' # Force GCC. + MINGW = 'mingw' # As in MinGW-w64; GCC with the PLATFORM-w64-mingw32 prefix. + CLANG = 'clang' + CLANG_CL = 'clang-cl' + + def __str__(self): + return self.value + + @staticmethod + def all(): + return tuple(ToolchainType) + + @staticmethod + def parse(s): + try: + return ToolchainType(s) + except ValueError: + raise argparse.ArgumentTypeError(f'invalid toolset: {s}') |