summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Companion.cpp38
-rw-r--r--src/Companion.h9
-rw-r--r--src/factories/CompressedTextureFactory.cpp4
-rw-r--r--src/factories/TextureFactory.cpp4
-rw-r--r--src/main.cpp20
5 files changed, 51 insertions, 24 deletions
diff --git a/src/Companion.cpp b/src/Companion.cpp
index 762ebd3..61cdf4c 100644
--- a/src/Companion.cpp
+++ b/src/Companion.cpp
@@ -475,7 +475,7 @@ void Companion::ParseCurrentFileConfig(YAML::Node node) {
}
void Companion::ParseHash() {
- const std::string out = this->gDestinationPath / "torch.hash.yml";
+ const std::string out = this->gDestinationDirectory / "torch.hash.yml";
if(fs::exists(out)) {
this->gHashNode = YAML::LoadFile(out);
@@ -506,9 +506,10 @@ bool Companion::NodeHasChanges(const std::string& path) {
const std::vector<uint8_t> data = std::vector<uint8_t>(std::istreambuf_iterator( yaml ), {});
this->gCurrentHash = CalculateHash(data);
bool needsInit = true;
+ auto srcRelativePath = RelativePathToSrcDir(path);
- if(this->gHashNode[path]) {
- auto entry = GetSafeNode<YAML::Node>(this->gHashNode, path);
+ if(this->gHashNode[srcRelativePath]) {
+ auto entry = GetSafeNode<YAML::Node>(this->gHashNode, srcRelativePath);
const auto hash = GetSafeNode<std::string>(entry, "hash", "no-hash");
auto modes = GetSafeNode<YAML::Node>(entry, "extracted");
auto extracted = GetSafeNode<bool>(modes, ExportTypeToString(this->gConfig.exporterType));
@@ -516,18 +517,18 @@ bool Companion::NodeHasChanges(const std::string& path) {
if(hash == this->gCurrentHash) {
needsInit = false;
if(extracted) {
- SPDLOG_INFO("Skipping {} as it has not changed", path);
+ SPDLOG_INFO("Skipping {} as it has not changed", srcRelativePath);
return false;
}
}
}
if(needsInit) {
- this->gHashNode[path] = YAML::Node();
- this->gHashNode[path]["hash"] = this->gCurrentHash;
- this->gHashNode[path]["extracted"] = YAML::Node();
+ this->gHashNode[srcRelativePath] = YAML::Node();
+ this->gHashNode[srcRelativePath]["hash"] = this->gCurrentHash;
+ this->gHashNode[srcRelativePath]["extracted"] = YAML::Node();
for(size_t m = 0; m <= static_cast<size_t>(ExportType::Modding); m++) {
- this->gHashNode[path]["extracted"][ExportTypeToString(static_cast<ExportType>(m))] = false;
+ this->gHashNode[srcRelativePath]["extracted"][ExportTypeToString(static_cast<ExportType>(m))] = false;
}
}
@@ -977,7 +978,7 @@ void Companion::ProcessFile(YAML::Node root) {
}
if(this->gConfig.exporterType != ExportType::Binary) {
- this->gHashNode[this->gCurrentFile]["extracted"][ExportTypeToString(this->gConfig.exporterType)] = true;
+ this->gHashNode[RelativePathToSrcDir(this->gCurrentFile)]["extracted"][ExportTypeToString(this->gConfig.exporterType)] = true;
}
}
@@ -1074,9 +1075,13 @@ void Companion::Process() {
auto gbi = cfg["gbi"];
auto gbi_floats = cfg["gbi_floats"];
auto modding_path = opath && opath["modding"] ? opath["modding"].as<std::string>() : "modding";
- auto output_path = this->gDestinationPath;
- this->gConfig.moddingPath = this->gSourceDirectory / modding_path;
+ if (!fs::exists(this->gDestinationDirectory)) {
+ create_directories(this->gDestinationDirectory);
+ }
+ auto output_path = this->gDestinationDirectory;
+
+ this->gConfig.moddingPath = this->gDestinationDirectory / modding_path;
switch (this->gConfig.exporterType) {
case ExportType::Binary: {
std::string extension = "";
@@ -1166,6 +1171,7 @@ void Companion::Process() {
if(cfg["enums"]) {
auto enums = GetSafeNode<std::vector<std::string>>(cfg, "enums");
for (auto& file : enums) {
+ file = this->gSourceDirectory / file;
this->ParseEnums(file);
}
}
@@ -1277,7 +1283,7 @@ void Companion::Process() {
}
// Write entries hash
- std::ofstream file(this->gDestinationPath / "torch.hash.yml", std::ios::binary);
+ std::ofstream file(this->gDestinationDirectory / "torch.hash.yml", std::ios::binary);
file << this->gHashNode;
file.close();
@@ -1578,6 +1584,14 @@ std::string Companion::RelativePath(const std::string& path) const {
return doutput;
}
+std::string Companion::RelativePathToDestDir(const std::string& path) const {
+ return relative(path, this->gDestinationDirectory);
+}
+
+std::string Companion::RelativePathToSrcDir(const std::string& path) const {
+ return relative(path, this->gSourceDirectory);
+}
+
std::string Companion::CalculateHash(const std::vector<uint8_t>& data) {
return Chocobo1::SHA1().addData(data).finalize().toString();
}
diff --git a/src/Companion.h b/src/Companion.h
index bff5a72..b40dad3 100644
--- a/src/Companion.h
+++ b/src/Companion.h
@@ -114,7 +114,7 @@ public:
explicit Companion(std::filesystem::path rom, const ArchiveType otr, const bool debug, const bool modding = false,
const std::string& srcDir = "", const std::string& destPath = "") : gCartridge(nullptr),
- gSourceDirectory(srcDir), gDestinationPath(destPath) {
+ gSourceDirectory(srcDir), gDestinationDirectory(destPath) {
this->gRomPath = rom;
this->gConfig.otrMode = otr;
this->gConfig.debug = debug;
@@ -124,7 +124,7 @@ public:
explicit Companion(std::vector<uint8_t> rom, const ArchiveType otr, const bool debug, const bool modding = false,
const std::string& srcDir = "", const std::string& destPath = "") : gCartridge(nullptr),
- gSourceDirectory(srcDir), gDestinationPath(destPath) {
+ gSourceDirectory(srcDir), gDestinationDirectory(destPath) {
this->gRomData = rom;
this->gConfig.otrMode = otr;
this->gConfig.debug = debug;
@@ -151,6 +151,7 @@ public:
N64::Cartridge* GetCartridge() const { return this->gCartridge.get(); }
std::vector<uint8_t>& GetRomData() { return this->gRomData; }
std::string GetOutputPath() { return this->gConfig.outputPath; }
+ std::string GetDestRelativeOutputPath() { return RelativePathToDestDir(GetOutputPath()); }
GBIVersion GetGBIVersion() const { return this->gConfig.gbi.version; }
GBIMinorVersion GetGBIMinorVersion() const { return this->gConfig.gbi.subversion; }
@@ -179,6 +180,8 @@ public:
static void Pack(const std::string& folder, const std::string& output, const ArchiveType otrMode);
std::string NormalizeAsset(const std::string& name) const;
std::string RelativePath(const std::string& path) const;
+ std::string RelativePathToSrcDir(const std::string& path) const;
+ std::string RelativePathToDestDir(const std::string& path) const;
void RegisterCompanionFile(const std::string path, std::vector<char> data);
TorchConfig& GetConfig() { return this->gConfig; }
@@ -190,7 +193,7 @@ private:
TorchConfig gConfig;
YAML::Node gModdingConfig;
fs::path gSourceDirectory;
- fs::path gDestinationPath;
+ fs::path gDestinationDirectory;
fs::path gCurrentDirectory;
std::string gCurrentHash;
std::string gAssetPath;
diff --git a/src/factories/CompressedTextureFactory.cpp b/src/factories/CompressedTextureFactory.cpp
index 6b507e4..34ccc61 100644
--- a/src/factories/CompressedTextureFactory.cpp
+++ b/src/factories/CompressedTextureFactory.cpp
@@ -218,7 +218,7 @@ ExportResult CompressedTextureCodeExporter::Export(std::ostream &write, std::sha
write << tab_t << "{\n";
- write << tab_t << tab_t << "#include \"" << Companion::Instance->GetOutputPath() + "/" << *replacement << ".incbin.c\"\n";
+ write << tab_t << tab_t << "#include \"" << Companion::Instance->GetDestRelativeOutputPath() + "/" << *replacement << ".incbin.c\"\n";
write << tab_t << "},\n";
@@ -231,7 +231,7 @@ ExportResult CompressedTextureCodeExporter::Export(std::ostream &write, std::sha
} else {
write << "u8 " << symbol << "[] = {\n";
- write << tab_t << "#include \"" << Companion::Instance->GetOutputPath() + "/" << *replacement << ".incbin.c\"\n";
+ write << tab_t << "#include \"" << Companion::Instance->GetDestRelativeOutputPath() + "/" << *replacement << ".incbin.c\"\n";
write << "};\n";
diff --git a/src/factories/TextureFactory.cpp b/src/factories/TextureFactory.cpp
index 75b6796..8e9d53c 100644
--- a/src/factories/TextureFactory.cpp
+++ b/src/factories/TextureFactory.cpp
@@ -137,7 +137,7 @@ ExportResult TextureCodeExporter::Export(std::ostream &write, std::shared_ptr<IP
write << tab_t << "{\n";
if (!Companion::Instance->IsUsingIndividualIncludes()){
- write << tab_t << tab_t << "#include \"" << Companion::Instance->GetOutputPath() + "/" << *replacement << ".inc.c\"\n";
+ write << tab_t << tab_t << "#include \"" << Companion::Instance->GetDestRelativeOutputPath() + "/" << *replacement << ".inc.c\"\n";
} else {
write << imgstream.str();
}
@@ -153,7 +153,7 @@ ExportResult TextureCodeExporter::Export(std::ostream &write, std::shared_ptr<IP
write << GetSafeNode<std::string>(node, "ctype", "u8") << " " << symbol << "[] = {\n";
if (!Companion::Instance->IsUsingIndividualIncludes()){
- write << tab_t << "#include \"" << Companion::Instance->GetOutputPath() + "/" << *replacement << ".inc.c\"\n";
+ write << tab_t << "#include \"" << Companion::Instance->GetDestRelativeOutputPath() + "/" << *replacement << ".inc.c\"\n";
} else {
write << imgstream.str();
}
diff --git a/src/main.cpp b/src/main.cpp
index afb3536..6fb356f 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -21,18 +21,17 @@ int main(int argc, char *argv[]) {
bool xmlMode = false;
bool debug = false;
std::string srcdir;
- std::string destdir
+ std::string destdir;
app.require_subcommand();
- app.add_option("-s", "--srcdir", srcdir, "Set source directory to locate config.yml, asset metadata, and modding files for importing");
- app.add_option("-d", "--destdir", destdir, "Set destination directory for exporting and generating binaries and source code");
-
/* Generate an OTR */
const auto otr = app.add_subcommand("otr", "OTR - Generates an otr\n");
otr->add_option("<baserom.z64>", filename, "")->required()->check(CLI::ExistingFile);
otr->add_flag("-v,--verbose", debug, "Verbose Debug Mode");
+ otr->add_option("-s,--srcdir", srcdir, "Set source directory to locate config.yml and asset metadata for processing")->check(CLI::ExistingDirectory);
+ otr->add_option("-d,--destdir", destdir, "Set destination directory for export");
otr->parse_complete_callback([&] {
const auto instance = Companion::Instance = new Companion(filename, ArchiveType::OTR, debug, srcdir, destdir);
@@ -44,6 +43,8 @@ int main(int argc, char *argv[]) {
o2r->add_option("<baserom.z64>", filename, "")->required()->check(CLI::ExistingFile);
o2r->add_flag("-v,--verbose", debug, "Verbose Debug Mode");
+ o2r->add_option("-s,--srcdir", srcdir, "Set source directory to locate config.yml and asset metadata for processing")->check(CLI::ExistingDirectory);
+ o2r->add_option("-d,--destdir", destdir, "Set destination directory for export");
o2r->parse_complete_callback([&] {
const auto instance = Companion::Instance = new Companion(filename, ArchiveType::O2R, debug, srcdir, destdir);
@@ -55,6 +56,8 @@ int main(int argc, char *argv[]) {
code->add_option("<baserom.z64>", filename, "")->required()->check(CLI::ExistingFile);
code->add_flag("-v,--verbose", debug, "Verbose Debug Mode; adds offsets to C code");
+ code->add_option("-s,--srcdir", srcdir, "Set source directory to locate config.yml and asset metadata for processing")->check(CLI::ExistingDirectory);
+ code->add_option("-d,--destdir", destdir, "Set destination directory to place C code to");
code->parse_complete_callback([&]() {
const auto instance = Companion::Instance = new Companion(filename, ArchiveType::None, debug, srcdir, destdir);
@@ -65,6 +68,8 @@ int main(int argc, char *argv[]) {
const auto binary = app.add_subcommand("binary", "Binary - Generates a binary\n");
binary->add_option("<baserom.z64>", filename, "")->required()->check(CLI::ExistingFile);
+ binary->add_option("-s,--srcdir", srcdir, "Set source directory to locate config.yml and asset metadata for processing")->check(CLI::ExistingDirectory);
+ binary->add_option("-d,--destdir", destdir, "Set destination directory to place binary to");
binary->parse_complete_callback([&] {
const auto instance = Companion::Instance = new Companion(filename, ArchiveType::None, debug, srcdir, destdir);
@@ -76,7 +81,8 @@ int main(int argc, char *argv[]) {
header->add_option("<baserom.z64>", filename, "")->required()->check(CLI::ExistingFile);
header->add_flag("-o,--otr", otrModeSelected, "OTR/O2R Mode");
-
+ header->add_option("-s,--srcdir", srcdir, "Set source directory to locate config.yml and asset metadata for processing")->check(CLI::ExistingDirectory);
+ header->add_option("-d,--destdir", destdir, "Set destination directory to place headers to");
header->parse_complete_callback([&] {
if (otrModeSelected) {
@@ -121,6 +127,8 @@ int main(int argc, char *argv[]) {
modding_import->add_option("mode", mode, "code, otr, o2r or header")->required();
modding_import->add_option("<baserom.z64>", filename, "")->required()->check(CLI::ExistingFile);
modding_import->add_flag("-v,--verbose", debug, "Verbose Debug Mode");
+ modding_import->add_option("-s,--srcdir", srcdir, "Set source directory to locate config.yml and asset metadata for processing, including modified files")->check(CLI::ExistingDirectory);
+ modding_import->add_option("-d,--destdir", destdir, "Set destination directory to place for generating C code");
modding_import->parse_complete_callback([&] {
ArchiveType otrMode;
@@ -147,6 +155,8 @@ int main(int argc, char *argv[]) {
modding_export->add_flag("-x,--xml", xmlMode, "XML Mode");
modding_export->add_option("<baserom.z64>", filename, "")->required()->check(CLI::ExistingFile);
+ modding_export->add_option("-s,--srcdir", srcdir, "Set source directory to locate config.yml and asset metadata for processing, including modified files")->check(CLI::ExistingDirectory);
+ modding_export->add_option("-d,--destdir", destdir, "Set destination directory to place for generating modified files");
modding_export->parse_complete_callback([&] {
const auto instance = Companion::Instance = new Companion(filename, ArchiveType::None, debug, srcdir, destdir);