diff options
author | Wohlstand <admin@wohlnet.ru> | 2023-05-17 03:53:41 +0300 |
---|---|---|
committer | Wohlstand <admin@wohlnet.ru> | 2023-05-17 03:53:41 +0300 |
commit | 360a1100fa0725fa4c1d5515e19cbabf1b099f6f (patch) | |
tree | 97c25db6d641a22607e43d4ce4d09c28fa473835 /utils/gen_adldata | |
parent | 5a361b4378ea5770c84a5c2baaba19d0135d4b36 (diff) | |
download | libADLMIDI-360a1100fa0725fa4c1d5515e19cbabf1b099f6f.tar.gz libADLMIDI-360a1100fa0725fa4c1d5515e19cbabf1b099f6f.tar.bz2 libADLMIDI-360a1100fa0725fa4c1d5515e19cbabf1b099f6f.zip |
gen_adldata: Support for custom banks.ini files
Add an ability to specify a custom list of banks during the build process
Instead of using a pre-built cache, the new banks list will be generated on the fly.
@mmontag, I didn't forgot about you, and I hope, you could make your own "banks.ini" somewhere outside, and build the the thing with it.
Diffstat (limited to 'utils/gen_adldata')
-rw-r--r-- | utils/gen_adldata/CMakeLists.txt | 16 | ||||
-rw-r--r-- | utils/gen_adldata/gen_adldata.cc | 41 |
2 files changed, 44 insertions, 13 deletions
diff --git a/utils/gen_adldata/CMakeLists.txt b/utils/gen_adldata/CMakeLists.txt index 1e6d6a5..e7ec122 100644 --- a/utils/gen_adldata/CMakeLists.txt +++ b/utils/gen_adldata/CMakeLists.txt @@ -92,13 +92,19 @@ if(WITH_GENADLDATA_COMMENTS) target_compile_options(gen_adldata PUBLIC "-DADLDATA_WITH_COMMENTS") endif() -set(ADLDATA_DATABASE - "${libADLMIDI_SOURCE_DIR}/src/inst_db.cpp" -) +if("${GENADLDATA_CUSTOM_BANKLIST}" STREQUAL "") + set(ADLDATA_INI_FILE "${libADLMIDI_SOURCE_DIR}/banks.ini") + set(ADLDATA_CACHE_FILE "${libADLMIDI_SOURCE_DIR}/fm_banks/adldata-cache.dat") +else() + set(ADLDATA_INI_FILE "${GENADLDATA_CUSTOM_BANKLIST}") + set(ADLDATA_CACHE_FILE "${CMAKE_BINARY_DIR}/instdb/adldata-cache.dat") +endif() + add_custom_target(gen-adldata-run #OUTPUT ${ADLDATA_DATABASE} - COMMAND gen_adldata "${ADLDATA_DATABASE}" + COMMAND gen_adldata "${ADLDATA_INI_FILE}" "${ADLDATA_DATABASE}" "${ADLDATA_CACHE_FILE}" WORKING_DIRECTORY ${libADLMIDI_SOURCE_DIR} - DEPENDS gen_adldata "${libADLMIDI_SOURCE_DIR}/banks.ini" + DEPENDS gen_adldata COMMENT "Running Embedded FM banks database generation" VERBATIM + BYPRODUCTS "${ADLDATA_DATABASE}" ) diff --git a/utils/gen_adldata/gen_adldata.cc b/utils/gen_adldata/gen_adldata.cc index 2dabd66..c6d217b 100644 --- a/utils/gen_adldata/gen_adldata.cc +++ b/utils/gen_adldata/gen_adldata.cc @@ -17,27 +17,45 @@ int main(int argc, char**argv) { - if(argc == 1) + if(argc < 4) { std::printf("Usage:\n" "\n" - "bin/gen_adldata src/adldata.cpp\n" + "bin/gen_adldata banks.ini src/inst_db.cpp adldata-cache.dat\n" "\n"); return 1; } - const char *outFile_s = argv[1]; + const char *iniFile_s = argv[1]; + const char *outFile_s = argv[2]; + const char *cacheFile_s = argv[3]; BanksDump db; { IniProcessing ini; - if(!ini.open("banks.ini")) + if(!ini.open(iniFile_s)) { - std::fprintf(stderr, "Can't open banks.ini!\n"); + std::fprintf(stderr, "Can't open %s!\n", iniFile_s); return 1; } + std::string banksRoot(iniFile_s); + bool banksRootFoundSlash = true; + + for(auto it = banksRoot.end() - 1; it != banksRoot.begin(); --it) + { + if(*it == '/' || *it == '\\') + { + banksRoot.erase(it, banksRoot.end()); + banksRootFoundSlash = true; + break; + } + } + + if(!banksRootFoundSlash) + banksRoot = "."; // Relative path to current directory + uint32_t banks_count; ini.beginGroup("General"); ini.read("banks", banks_count, 0); @@ -45,7 +63,7 @@ int main(int argc, char**argv) if(!banks_count) { - std::fprintf(stderr, "Zero count of banks found in banks.ini!\n"); + std::fprintf(stderr, "Zero count of banks found in %s!\n", iniFile_s); return 1; } @@ -56,6 +74,7 @@ int main(int argc, char**argv) std::fprintf(stderr, "Failed to find bank %u!\n", bank); return 1; } + std::string bank_name; std::string filepath; std::string filepath_d; @@ -71,6 +90,10 @@ int main(int argc, char**argv) ini.read("format", format, "Unknown"); ini.read("file", filepath, ""); ini.read("file-p", filepath_d, ""); + if(!filepath.empty()) + filepath = banksRoot + "/" + filepath; + if(!filepath_d.empty()) + filepath_d = banksRoot + "/" + filepath_d; ini.read("prefix", prefix, ""); ini.read("prefix-p", prefix_d, ""); ini.read("filter-m", filter_m, ""); @@ -167,6 +190,7 @@ int main(int argc, char**argv) std::fprintf(stderr, "Failed to load bank %u, file %s!\n", bank, filepath.c_str()); return 1; } + if(!filepath_d.empty()) { if(!BankFormats::LoadBNK(db, filepath_d.c_str(), bank, bank_name, prefix_d.c_str(), false, true)) @@ -184,6 +208,7 @@ int main(int argc, char**argv) std::fprintf(stderr, "Failed to load bank %u, file %s!\n", bank, filepath.c_str()); return 1; } + if(!filepath_d.empty()) { //printf("Loading %s... \n", filepath_d.c_str()); @@ -215,7 +240,7 @@ int main(int argc, char**argv) bool dontOverride = false; { - measureCounter.LoadCache("fm_banks/adldata-cache.dat"); + measureCounter.LoadCache(cacheFile_s); measureCounter.m_cache_matches = 0; measureCounter.m_done = 0; measureCounter.m_total = db.instruments.size(); @@ -232,7 +257,7 @@ int main(int argc, char**argv) { std::printf("-- Cache data was changed, saving...\n"); std::fflush(stdout); - measureCounter.SaveCache("fm_banks/adldata-cache.dat"); + measureCounter.SaveCache(cacheFile_s); dontOverride = false; } else |