summaryrefslogtreecommitdiff
path: root/src/tools.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools.cc')
-rw-r--r--src/tools.cc63
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";