diff options
-rw-r--r-- | tools/minicargo/build.cpp | 5 | ||||
-rw-r--r-- | tools/minicargo/build.h | 1 | ||||
-rw-r--r-- | tools/minicargo/main.cpp | 25 |
3 files changed, 30 insertions, 1 deletions
diff --git a/tools/minicargo/build.cpp b/tools/minicargo/build.cpp index 0006623c..143b4ebd 100644 --- a/tools/minicargo/build.cpp +++ b/tools/minicargo/build.cpp @@ -623,6 +623,11 @@ bool Builder::build_target(const PackageManifest& manifest, const PackageTarget& args.push_back("-C"); args.push_back(format("emit-build-command=",outfile,".sh")); } } + if( m_opts.emit_mmir ) + { + args.push_back("-C"); args.push_back("codegen-type=monomir"); + } + args.push_back("-o"); args.push_back(outfile); args.push_back("-L"); args.push_back(this->get_output_dir(is_for_host).str()); for(const auto& dir : manifest.build_script_output().rustc_link_search) { diff --git a/tools/minicargo/build.h b/tools/minicargo/build.h index 16d0bea0..0b3e949b 100644 --- a/tools/minicargo/build.h +++ b/tools/minicargo/build.h @@ -12,6 +12,7 @@ struct BuildOptions ::helpers::path output_dir; ::helpers::path build_script_overrides; ::std::vector<::helpers::path> lib_search_dirs; + bool emit_mmir = false; const char* target_name = nullptr; // if null, host is used }; diff --git a/tools/minicargo/main.cpp b/tools/minicargo/main.cpp index 8bfb2bb3..62ed0f63 100644 --- a/tools/minicargo/main.cpp +++ b/tools/minicargo/main.cpp @@ -27,6 +27,9 @@ struct ProgramOptions // Output/build directory const char* output_directory = nullptr; + // Emit Monomorphised MIR instead of C + bool emit_mmir = false; + // Target name (if null, defaults to host) const char* target = nullptr; @@ -84,7 +87,8 @@ int main(int argc, const char* argv[]) build_opts.build_script_overrides = ::std::move(bs_override_dir); build_opts.output_dir = opts.output_directory ? ::helpers::path(opts.output_directory) : ::helpers::path("output"); build_opts.lib_search_dirs.reserve(opts.lib_search_dirs.size()); - build_opts.target_name = opts.target; + build_opts.emit_mmir = opts.emit_mmir; + build_opts.target_name = opts.target; for(const auto* d : opts.lib_search_dirs) build_opts.lib_search_dirs.push_back( ::helpers::path(d) ); Debug_SetPhase("Enumerate Build"); @@ -158,6 +162,25 @@ int ProgramOptions::parse(int argc, const char* argv[]) } this->build_jobs = ::std::strtol(argv[++i], nullptr, 10); break; + case 'Z': + if( arg[2] != '\0' ) { + arg = arg + 2; + } + else { + if(i+1 == argc) { + ::std::cerr << "Flag " << arg << " takes an argument" << ::std::endl; + return 1; + } + arg = argv[++i]; + } + if( ::std::strcmp(arg, "emit-mmir") == 0 ) { + this->emit_mmir = true; + } + else { + ::std::cerr << "Unknown debug option -Z " << arg << ::std::endl; + return 1; + } + break; case 'n': this->build_jobs = 0; break; |