From 916060cb53fddb94f64b20d3616e7360c5e91f64 Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Fri, 13 Jan 2023 19:56:35 +0100 Subject: Capture flags in a class instead of a string and add conversion functions between them. --- src/ctor.h | 86 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 79 insertions(+), 7 deletions(-) (limited to 'src/ctor.h') diff --git a/src/ctor.h b/src/ctor.h index 388ec1b..36aa46a 100644 --- a/src/ctor.h +++ b/src/ctor.h @@ -66,34 +66,106 @@ enum class toolchain clang, }; -enum class opt +enum class cxx_opt { // gcc/clang output, // -o debug, // -g - strip, // -s warn_all, // -Wall warnings_as_errors, // -Werror generate_dep_tree, // -MMD no_link, // -c include_path, // -I + cpp_std, // -std= + optimization, // -O + position_independent_code, // -fPIC + position_independent_executable, // -fPIE + custom, // entire option taken verbatim from +}; + +enum class c_opt +{ + // gcc/clang + output, // -o + debug, // -g + warn_all, // -Wall + warnings_as_errors, // -Werror + generate_dep_tree, // -MMD + no_link, // -c + include_path, // -I + c_std, // -std= + optimization, // -O + position_independent_code, // -fPIC + position_independent_executable, // -fPIE + custom, // entire option taken verbatim from +}; + +enum class ld_opt +{ + // gcc/clang + output, // -o + strip, // -s + warn_all, // -Wall + warnings_as_errors, // -Werror library_path, // -L link, // -l cpp_std, // -std= build_shared, // -shared threads, // -pthread - optimization, // -O position_independent_code, // -fPIC position_independent_executable, // -fPIE custom, // entire option taken verbatim from }; +enum class ar_opt +{ + // gcc/clang + custom, // entire option taken verbatim from +}; + +enum class asm_opt +{ + // gcc/clang + custom, // entire option taken verbatim from +}; + +template +class flag +{ +public: + flag(const std::string& str); + flag(const char* str); + flag(T opt) : opt(opt) {} + flag(T opt, const std::string& arg) : opt(opt), arg(arg) {} + flag(T opt, const char* arg) : opt(opt), arg(arg) {} + flag(ctor::toolchain toolchain, T opt) : toolchain(toolchain), opt(opt) {} + flag(ctor::toolchain toolchain, T opt, const char* arg) : toolchain(toolchain), opt(opt), arg(arg) {} + flag(ctor::toolchain toolchain, T opt, const std::string& arg) : toolchain(toolchain), opt(opt), arg(arg) {} + + ctor::toolchain toolchain{ctor::toolchain::any}; + T opt; + std::string arg; +}; + +using c_flag = ctor::flag; +using cxx_flag = ctor::flag; +using ld_flag = ctor::flag; +using ar_flag = ctor::flag; +using asm_flag = ctor::flag; + +using c_flags = std::vector; +using cxx_flags = std::vector; +using ld_flags= std::vector; +using ar_flags = std::vector; +using asm_flags = std::vector; + struct flags { - std::vector cxxflags; // flags for c++ compiler - std::vector cflags; // flags for c compiler - std::vector ldflags; // flags for linker - std::vector asmflags; // flags for asm translator + ctor::c_flags cflags; // flags for c compiler + ctor::cxx_flags cxxflags; // flags for c++ compiler + ctor::ld_flags ldflags; // flags for linker + ctor::ar_flags arflags; // flags for archiver + ctor::asm_flags asmflags; // flags for asm translator }; struct settings -- cgit v1.2.3