From 7436d83ef371d4fee4a66bec235e102ed80275db Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Fri, 19 Aug 2022 18:09:25 +0200 Subject: Add support for msvc tool-chain (cl.exe/link.exe and lib.exe) on windows. --- src/tools.cc | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 62 insertions(+), 1 deletion(-) (limited to 'src/tools.cc') 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 +/* +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 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 getOptionGcc(opt option, const std::string& arg) std::cerr << "Unsupported compiler option.\n"; return {}; } + +std::vector 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 getOption(ToolChain tool_chain, @@ -94,6 +151,8 @@ std::vector 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 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"; -- cgit v1.2.3