| @@ -10,6 +10,7 @@ | |||
| #include <spdlog/spdlog.h> | |||
| #include <algorithm> | |||
| #include <atomic> | |||
| #include <cassert> | |||
| #include <thread> | |||
| @@ -77,16 +78,30 @@ struct compile_file_full { | |||
| compile_command_info cmd_info; | |||
| }; | |||
| std::optional<deps_info> do_compile(const compile_file_full& cf, build_env_ref env) { | |||
| struct compile_counter { | |||
| std::atomic_size_t n; | |||
| const std::size_t max; | |||
| const std::size_t max_digits; | |||
| }; | |||
| std::optional<deps_info> | |||
| do_compile(const compile_file_full& cf, build_env_ref env, compile_counter& counter) { | |||
| fs::create_directories(cf.object_file_path.parent_path()); | |||
| auto source_path = cf.plan.source_path(); | |||
| auto msg = fmt::format("[{}] Compile: {:40}", | |||
| auto msg = fmt::format("[{}] Compile: {}", | |||
| cf.plan.qualifier(), | |||
| fs::relative(source_path, cf.plan.source().basis_path).string()); | |||
| spdlog::info(msg); | |||
| auto&& [dur_ms, proc_res] | |||
| = timed<std::chrono::milliseconds>([&] { return run_proc(cf.cmd_info.command); }); | |||
| spdlog::info("{} - {:>7n}ms", msg, dur_ms.count()); | |||
| auto nth = counter.n.fetch_add(1); | |||
| spdlog::info("{:60} - {:>7n}ms [{:{}}/{}]", | |||
| msg, | |||
| dur_ms.count(), | |||
| nth, | |||
| counter.max_digits, | |||
| counter.max); | |||
| const bool compiled_okay = proc_res.okay(); | |||
| const auto compile_retc = proc_res.retc; | |||
| @@ -192,10 +207,14 @@ bool dds::detail::compile_all(const ref_vector<const compile_file_plan>& compile | |||
| | views::transform([&](auto&& plan) { return realize_plan(plan, env); }) // | |||
| | views::filter([&](auto&& real) { return should_compile(real, env); }); | |||
| const auto total = compiles.size(); | |||
| const auto max_digits = fmt::format("{}", total).size(); | |||
| compile_counter counter{{0}, total, max_digits}; | |||
| std::vector<deps_info> all_new_deps; | |||
| std::mutex mut; | |||
| auto okay = parallel_run(each_realized, njobs, [&](const compile_file_full& full) { | |||
| auto new_dep = do_compile(full, env); | |||
| auto new_dep = do_compile(full, env, counter); | |||
| if (new_dep) { | |||
| std::unique_lock lk{mut}; | |||
| all_new_deps.push_back(std::move(*new_dep)); | |||