From 5fb77d1609bb62db11ed640d089a08f34e943998 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Wed, 20 Jul 2016 09:03:36 +0200 Subject: Move ar/ranlib to bin.ar sub-module, load in cxx unless shared-only build This way we don't load/configure what we don't need. --- build2/cxx/module.cxx | 64 +++++++++++++++++++++++++++++++++------------------ 1 file changed, 42 insertions(+), 22 deletions(-) (limited to 'build2/cxx/module.cxx') diff --git a/build2/cxx/module.cxx b/build2/cxx/module.cxx index 8972bf9..6ae7882 100644 --- a/build2/cxx/module.cxx +++ b/build2/cxx/module.cxx @@ -277,7 +277,20 @@ namespace build2 info << "cxx.target is " << ct; } - // In the VC world you link things directly with link.exe. + // Load the bin.ar module unless we were asked to only build shared + // libraries. + // + if (auto l = r["config.bin.lib"]) + { + if (cast (l) != "shared") + { + if (!cast_false (b["bin.ar.loaded"])) + load_module ("bin.ar", r, b, loc, false, bin_hints); + } + } + + // In the VC world you link things directly with link.exe so load the + // bin.ld module. // if (cid == "msvc") { @@ -315,39 +328,46 @@ namespace build2 auto& r (b.rules); + // We register for configure so that we detect unresolved imports + // during configuration rather that later, e.g., during update. + // + // @@ Should we check if install module was loaded (see bin)? + // + r.insert (perform_update_id, "cxx.compile", compile::instance); r.insert (perform_clean_id, "cxx.compile", compile::instance); - - r.insert (perform_update_id, "cxx.compile", compile::instance); - r.insert (perform_clean_id, "cxx.compile", compile::instance); - - r.insert (perform_update_id, "cxx.compile", compile::instance); - r.insert (perform_clean_id, "cxx.compile", compile::instance); + r.insert (configure_update_id, "cxx.compile", compile::instance); r.insert (perform_update_id, "cxx.link", link::instance); r.insert (perform_clean_id, "cxx.link", link::instance); + r.insert (configure_update_id, "cxx.link", link::instance); - r.insert (perform_update_id, "cxx.link", link::instance); - r.insert (perform_clean_id, "cxx.link", link::instance); - - r.insert (perform_update_id, "cxx.link", link::instance); - r.insert (perform_clean_id, "cxx.link", link::instance); + r.insert (perform_install_id, "cxx.install", install::instance); - // Register for configure so that we detect unresolved imports during - // configuration rather that later, e.g., during update. + // Only register static object/library rules if the bin.ar module is + // loaded (by us or by the user). // - r.insert (configure_update_id, "cxx.compile", compile::instance); - r.insert (configure_update_id, "cxx.compile", compile::instance); + if (cast_false (b["bin.ar.loaded"])) + { + r.insert (perform_update_id, "cxx.compile", compile::instance); + r.insert (perform_clean_id, "cxx.compile", compile::instance); + r.insert (configure_update_id, "cxx.compile", compile::instance); + + r.insert (perform_update_id, "cxx.link", link::instance); + r.insert (perform_clean_id, "cxx.link", link::instance); + r.insert (configure_update_id, "cxx.link", link::instance); + + r.insert (perform_install_id, "cxx.install", install::instance); + } + + r.insert (perform_update_id, "cxx.compile", compile::instance); + r.insert (perform_clean_id, "cxx.compile", compile::instance); r.insert (configure_update_id, "cxx.compile", compile::instance); - r.insert (configure_update_id, "cxx.link", link::instance); - r.insert (configure_update_id, "cxx.link", link::instance); + r.insert (perform_update_id, "cxx.link", link::instance); + r.insert (perform_clean_id, "cxx.link", link::instance); r.insert (configure_update_id, "cxx.link", link::instance); - //@@ Should we check if install module was loaded (see bin)? - // - r.insert (perform_install_id, "cxx.install", install::instance); - r.insert (perform_install_id, "cxx.install", install::instance); r.insert (perform_install_id, "cxx.install", install::instance); } -- cgit v1.1