From e6dff25b62662c862341e2b71ad879e82a03ceed Mon Sep 17 00:00:00 2001 From: Lyra Date: Mon, 29 Jun 2026 10:06:12 -0400 Subject: [PATCH] Add multithreading tick --- src/app.cpp | 9 +++++++-- src/app.h | 1 + src/args.h | 4 +++- src/commands.cpp | 24 +++++++++++++----------- 4 files changed, 24 insertions(+), 14 deletions(-) diff --git a/src/app.cpp b/src/app.cpp index 37d439e..22533b5 100644 --- a/src/app.cpp +++ b/src/app.cpp @@ -10,7 +10,8 @@ Application::Application(Options options) : m_DryRun(options.dryrun.value()), m_Verbose(options.verbose.value()), m_BuildType(options.buildType.value()), - m_Command(options.command) { + m_Command(options.command), + m_Multithreaded(options.multithreaded.value()) { createAllLoggers(); } @@ -45,7 +46,11 @@ void Application::save_graph(std::string filename) { } void Application::run() { - tf::Executor executor; + int numOfWorkers = 1; + // Default to 4 workers if multithreaded + if (m_Multithreaded) numOfWorkers = 4; + tf::Executor executor(numOfWorkers); + executor.run(m_Taskflow).wait(); spdlog::get("app")->info("All work done!"); } diff --git a/src/app.h b/src/app.h index 19accd5..7285648 100644 --- a/src/app.h +++ b/src/app.h @@ -20,6 +20,7 @@ class Application { private: bool m_DryRun; bool m_Verbose; + bool m_Multithreaded; BuildType m_BuildType; Command m_Command; diff --git a/src/args.h b/src/args.h index 0bb62f7..78d590b 100644 --- a/src/args.h +++ b/src/args.h @@ -12,9 +12,11 @@ struct Options { std::optional verbose = false; std::optional dryrun = false; + std::optional multithreaded = false; std::optional graphFilename; }; -STRUCTOPT(Options, command, buildType, verbose, dryrun, graphFilename); +STRUCTOPT(Options, command, buildType, verbose, dryrun, multithreaded, + graphFilename); Options parse(int argc, char** argv); diff --git a/src/commands.cpp b/src/commands.cpp index 856dad2..a226d0e 100644 --- a/src/commands.cpp +++ b/src/commands.cpp @@ -17,9 +17,6 @@ void Application::buildProject() { m_Taskflow.emplace([this]() { this->buildDir("build/debug"); }) .name("buildDir(build/debug)"); - configureDirDebugTask.precede(buildDirDebugTask); - checkBuildDirsTask.precede(configureDirDebugTask); - auto configureDirReleaseTask = m_Taskflow .emplace([this]() { @@ -30,9 +27,6 @@ void Application::buildProject() { m_Taskflow.emplace([this]() { this->buildDir("build/release"); }) .name("buildDir(build/release)"); - configureDirReleaseTask.precede(buildDirReleaseTask); - checkBuildDirsTask.precede(configureDirReleaseTask); - auto configureDirRelWithDebTask = m_Taskflow .emplace([this]() { @@ -43,9 +37,6 @@ void Application::buildProject() { m_Taskflow.emplace([this]() { this->buildDir("build/relwithdeb"); }) .name("buildDir(build/relwithdeb)"); - configureDirRelWithDebTask.precede(buildDirRelWithDebTask); - checkBuildDirsTask.precede(configureDirRelWithDebTask); - auto configureDirMinSizeRelTask = m_Taskflow .emplace([this]() { @@ -56,8 +47,19 @@ void Application::buildProject() { m_Taskflow.emplace([this]() { this->buildDir("build/minsizerel"); }) .name("buildDir(build/minsizerel)"); - configureDirMinSizeRelTask.precede(buildDirMinSizeRelTask); - checkBuildDirsTask.precede(configureDirMinSizeRelTask); + configureDirDebugTask.succeed(checkBuildDirsTask); + configureDirReleaseTask.succeed(checkBuildDirsTask); + configureDirRelWithDebTask.succeed(checkBuildDirsTask); + configureDirMinSizeRelTask.succeed(checkBuildDirsTask); + + buildDirDebugTask.succeed(configureDirDebugTask); + buildDirReleaseTask.succeed(configureDirReleaseTask); + buildDirRelWithDebTask.succeed(configureDirRelWithDebTask); + buildDirMinSizeRelTask.succeed(configureDirMinSizeRelTask); + + buildDirReleaseTask.succeed(buildDirDebugTask); + buildDirRelWithDebTask.succeed(buildDirReleaseTask); + buildDirMinSizeRelTask.succeed(buildDirRelWithDebTask); } else if (m_BuildType == BuildType::debug) { auto configureDirTask =