// // CLI // #include "cpp.h" #include "elf.h" #include "file.h" #include using namespace std::string_literals; namespace { void usage() { std::cout << "Usage: mcc " << std::endl; } } int main(int argc, char* argv[]) { try { CPP cpp; if (argc != 2) { usage(); return 1; } fs::path in_filename{argv[1]}; fs::path out_filename{in_filename.parent_path() / in_filename.stem()}; if (in_filename == out_filename) throw std::runtime_error("Bad output filename: "s + out_filename.generic_string()); auto unit {File::getFile(in_filename)}; std::string unit_string(reinterpret_cast(unit.data()), unit.size()); cpp.translate(unit_string); Elf::Write(out_filename, cpp.getCode(), cpp.getData()); } catch (const std::exception& ex) { std::cout << "Error: " << ex.what() << std::endl; return 1; } return 0; }