summaryrefslogtreecommitdiff
path: root/tools/minicargo/build.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/minicargo/build.cpp')
-rw-r--r--tools/minicargo/build.cpp24
1 files changed, 20 insertions, 4 deletions
diff --git a/tools/minicargo/build.cpp b/tools/minicargo/build.cpp
index 1ffbf8db..17b738cc 100644
--- a/tools/minicargo/build.cpp
+++ b/tools/minicargo/build.cpp
@@ -398,8 +398,11 @@ bool Builder::build_target(const PackageManifest& manifest, const PackageTarget&
for(const auto& feat : manifest.active_features()) {
args.push_back("--cfg"); args.push_back(::format("feature=", feat));
}
+
// TODO: Environment variables (rustc_env)
StringListKV env;
+ env.push_back("CARGO_MANIFEST_DIR", manifest.directory().to_absolute());
+ env.push_back("CARGO_PKG_VERSION", ::format(manifest.version()));
return this->spawn_process_mrustc(args, ::std::move(env), outfile + "_dbg.txt");
}
@@ -414,7 +417,11 @@ bool Builder::build_target(const PackageManifest& manifest, const PackageTarget&
args.push_back("-o"); args.push_back(outfile);
args.push_back("-L"); args.push_back(m_output_dir.str().c_str());
- if( this->spawn_process_mrustc(args, {}, outfile + "_dbg.txt") )
+ StringListKV env;
+ env.push_back("CARGO_MANIFEST_DIR", manifest.directory().to_absolute());
+ env.push_back("CARGO_PKG_VERSION", ::format(manifest.version()));
+
+ if( this->spawn_process_mrustc(args, ::std::move(env), outfile + "_dbg.txt") )
return outfile;
else
return "";
@@ -464,6 +471,8 @@ bool Builder::build_library(const PackageManifest& manifest) const
// - Run the script and put output in the right dir
auto out_file = output_dir_abs / "build_" + manifest.name().c_str() + ".txt";
+ auto out_dir = output_dir_abs / "build_" + manifest.name().c_str();
+ mkdir(out_dir.str().c_str(), 0755);
// TODO: Environment variables (key-value list)
StringListKV env;
env.push_back("CARGO_MANIFEST_DIR", manifest.directory().to_absolute());
@@ -476,7 +485,7 @@ bool Builder::build_library(const PackageManifest& manifest) const
// env.push_back(fn, manifest.m_links);
//}
//env.push_back("CARGO_CFG_RELEASE", "");
- env.push_back("OUT_DIR", output_dir_abs / "build_" + manifest.name().c_str());
+ env.push_back("OUT_DIR", out_dir);
env.push_back("TARGET", TARGET);
env.push_back("HOST", TARGET);
env.push_back("NUM_JOBS", "1");
@@ -505,7 +514,7 @@ bool Builder::build_library(const PackageManifest& manifest) const
}
bool Builder::spawn_process_mrustc(const StringList& args, StringListKV env, const ::helpers::path& logfile) const
{
- env.push_back("MRUSTC_DEBUG", "");
+ //env.push_back("MRUSTC_DEBUG", "");
return spawn_process(m_compiler_path.str().c_str(), args, env, logfile);
}
bool Builder::spawn_process(const char* exe_name, const StringList& args, const StringListKV& env, const ::helpers::path& logfile) const
@@ -518,6 +527,7 @@ bool Builder::spawn_process(const char* exe_name, const StringList& args, const
auto cmdline_str = cmdline.str();
DEBUG("Calling " << cmdline_str);
+#if 0
::std::stringstream environ_str;
environ_str << "TEMP=" << getenv("TEMP") << '\0';
environ_str << "TMP=" << getenv("TMP") << '\0';
@@ -526,6 +536,12 @@ bool Builder::spawn_process(const char* exe_name, const StringList& args, const
environ_str << kv.first << "=" << kv.second << '\0';
}
environ_str << '\0';
+#else
+ for(auto kv : env)
+ {
+ setenv(kv.first, kv.second);
+ }
+#endif
CreateDirectory(static_cast<::std::string>(logfile.parent()).c_str(), NULL);
@@ -607,7 +623,7 @@ bool Builder::spawn_process(const char* exe_name, const StringList& args, const
if( WIFEXITED(status) )
DEBUG("Compiler exited with non-zero exit status " << WEXITSTATUS(status));
else if( WIFSIGNALED(status) )
- DEBUG("Compiler was terminated with signal " << WSTOPSIG(status));
+ DEBUG("Compiler was terminated with signal " << WTERMSIG(status));
else
DEBUG("Compiler terminated for unknown reason, status=" << status);
return false;