Compare commits

..

2 Commits

Author SHA1 Message Date
a09b0d22bf Forgor include, not sure why it compiled???
All checks were successful
Build / Build (linux) (push) Successful in 33s
Build / Build (windows) (push) Successful in 55s
2026-06-30 10:43:57 -04:00
8d91f2eb28 Get rid of the ugly switch cases 2026-06-30 10:42:34 -04:00
3 changed files with 116 additions and 248 deletions

View File

@@ -1,4 +1,4 @@
#include <stdexcept> #include <taskflow/core/task.hpp>
#include "app.h" #include "app.h"
#include "types.h" #include "types.h"
@@ -8,112 +8,45 @@ void Application::buildProject() {
m_Taskflow.emplace([this]() { this->checkBuildDirs(); }) m_Taskflow.emplace([this]() { this->checkBuildDirs(); })
.name("checkBuildDirs"); .name("checkBuildDirs");
if (m_BuildType == BuildType::none) { if (m_BuildType == BuildType::none) {
auto configureDirDebugTask = tf::Task previousBuildTask;
for (BuildType type : buildTypes) {
std::string dir = BuildTypeToDir(type);
std::string name = BuildTypeToString(type);
auto configureTask =
m_Taskflow m_Taskflow
.emplace( .emplace(
[this]() { this->configureDir("build/debug", "debug"); }) [this, dir, name]() { this->configureDir(dir, name); })
.name("configureDir(build/debug)"); .name(std::format("configureDir({})", dir));
auto buildDirDebugTask =
m_Taskflow.emplace([this]() { this->buildDir("build/debug"); })
.name("buildDir(build/debug)");
auto configureDirReleaseTask = auto buildTask =
m_Taskflow m_Taskflow.emplace([this, dir]() { this->buildDir(dir); })
.emplace([this]() { .name(std::format("buildDir({})", dir));
this->configureDir("build/release", "Release"); configureTask.succeed(checkBuildDirsTask);
}) buildTask.succeed(configureTask);
.name("configureDir(build/release)"); if (!previousBuildTask.empty()) {
auto buildDirReleaseTask = buildTask.succeed(previousBuildTask);
m_Taskflow.emplace([this]() { this->buildDir("build/release"); })
.name("buildDir(build/release)");
auto configureDirRelWithDebTask =
m_Taskflow
.emplace([this]() {
this->configureDir("build/relwithdeb", "RelWithDebInfo");
})
.name("configureDir(build/relwithdeb)");
auto buildDirRelWithDebTask =
m_Taskflow.emplace([this]() { this->buildDir("build/relwithdeb"); })
.name("buildDir(build/relwithdeb)");
auto configureDirMinSizeRelTask =
m_Taskflow
.emplace([this]() {
this->configureDir("build/minsizerel", "MinSizeRel");
})
.name("configureDir(build/minsizerel)");
auto buildDirMinSizeRelTask =
m_Taskflow.emplace([this]() { this->buildDir("build/minsizerel"); })
.name("buildDir(build/minsizerel)");
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 =
m_Taskflow
.emplace(
[this]() { this->configureDir("build/debug", "Debug"); })
.name("configureDir(build/debug)");
auto buildDirTask =
m_Taskflow.emplace([this]() { this->buildDir("build/debug"); })
.name("buildDir(build/debug)");
configureDirTask.precede(buildDirTask);
checkBuildDirsTask.precede(configureDirTask);
} else if (m_BuildType == BuildType::release) {
auto configureDirTask =
m_Taskflow
.emplace([this]() {
this->configureDir("build/release", "Release");
})
.name("configureDir(build/release)");
auto buildDirTask =
m_Taskflow.emplace([this]() { this->buildDir("build/release"); })
.name("buildDir(build/release)");
configureDirTask.precede(buildDirTask);
checkBuildDirsTask.precede(configureDirTask);
} else if (m_BuildType == BuildType::relwithdeb) {
auto configureDirTask =
m_Taskflow
.emplace([this]() {
this->configureDir("build/relwithdeb", "RelWithDebInfo");
})
.name("configureDir(build/relwithdeb)");
auto buildDirTask =
m_Taskflow.emplace([this]() { this->buildDir("build/relwithdeb"); })
.name("buildDir(build/relwithdeb)");
configureDirTask.precede(buildDirTask);
checkBuildDirsTask.precede(configureDirTask);
} else if (m_BuildType == BuildType::minsizerel) {
auto configureDirTask =
m_Taskflow
.emplace([this]() {
this->configureDir("build/minsizerel", "MinSizeRel");
})
.name("configureDir(build/minsizerel)");
auto buildDirTask =
m_Taskflow.emplace([this]() { this->buildDir("build/minsizerel"); })
.name("buildDir(build/minsizerel)");
configureDirTask.precede(buildDirTask);
checkBuildDirsTask.precede(configureDirTask);
} }
previousBuildTask = buildTask;
}
return;
}
auto configureDirTask =
m_Taskflow
.emplace([this]() {
this->configureDir(BuildTypeToDir(m_BuildType),
BuildTypeToString(m_BuildType));
})
.name(std::format("configureDir({})", BuildTypeToDir(m_BuildType)));
auto buildDirTask =
m_Taskflow
.emplace([this]() { this->buildDir(BuildTypeToDir(m_BuildType)); })
.name(std::format("buildDir({})", BuildTypeToDir(m_BuildType)));
configureDirTask.precede(buildDirTask);
checkBuildDirsTask.precede(configureDirTask);
} }
void Application::configureProject() { void Application::configureProject() {
@@ -121,72 +54,27 @@ void Application::configureProject() {
m_Taskflow.emplace([this]() { this->checkBuildDirs(); }) m_Taskflow.emplace([this]() { this->checkBuildDirs(); })
.name("checkBuildDirs"); .name("checkBuildDirs");
if (m_BuildType == BuildType::none) { if (m_BuildType == BuildType::none) {
auto configureDirDebugTask = for (BuildType type : buildTypes) {
std::string dir = BuildTypeToDir(type);
std::string name = BuildTypeToString(type);
auto configureDirTask =
m_Taskflow m_Taskflow
.emplace( .emplace(
[this]() { this->configureDir("build/debug", "Debug"); }) [this, dir, name]() { this->configureDir(dir, name); })
.name("configureDir(build/debug)"); .name(std::format("configureDir({})", dir));
checkBuildDirsTask.precede(configureDirDebugTask); checkBuildDirsTask.precede(configureDirTask);
auto configureDirReleaseTask =
m_Taskflow
.emplace([this]() {
this->configureDir("build/release", "Release");
})
.name("configureDir(build/release)");
checkBuildDirsTask.precede(configureDirReleaseTask);
auto configureDirRelWithDebTask =
m_Taskflow
.emplace([this]() {
this->configureDir("build/relwithdeb", "RelWithDebInfo");
})
.name("configureDir(build/relwithdeb)");
checkBuildDirsTask.precede(configureDirRelWithDebTask);
auto configureDirMinSizeRelTask =
m_Taskflow
.emplace([this]() {
this->configureDir("build/minsizerel", "MinSizeRel");
})
.name("configureDir(build/minsizerel)");
checkBuildDirsTask.precede(configureDirMinSizeRelTask);
} else if (m_BuildType == BuildType::debug) {
auto configureDirDebugTask =
m_Taskflow
.emplace(
[this]() { this->configureDir("build/debug", "Debug"); })
.name("configureDir(build/debug)");
checkBuildDirsTask.precede(configureDirDebugTask);
} else if (m_BuildType == BuildType::release) {
auto configureDirReleaseTask =
m_Taskflow
.emplace([this]() {
this->configureDir("build/release", "Release");
})
.name("configureDir(build/release)");
checkBuildDirsTask.precede(configureDirReleaseTask);
} else if (m_BuildType == BuildType::relwithdeb) {
auto configureDirRelWithDebTask =
m_Taskflow
.emplace([this]() {
this->configureDir("build/relwithdeb", "RelWithDebInfo");
})
.name("configureDir(build/relwithdeb)");
checkBuildDirsTask.precede(configureDirRelWithDebTask);
} else if (m_BuildType == BuildType::minsizerel) {
auto configureDirMinSizeRelTask =
m_Taskflow
.emplace([this]() {
this->configureDir("build/minsizerel", "MinSizeRel");
})
.name("configureDir(build/minsizerel)");
checkBuildDirsTask.precede(configureDirMinSizeRelTask);
} }
return;
}
auto configureDirDebugTask =
m_Taskflow
.emplace([this]() {
this->configureDir(BuildTypeToDir(m_BuildType),
BuildTypeToString(m_BuildType));
})
.name(std::format("configureDir({})", BuildTypeToDir(m_BuildType)));
checkBuildDirsTask.precede(configureDirDebugTask);
} }
void Application::cleanProject() { void Application::cleanProject() {
@@ -195,72 +83,29 @@ void Application::cleanProject() {
.name("checkBuildDirs"); .name("checkBuildDirs");
if (m_BuildType == BuildType::none) { if (m_BuildType == BuildType::none) {
auto cleanDirDebugTask = for (BuildType type : buildTypes) {
m_Taskflow.emplace([this]() { this->cleanDir("build/debug"); }) std::string dir = BuildTypeToDir(type);
.name("cleanDir(build/debug)"); auto cleanDirTask =
checkBuildDirsTask.precede(cleanDirDebugTask); m_Taskflow.emplace([this, dir]() { this->cleanDir(dir); })
.name(std::format("cleanDir({})", dir));
auto cleanDirReleaseTask = checkBuildDirsTask.precede(cleanDirTask);
m_Taskflow.emplace([this]() { this->cleanDir("build/release"); })
.name("cleanDir(build/release)");
checkBuildDirsTask.precede(cleanDirReleaseTask);
auto cleanDirRelWithDebTask =
m_Taskflow.emplace([this]() { this->cleanDir("build/relwithdeb"); })
.name("cleanDir(build/relwithdeb)");
checkBuildDirsTask.precede(cleanDirRelWithDebTask);
auto cleanDirMinSizeRelTask =
m_Taskflow.emplace([this]() { this->cleanDir("build/minsizerel"); })
.name("cleanDir(build/minsizerel)");
checkBuildDirsTask.precede(cleanDirMinSizeRelTask);
} else if (m_BuildType == BuildType::debug) {
auto cleanDirDebugTask =
m_Taskflow.emplace([this]() { this->cleanDir("build/debug"); })
.name("cleanDir(build/debug)");
checkBuildDirsTask.precede(cleanDirDebugTask);
} else if (m_BuildType == BuildType::release) {
auto cleanDirReleaseTask =
m_Taskflow.emplace([this]() { this->cleanDir("build/release"); })
.name("cleanDir(build/release)");
checkBuildDirsTask.precede(cleanDirReleaseTask);
} else if (m_BuildType == BuildType::relwithdeb) {
auto cleanDirRelWithDebTask =
m_Taskflow.emplace([this]() { this->cleanDir("build/relwithdeb"); })
.name("cleanDir(build/relwithdeb)");
checkBuildDirsTask.precede(cleanDirRelWithDebTask);
} else if (m_BuildType == BuildType::minsizerel) {
auto cleanDirMinSizeRelTask =
m_Taskflow.emplace([this]() { this->cleanDir("build/minsizerel"); })
.name("cleanDir(build/minsizerel)");
checkBuildDirsTask.precede(cleanDirMinSizeRelTask);
} }
return;
}
auto cleanDirDebugTask =
m_Taskflow
.emplace([this]() { this->cleanDir(BuildTypeToDir(m_BuildType)); })
.name(std::format("cleanDir({})", BuildTypeToDir(m_BuildType)));
checkBuildDirsTask.precede(cleanDirDebugTask);
} }
void Application::deleteProject() { void Application::deleteProject() {
// No point in using taskflow for this... if (m_BuildType == BuildType::none) {
// In all cases its just deleting a single directory...
// Bit overkill for that
switch (m_BuildType) {
case none:
deleteDir("build"); deleteDir("build");
break; return;
case debug:
deleteDir("build/debug");
break;
case release:
deleteDir("build/release");
break;
case relwithdeb:
deleteDir("build/relwithdeb");
break;
case minsizerel:
deleteDir("build/minsizerel");
break;
} }
deleteDir(BuildTypeToDir(m_BuildType));
} }
void Application::rebuildProject() { void Application::rebuildProject() {

View File

@@ -3,6 +3,7 @@
#include "app.h" #include "app.h"
#include "logging.h" #include "logging.h"
#include "types.h"
void Application::deleteDir(const std::filesystem::path& path) { void Application::deleteDir(const std::filesystem::path& path) {
if (m_DryRun) { if (m_DryRun) {
@@ -59,26 +60,14 @@ void Application::checkDir(std::string path) {
void Application::checkBuildDirs() { void Application::checkBuildDirs() {
checkDir("build"); checkDir("build");
switch (m_BuildType) { if (m_BuildType == BuildType::none) {
case none:
checkDir("build/debug"); checkDir("build/debug");
checkDir("build/release"); checkDir("build/release");
checkDir("build/relwithdeb"); checkDir("build/relwithdeb");
checkDir("build/minsizerel"); checkDir("build/minsizerel");
break; return;
case debug:
checkDir("build/debug");
break;
case release:
checkDir("build/release");
break;
case relwithdeb:
checkDir("build/relwithdeb");
break;
case minsizerel:
checkDir("build/minsizerel");
break;
} }
checkDir(BuildTypeToDir(m_BuildType));
spdlog::get("filesystem")->info("All directories checked."); spdlog::get("filesystem")->info("All directories checked.");
} }

View File

@@ -1,6 +1,10 @@
#ifndef BUILD_SCRIPT_TYPES #ifndef BUILD_SCRIPT_TYPES
#define BUILD_SCRIPT_TYPES #define BUILD_SCRIPT_TYPES
#include <cassert>
#include <string>
#include <vector>
enum Command { enum Command {
build, build,
configure, configure,
@@ -17,4 +21,34 @@ enum BuildType {
minsizerel, minsizerel,
}; };
std::string BuildTypeToString(BuildType buildType) {
// clang-format off
switch (buildType) {
case BuildType::none: return "none";
case BuildType::debug: return "Debug";
case BuildType::release: return "Release";
case BuildType::relwithdeb: return "RelWithDebInfo";
case BuildType::minsizerel: return "MinSizeRel";
default: assert("BuildTypeToString() default case"); return "";
}
// clang-format on
}
std::string BuildTypeToDir(BuildType buildType) {
// clang-format off
switch (buildType) {
case BuildType::none: assert("BuildType::toDir() called with None value");
case BuildType::debug: return "build/debug";
case BuildType::release: return "build/release";
case BuildType::relwithdeb: return "build/relwithdeb";
case BuildType::minsizerel: return "build/minsizerel";
default: assert("BuildTypeToDir() default case"); return "";
}
// clang-format on
}
const std::vector<BuildType> buildTypes = {BuildType::debug, BuildType::release,
BuildType::relwithdeb,
BuildType::minsizerel};
#endif // !BUILD_SCRIPT_TYPES #endif // !BUILD_SCRIPT_TYPES