Browse Source

Give some sanity to the replacement variables

default_compile_flags
vector-of-bool 5 years ago
parent
commit
511dd34983
1 changed files with 11 additions and 11 deletions
  1. +11
    -11
      src/dds/toolchain.cpp

+ 11
- 11
src/dds/toolchain.cpp View File

if (arg == "<FLAGS>") { if (arg == "<FLAGS>") {
extend(command, flags); extend(command, flags);
} else { } else {
arg = replace(arg, "<FILE>", spec.source_path.string());
arg = replace(arg, "<IN>", spec.source_path.string());
arg = replace(arg, "<OUT>", spec.out_path.string()); arg = replace(arg, "<OUT>", spec.out_path.string());
command.push_back(arg); command.push_back(arg);
} }
vector<string> toolchain::create_archive_command(const archive_spec& spec) const noexcept { vector<string> toolchain::create_archive_command(const archive_spec& spec) const noexcept {
vector<string> cmd; vector<string> cmd;
for (auto& arg : _archive_template) { for (auto& arg : _archive_template) {
if (arg == "<OBJECTS>") {
if (arg == "<IN>") {
std::transform(spec.input_files.begin(), std::transform(spec.input_files.begin(),
spec.input_files.end(), spec.input_files.end(),
std::back_inserter(cmd), std::back_inserter(cmd),
[](auto&& p) { return p.string(); }); [](auto&& p) { return p.string(); });
} else { } else {
cmd.push_back(replace(arg, "<ARCHIVE>", spec.out_path.string()));
cmd.push_back(replace(arg, "<OUT>", spec.out_path.string()));
} }
} }
return cmd; return cmd;
vector<string> toolchain::create_link_executable_command(const link_exe_spec& spec) const noexcept { vector<string> toolchain::create_link_executable_command(const link_exe_spec& spec) const noexcept {
vector<string> cmd; vector<string> cmd;
for (auto& arg : _link_exe_template) { for (auto& arg : _link_exe_template) {
if (arg == "<INPUTS>") {
if (arg == "<IN>") {
std::transform(spec.inputs.begin(), std::transform(spec.inputs.begin(),
spec.inputs.end(), spec.inputs.end(),
std::back_inserter(cmd), std::back_inserter(cmd),
ret._archive_suffix = ".a"; ret._archive_suffix = ".a";
ret._object_suffix = ".o"; ret._object_suffix = ".o";
ret._warning_flags = {"-Wall", "-Wextra"}; ret._warning_flags = {"-Wall", "-Wextra"};
ret._archive_template = {"ar", "rcs", "<ARCHIVE>", "<OBJECTS>"};
ret._archive_template = {"ar", "rcs", "<OUT>", "<IN>"};


std::vector<std::string> common_flags = { std::vector<std::string> common_flags = {
"<FLAGS>", "<FLAGS>",
"-c", "-c",
"-o", "-o",
"<OUT>", "<OUT>",
"<FILE>",
"<IN>",
}; };
std::vector<std::string> c_flags; std::vector<std::string> c_flags;
std::vector<std::string> cxx_flags = {"-std=c++17"}; std::vector<std::string> cxx_flags = {"-std=c++17"};
if (starts_with(s, "gcc")) { if (starts_with(s, "gcc")) {
c_compiler_base = "gcc"; c_compiler_base = "gcc";
cxx_compiler_base = "g++"; cxx_compiler_base = "g++";
common_flags.push_back("-Og");
common_flags.push_back("-O0");
} else if (starts_with(s, "clang")) { } else if (starts_with(s, "clang")) {
c_compiler_base = "clang"; c_compiler_base = "clang";
cxx_compiler_base = "clang++"; cxx_compiler_base = "clang++";
} else if (s == "msvc") { } else if (s == "msvc") {
ret._inc_template = {"/I<PATH>"}; ret._inc_template = {"/I<PATH>"};
ret._def_template = {"/D<DEF>"}; ret._def_template = {"/D<DEF>"};
ret._c_compile = {"cl.exe", "/nologo", "<FLAGS>", "/c", "<FILE>", "/Fo<OUT>"};
ret._c_compile = {"cl.exe", "/nologo", "<FLAGS>", "/c", "<IN>", "/Fo<OUT>"};
ret._cxx_compile = {"cl.exe", ret._cxx_compile = {"cl.exe",
"/nologo", "/nologo",
"<FLAGS>", "<FLAGS>",
"/std:c++latest", "/std:c++latest",
"/EHsc", "/EHsc",
"/c", "/c",
"<FILE>",
"<IN>",
"/Fo<OUT>"}; "/Fo<OUT>"};
std::vector<std::string_view> common_flags = {"/Z7", "/O2", "/MT", "/DEBUG"}; std::vector<std::string_view> common_flags = {"/Z7", "/O2", "/MT", "/DEBUG"};
extend(ret._c_compile, common_flags); extend(ret._c_compile, common_flags);
ret._archive_suffix = ".lib"; ret._archive_suffix = ".lib";
ret._object_suffix = ".obj"; ret._object_suffix = ".obj";
ret._exe_suffix = ".exe"; ret._exe_suffix = ".exe";
ret._archive_template = {"lib", "/nologo", "/OUT:<ARCHIVE>", "<OBJECTS>"};
ret._archive_template = {"lib", "/nologo", "/OUT:<OUT>", "<IN>"};
ret._link_exe_template ret._link_exe_template
= {"cl.exe", "/nologo", "/std:c++latest", "/EHsc", "<INPUTS>", "/Fe<OUT>"};
= {"cl.exe", "/nologo", "/std:c++latest", "/EHsc", "<IN>", "/Fe<OUT>"};
ret._warning_flags = {"/W4"}; ret._warning_flags = {"/W4"};
} else { } else {
return std::nullopt; return std::nullopt;

Loading…
Cancel
Save