Signed-off-by: falkTX <falktx@falktx.com>tags/22.02
| @@ -6,7 +6,24 @@ | |||||
| include dpf/Makefile.base.mk | include dpf/Makefile.base.mk | ||||
| all: cardinal deps dgl plugins gen | |||||
| all: cardinal deps dgl plugins gen resources | |||||
| # -------------------------------------------------------------- | |||||
| # Build config | |||||
| PREFIX ?= /usr/local | |||||
| DESTDIR ?= | |||||
| SYSDEPS ?= false | |||||
| # -------------------------------------------------------------- | |||||
| # Check for system-wide dependencies | |||||
| # HAVE_LIBARCHIVE = $(shell pkg-config --exists libarchive && echo true) | |||||
| # | |||||
| # libjansson.a | |||||
| # libsamplerate.a | |||||
| # libspeexdsp.a | |||||
| # libzstd.a | |||||
| # -------------------------------------------------------------- | # -------------------------------------------------------------- | ||||
| @@ -23,6 +40,9 @@ dgl: | |||||
| plugins: deps | plugins: deps | ||||
| $(MAKE) all -C plugins | $(MAKE) all -C plugins | ||||
| resources: cardinal gen | |||||
| $(MAKE) resources -C plugins | |||||
| ifneq ($(CROSS_COMPILING),true) | ifneq ($(CROSS_COMPILING),true) | ||||
| gen: cardinal dpf/utils/lv2_ttl_generator | gen: cardinal dpf/utils/lv2_ttl_generator | ||||
| @$(CURDIR)/dpf/utils/generate-ttl.sh | @$(CURDIR)/dpf/utils/generate-ttl.sh | ||||
| @@ -1 +1 @@ | |||||
| Subproject commit 1af66e49db01b5e2a5f90e85fe748c162bb83a48 | |||||
| Subproject commit 1da1c811c765689790c8bf4290b2f6939f8046f3 | |||||
| @@ -318,6 +318,55 @@ clean: | |||||
| rm -f $(TARGET) | rm -f $(TARGET) | ||||
| rm -rf $(BUILD_DIR) | rm -rf $(BUILD_DIR) | ||||
| # -------------------------------------------------------------- | |||||
| PLUGIN_LIST = $(subst /plugin.json,,$(wildcard */plugin.json)) | |||||
| PLUGIN_RESOURCES += $(PLUGIN_LIST:%=../bin/Cardinal.lv2/resources/%) | |||||
| PLUGIN_RESOURCES += $(PLUGIN_LIST:%=../bin/Cardinal.lv2/resources/PluginManifests/%.json) | |||||
| ifeq ($(MACOS),true) | |||||
| PLUGIN_RESOURCES += $(PLUGIN_LIST:%=../bin/Cardinal.vst/Contents/Resources/%) | |||||
| PLUGIN_RESOURCES += $(PLUGIN_LIST:%=../bin/Cardinal.vst/Contents/Resources/PluginManifests/%.json) | |||||
| else | |||||
| PLUGIN_RESOURCES += $(PLUGIN_LIST:%=../bin/Cardinal.vst/resources/%) | |||||
| PLUGIN_RESOURCES += $(PLUGIN_LIST:%=../bin/Cardinal.vst/resources/PluginManifests/%.json) | |||||
| endif | |||||
| PLUGIN_RESOURCES += $(PLUGIN_LIST:%=../bin/Cardinal.vst3/Contents/Resources/%) | |||||
| PLUGIN_RESOURCES += $(PLUGIN_LIST:%=../bin/Cardinal.vst3/Contents/Resources/PluginManifests/%.json) | |||||
| resources: $(PLUGIN_RESOURCES) | |||||
| ../bin/Cardinal.lv2/resources/%: %/res | |||||
| -@mkdir -p "$(shell dirname $@)" | |||||
| ln -sf $(abspath $<) $@ | |||||
| ../bin/Cardinal.vst/resources/%: %/res | |||||
| -@mkdir -p "$(shell dirname $@)" | |||||
| ln -sf $(abspath $<) $@ | |||||
| ../bin/Cardinal.vst/Contents/Resources/%: %/res | |||||
| -@mkdir -p "$(shell dirname $@)" | |||||
| ln -sf $(abspath $<) $@ | |||||
| ../bin/Cardinal.vst3/Contents/Resources/%: %/res | |||||
| -@mkdir -p "$(shell dirname $@)" | |||||
| ln -sf $(abspath $<) $@ | |||||
| ../bin/Cardinal.lv2/resources/PluginManifests/%.json: %/plugin.json | |||||
| -@mkdir -p "$(shell dirname $@)" | |||||
| ln -sf $(abspath $<) $@ | |||||
| ../bin/Cardinal.vst/resources/PluginManifests/%.json: %/plugin.json | |||||
| -@mkdir -p "$(shell dirname $@)" | |||||
| ln -sf $(abspath $<) $@ | |||||
| ../bin/Cardinal.vst/Contents/Resources/PluginManifests/%.json: %/plugin.json | |||||
| -@mkdir -p "$(shell dirname $@)" | |||||
| ln -sf $(abspath $<) $@ | |||||
| ../bin/Cardinal.vst3/Contents/Resources/PluginManifests/%.json: %/plugin.json | |||||
| -@mkdir -p "$(shell dirname $@)" | |||||
| ln -sf $(abspath $<) $@ | |||||
| # -------------------------------------------------------------- | # -------------------------------------------------------------- | ||||
| # Build commands | # Build commands | ||||
| @@ -72,23 +72,32 @@ struct Initializer { | |||||
| random::init(); | random::init(); | ||||
| ui::init(); | ui::init(); | ||||
| std::string resDir; | |||||
| if (const char* const bundlePath = plugin->getBundlePath()) | |||||
| { | |||||
| asset::systemDir = bundlePath; | |||||
| #ifdef DISTRHO_OS_MAC | |||||
| asset::systemDir += "/Contents/Resources"; | |||||
| #endif | |||||
| } | |||||
| else | |||||
| if (asset::systemDir.empty()) | |||||
| { | { | ||||
| // Make system dir point to source code location as fallback | |||||
| // TODO use /usr/share if on linux? if we count on it being installed.. | |||||
| asset::systemDir = CARDINAL_PLUGIN_SOURCE_DIR DISTRHO_OS_SEP_STR "Rack" DISTRHO_OS_SEP_STR "res"; | |||||
| } | |||||
| if (const char* const bundlePath = plugin->getBundlePath()) | |||||
| { | |||||
| if (const char* const resourcePath = getResourcePath(bundlePath)) | |||||
| { | |||||
| asset::bundlePath = system::join(resourcePath, "PluginManifests"); | |||||
| asset::systemDir = resourcePath; | |||||
| } | |||||
| } | |||||
| if (asset::systemDir.empty()) | |||||
| { | |||||
| // Make system dir point to source code location as fallback | |||||
| // TODO use /usr/share if on linux? if we count on it being installed.. | |||||
| asset::systemDir = CARDINAL_PLUGIN_SOURCE_DIR DISTRHO_OS_SEP_STR "Rack"; | |||||
| if (! system::isDirectory(system::join(asset::systemDir, "res"))) | |||||
| { | |||||
| asset::bundlePath = CARDINAL_PLUGIN_PREFIX "/share/Cardinal/Plugins"; | |||||
| asset::systemDir = CARDINAL_PLUGIN_PREFIX "/share/Cardinal/Resources"; | |||||
| } | |||||
| } | |||||
| asset::userDir = asset::systemDir; | |||||
| asset::userDir = asset::systemDir; | |||||
| } | |||||
| // Log environment | // Log environment | ||||
| INFO("%s %s v%s", APP_NAME.c_str(), APP_EDITION.c_str(), APP_VERSION.c_str()); | INFO("%s %s v%s", APP_NAME.c_str(), APP_EDITION.c_str(), APP_VERSION.c_str()); | ||||
| @@ -4,6 +4,13 @@ | |||||
| # Created by falkTX | # Created by falkTX | ||||
| # | # | ||||
| # -------------------------------------------------------------- | |||||
| # Build config | |||||
| PREFIX ?= /usr/local | |||||
| DESTDIR ?= | |||||
| SYSDEPS ?= false | |||||
| # -------------------------------------------------------------- | # -------------------------------------------------------------- | ||||
| # Project name, used for binaries | # Project name, used for binaries | ||||
| @@ -150,10 +157,41 @@ SOURCE_DIR = $(CURDIR) | |||||
| endif | endif | ||||
| BUILD_CXX_FLAGS += -DCARDINAL_PLUGIN_SOURCE_DIR='"$(SOURCE_DIR)"' | BUILD_CXX_FLAGS += -DCARDINAL_PLUGIN_SOURCE_DIR='"$(SOURCE_DIR)"' | ||||
| BUILD_CXX_FLAGS += -DCARDINAL_PLUGIN_PREFIX='"$(PREFIX)"' | |||||
| # -------------------------------------------------------------- | # -------------------------------------------------------------- | ||||
| # Enable all possible plugin types | # Enable all possible plugin types | ||||
| all: jack lv2 vst2 vst3 | |||||
| all: jack lv2 vst2 vst3 resources | |||||
| # -------------------------------------------------------------- | |||||
| CORE_RESOURCES = $(wildcard Rack/res/*) | |||||
| PLUGIN_RESOURCES += $(CORE_RESOURCES:%=../bin/Cardinal.lv2/resources/%) | |||||
| ifeq ($(MACOS),true) | |||||
| PLUGIN_RESOURCES += $(CORE_RESOURCES:%=../bin/Cardinal.vst/Contents/Resources/%) | |||||
| else | |||||
| PLUGIN_RESOURCES += $(CORE_RESOURCES:%=../bin/Cardinal.vst/resources/%) | |||||
| endif | |||||
| PLUGIN_RESOURCES += $(CORE_RESOURCES:%=../bin/Cardinal.vst3/Contents/Resources/%) | |||||
| resources: $(PLUGIN_RESOURCES) | |||||
| ../bin/Cardinal.lv2/resources/%: Rack/res/% | |||||
| -@mkdir -p "$(shell dirname $@)" | |||||
| ln -sf $(abspath $<) $@ | |||||
| ../bin/Cardinal.vst/resources/%: Rack/res/% | |||||
| -@mkdir -p "$(shell dirname $@)" | |||||
| ln -sf $(abspath $<) $@ | |||||
| ../bin/Cardinal.vst/Contents/Resources/%: Rack/res/% | |||||
| -@mkdir -p "$(shell dirname $@)" | |||||
| ln -sf $(abspath $<) $@ | |||||
| ../bin/Cardinal.vst3/Contents/Resources/%: Rack/res/% | |||||
| -@mkdir -p "$(shell dirname $@)" | |||||
| ln -sf $(abspath $<) $@ | |||||
| # -------------------------------------------------------------- | # -------------------------------------------------------------- | ||||
| @@ -87,14 +87,19 @@ static inline std::string& trim(std::string& s) { | |||||
| return s; | return s; | ||||
| } | } | ||||
| std::string system(std::string filename) { | std::string system(std::string filename) { | ||||
| return system::join(systemDir, trim(filename)); | |||||
| return system::join(systemDir, bundlePath.empty() ? filename : trim(filename)); | |||||
| } | } | ||||
| std::string user(std::string filename) { | std::string user(std::string filename) { | ||||
| return system::join(userDir, trim(filename)); | |||||
| return system(filename); | |||||
| } | } | ||||
| std::string plugin(plugin::Plugin* plugin, std::string filename) { | std::string plugin(plugin::Plugin* plugin, std::string filename) { | ||||
| DISTRHO_SAFE_ASSERT_RETURN(plugin != nullptr, {}); | |||||
| return system::join(systemDir, plugin->path, trim(filename)); | |||||
| DISTRHO_SAFE_ASSERT_RETURN(plugin != nullptr, {}); | |||||
| return system::join(systemDir, plugin->path, bundlePath.empty() ? filename : trim(filename)); | |||||
| } | |||||
| std::string pluginManifest(std::string dirname) { | |||||
| if (bundlePath.empty()) | |||||
| return system::join(systemDir, dirname, "plugin.json"); | |||||
| return system::join(bundlePath, dirname + ".json"); | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||