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.cpp47
1 files changed, 30 insertions, 17 deletions
diff --git a/tools/minicargo/build.cpp b/tools/minicargo/build.cpp
index 62fd48c5..a078e48b 100644
--- a/tools/minicargo/build.cpp
+++ b/tools/minicargo/build.cpp
@@ -221,11 +221,11 @@ struct Timestamp
}
};
-bool MiniCargo_Build(const PackageManifest& manifest, ::helpers::path override_path)
+bool MiniCargo_Build(const PackageManifest& manifest, BuildOptions opts)
{
BuildList list;
- list.add_dependencies(manifest, 0, !override_path.is_valid());
+ list.add_dependencies(manifest, 0, !opts.build_script_overrides.is_valid());
list.sort_list();
// dedup?
@@ -235,7 +235,7 @@ bool MiniCargo_Build(const PackageManifest& manifest, ::helpers::path override_p
}
// Build dependencies
- Builder builder { "output", override_path };
+ Builder builder { ::std::move(opts) };
for(const auto& p : list.iter())
{
if( ! builder.build_library(p) )
@@ -275,6 +275,10 @@ void BuildList::add_dependencies(const PackageManifest& p, unsigned level, bool
{
for(const auto& dep : p.build_dependencies())
{
+ if( dep.is_disabled() )
+ {
+ continue ;
+ }
add_package(dep.get_package(), level+1, include_build);
}
}
@@ -316,9 +320,8 @@ void BuildList::sort_list()
}
}
-Builder::Builder(::helpers::path output_dir, ::helpers::path override_dir):
- m_output_dir(output_dir),
- m_build_script_overrides(override_dir)
+Builder::Builder(BuildOptions opts):
+ m_opts(::std::move(opts))
{
#ifdef _WIN32
char buf[1024];
@@ -342,7 +345,7 @@ Builder::Builder(::helpers::path output_dir, ::helpers::path override_dir):
bool Builder::build_target(const PackageManifest& manifest, const PackageTarget& target) const
{
const char* crate_type;
- auto outfile = m_output_dir;
+ auto outfile = m_opts.output_dir;
switch(target.m_type)
{
case PackageTarget::Type::Lib:
@@ -401,7 +404,7 @@ bool Builder::build_target(const PackageManifest& manifest, const PackageTarget&
args.push_back("-O");
}
args.push_back("-o"); args.push_back(outfile);
- args.push_back("-L"); args.push_back(m_output_dir.str().c_str());
+ args.push_back("-L"); args.push_back(m_opts.output_dir.str().c_str());
for(const auto& dir : manifest.build_script_output().rustc_link_search) {
args.push_back("-L"); args.push_back(dir.second.c_str());
}
@@ -417,6 +420,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));
}
+ for(const auto& d : m_opts.lib_search_dirs)
+ {
+ args.push_back("-L");
+ args.push_back(d.str().c_str());
+ }
// TODO: Environment variables (rustc_env)
StringListKV env;
@@ -427,14 +435,19 @@ bool Builder::build_target(const PackageManifest& manifest, const PackageTarget&
}
::std::string Builder::build_build_script(const PackageManifest& manifest) const
{
- auto outfile = m_output_dir / manifest.name() + "_build" EXESUF;
+ auto outfile = m_opts.output_dir / manifest.name() + "_build" EXESUF;
StringList args;
args.push_back( ::helpers::path(manifest.manifest_path()).parent() / ::helpers::path(manifest.build_script()) );
args.push_back("--crate-name"); args.push_back("build");
args.push_back("--crate-type"); args.push_back("bin");
args.push_back("-o"); args.push_back(outfile);
- args.push_back("-L"); args.push_back(m_output_dir.str().c_str());
+ args.push_back("-L"); args.push_back(m_opts.output_dir.str().c_str());
+ for(const auto& d : m_opts.lib_search_dirs)
+ {
+ args.push_back("-L");
+ args.push_back(d.str().c_str());
+ }
StringListKV env;
env.push_back("CARGO_MANIFEST_DIR", manifest.directory().to_absolute());
@@ -450,17 +463,17 @@ bool Builder::build_library(const PackageManifest& manifest) const
if( manifest.build_script() != "" )
{
// Locate a build script override file
- if(this->m_build_script_overrides.is_valid())
+ if(this->m_opts.build_script_overrides.is_valid())
{
- auto override_file = this->m_build_script_overrides / "build_" + manifest.name().c_str() + ".txt";
+ auto override_file = this->m_opts.build_script_overrides / "build_" + manifest.name().c_str() + ".txt";
// TODO: Should this test if it exists? or just assume and let it error?
-
+
// > Note, override file can specify a list of commands to run.
const_cast<PackageManifest&>(manifest).load_build_script( override_file.str() );
}
else
{
- auto out_file = m_output_dir / "build_" + manifest.name().c_str() + ".txt";
+ auto out_file = m_opts.output_dir / "build_" + manifest.name().c_str() + ".txt";
// If the build script output doesn't exist (TODO: Or is older than ...)
bool run_build_script = true;
auto ts_result = this->get_timestamp(out_file);
@@ -486,8 +499,8 @@ bool Builder::build_library(const PackageManifest& manifest) const
return false;
auto script_exe_abs = ::helpers::path(script_exe).to_absolute();
- auto output_dir_abs = m_output_dir.to_absolute();
-
+ auto output_dir_abs = m_opts.output_dir.to_absolute();
+
// - 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();
@@ -515,7 +528,7 @@ bool Builder::build_library(const PackageManifest& manifest) const
env.push_back("OPT_LEVEL", "2");
env.push_back("DEBUG", "0");
env.push_back("PROFILE", "release");
-
+
#if _WIN32
#else
auto fd_cwd = open(".", O_DIRECTORY);