Compare commits
2 Commits
7fcb450e0d
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| a09b0d22bf | |||
| 8d91f2eb28 |
297
src/commands.cpp
297
src/commands.cpp
@@ -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() {
|
||||||
|
|||||||
@@ -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.");
|
||||||
}
|
}
|
||||||
|
|||||||
34
src/types.h
34
src/types.h
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user