summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tools/minicargo/build.cpp5
-rw-r--r--tools/minicargo/build.h1
-rw-r--r--tools/minicargo/main.cpp25
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;