268 lines
10 KiB
C++
268 lines
10 KiB
C++
#include <stdexcept>
|
|
|
|
#include "app.h"
|
|
#include "types.h"
|
|
|
|
void Application::buildProject() {
|
|
auto checkBuildDirsTask =
|
|
m_Taskflow.emplace([this]() { this->checkBuildDirs(); })
|
|
.name("checkBuildDirs");
|
|
if (m_BuildType == BuildType::none) {
|
|
auto configureDirDebugTask =
|
|
m_Taskflow
|
|
.emplace(
|
|
[this]() { this->configureDir("build/debug", "debug"); })
|
|
.name("configureDir(build/debug)");
|
|
auto buildDirDebugTask =
|
|
m_Taskflow.emplace([this]() { this->buildDir("build/debug"); })
|
|
.name("buildDir(build/debug)");
|
|
|
|
configureDirDebugTask.precede(buildDirDebugTask);
|
|
checkBuildDirsTask.precede(configureDirDebugTask);
|
|
|
|
auto configureDirReleaseTask =
|
|
m_Taskflow
|
|
.emplace([this]() {
|
|
this->configureDir("build/release", "Release");
|
|
})
|
|
.name("configureDir(build/release)");
|
|
auto buildDirReleaseTask =
|
|
m_Taskflow.emplace([this]() { this->buildDir("build/release"); })
|
|
.name("buildDir(build/release)");
|
|
|
|
configureDirReleaseTask.precede(buildDirReleaseTask);
|
|
checkBuildDirsTask.precede(configureDirReleaseTask);
|
|
|
|
auto configureDirRelWithDebTask =
|
|
m_Taskflow
|
|
.emplace([this]() {
|
|
this->configureDir("build/relwithdeb", "RelWithDeb");
|
|
})
|
|
.name("configureDir(build/relwithdeb)");
|
|
auto buildDirRelWithDebTask =
|
|
m_Taskflow.emplace([this]() { this->buildDir("build/relwithdeb"); })
|
|
.name("buildDir(build/relwithdeb)");
|
|
|
|
configureDirRelWithDebTask.precede(buildDirRelWithDebTask);
|
|
checkBuildDirsTask.precede(configureDirRelWithDebTask);
|
|
|
|
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)");
|
|
|
|
configureDirMinSizeRelTask.precede(buildDirMinSizeRelTask);
|
|
checkBuildDirsTask.precede(configureDirMinSizeRelTask);
|
|
|
|
} 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", "RelWithDeb");
|
|
})
|
|
.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);
|
|
}
|
|
}
|
|
|
|
void Application::configureProject() {
|
|
auto checkBuildDirsTask =
|
|
m_Taskflow.emplace([this]() { this->checkBuildDirs(); })
|
|
.name("checkBuildDirs");
|
|
if (m_BuildType == BuildType::none) {
|
|
auto configureDirDebugTask =
|
|
m_Taskflow
|
|
.emplace(
|
|
[this]() { this->configureDir("build/debug", "Debug"); })
|
|
.name("configureDir(build/debug)");
|
|
checkBuildDirsTask.precede(configureDirDebugTask);
|
|
|
|
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", "RelWithDeb");
|
|
})
|
|
.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", "RelWithDeb");
|
|
})
|
|
.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);
|
|
}
|
|
}
|
|
|
|
void Application::cleanProject() {
|
|
auto checkBuildDirsTask =
|
|
m_Taskflow.emplace([this]() { this->checkBuildDirs(); })
|
|
.name("checkBuildDirs");
|
|
|
|
if (m_BuildType == BuildType::none) {
|
|
auto cleanDirDebugTask =
|
|
m_Taskflow.emplace([this]() { this->cleanDir("build/debug"); })
|
|
.name("cleanDir(build/debug)");
|
|
checkBuildDirsTask.precede(cleanDirDebugTask);
|
|
|
|
auto cleanDirReleaseTask =
|
|
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);
|
|
}
|
|
}
|
|
|
|
void Application::deleteProject() {
|
|
// No point in using taskflow for this...
|
|
// In all cases its just deleting a single directory...
|
|
// Bit overkill for that
|
|
switch (m_BuildType) {
|
|
case none:
|
|
deleteDir("build");
|
|
break;
|
|
case debug:
|
|
deleteDir("build/debug");
|
|
break;
|
|
case release:
|
|
deleteDir("build/release");
|
|
break;
|
|
case relwithdeb:
|
|
deleteDir("build/relwithdeb");
|
|
break;
|
|
case minsizerel:
|
|
deleteDir("build/minsizerel");
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Application::rebuildProject() {
|
|
deleteProject();
|
|
buildProject();
|
|
}
|