aboutsummaryrefslogtreecommitdiff
path: root/utils/gen_adldata
diff options
context:
space:
mode:
authorWohlstand <admin@wohlnet.ru>2023-05-17 03:53:41 +0300
committerWohlstand <admin@wohlnet.ru>2023-05-17 03:53:41 +0300
commit360a1100fa0725fa4c1d5515e19cbabf1b099f6f (patch)
tree97c25db6d641a22607e43d4ce4d09c28fa473835 /utils/gen_adldata
parent5a361b4378ea5770c84a5c2baaba19d0135d4b36 (diff)
downloadlibADLMIDI-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.txt16
-rw-r--r--utils/gen_adldata/gen_adldata.cc41
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