diff options
Diffstat (limited to 'src/tools.cc')
-rw-r--r-- | src/tools.cc | 63 |
1 files changed, 62 insertions, 1 deletions
diff --git a/src/tools.cc b/src/tools.cc index 7e8ac78..cd00f89 100644 --- a/src/tools.cc +++ b/src/tools.cc @@ -8,6 +8,14 @@ #include <cassert> +/* +https://docs.microsoft.com/en-us/cpp/build/reference/compiler-options-listed-alphabetically?view=msvc-170 +/TC Specifies all source files are C. +/Tc Specifies a C source file. +/TP Specifies all source files are C++. +/Tp Specifies a C++ source file. +*/ + ToolChain getToolChain(OutputSystem system) { std::string compiler; @@ -33,6 +41,11 @@ ToolChain getToolChain(OutputSystem system) { return ToolChain::gcc; } + else if(cc_cmd.find("cl") != std::string::npos || + cc_cmd.find("CL") != std::string::npos) + { + return ToolChain::msvc; + } std::cerr << "Unsupported output system.\n"; return ToolChain::gcc; @@ -55,7 +68,7 @@ std::vector<std::string> getOptionGcc(opt option, const std::string& arg) case opt::warnings_as_errors: return {"-Werror"}; case opt::generate_dep_tree: - return {"-MMD"}; + return {"-MMD", "-MF" + arg}; case opt::no_link: return {"-c"}; case opt::include_path: @@ -83,6 +96,50 @@ std::vector<std::string> getOptionGcc(opt option, const std::string& arg) std::cerr << "Unsupported compiler option.\n"; return {}; } + +std::vector<std::string> getOptionMsvc(opt option, const std::string& arg) +{ + switch(option) + { + case opt::output: + return {"/Fo\""+arg+"\""}; + case opt::debug: + return {"/DEBUG"}; + case opt::strip: + return {};//{"-s"}; TODO + case opt::warn_all: + return {"/Wall"}; + case opt::warnings_as_errors: + return {"/WX"}; + case opt::generate_dep_tree: + return {"/sourceDependencies", arg}; + case opt::no_link: + return {"/c"}; + case opt::include_path: + return {"/I" + arg}; + case opt::library_path: + return {"/LIBPATH:" + arg}; + case opt::link: + return {}; //{"-l" + arg}; TODO + case opt::cpp_std: + return {"/std:" + arg}; + case opt::build_shared: + return {};//{"-shared"}; TODO + case opt::threads: + return {};// {"-pthread"}; TODO + case opt::optimization: + return {"/O" + arg}; // TODO: max 2 + case opt::position_independent_code: + return {};//{"-fPIC"}; TODO + case opt::position_independent_executable: + return {};//{"-fPIE"}; TODO + case opt::custom: + return {arg}; + } + + std::cerr << "Unsupported compiler option.\n"; + return {}; +} } std::vector<std::string> getOption(ToolChain tool_chain, @@ -94,6 +151,8 @@ std::vector<std::string> getOption(ToolChain tool_chain, case ToolChain::gcc: case ToolChain::clang: return getOptionGcc(option, arg); + case ToolChain::msvc: + return getOptionMsvc(option, arg); } std::cerr << "Unsupported tool-chain.\n"; @@ -129,6 +188,8 @@ std::pair<opt, std::string> getOption(const std::string& flag, case ToolChain::gcc: case ToolChain::clang: return getOptionGcc(flag); + case ToolChain::msvc: + break; // TODO } std::cerr << "Unsupported tool-chain.\n"; |