Signed-off-by: falkTX <falktx@falktx.com>tags/22.02
| @@ -6,7 +6,24 @@ | |||
| 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 | |||
| $(MAKE) all -C plugins | |||
| resources: cardinal gen | |||
| $(MAKE) resources -C plugins | |||
| ifneq ($(CROSS_COMPILING),true) | |||
| gen: cardinal dpf/utils/lv2_ttl_generator | |||
| @$(CURDIR)/dpf/utils/generate-ttl.sh | |||
| @@ -1 +1 @@ | |||
| Subproject commit 1af66e49db01b5e2a5f90e85fe748c162bb83a48 | |||
| Subproject commit 1da1c811c765689790c8bf4290b2f6939f8046f3 | |||
| @@ -318,6 +318,55 @@ clean: | |||
| rm -f $(TARGET) | |||
| 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 | |||
| @@ -72,23 +72,32 @@ struct Initializer { | |||
| random::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 | |||
| INFO("%s %s v%s", APP_NAME.c_str(), APP_EDITION.c_str(), APP_VERSION.c_str()); | |||
| @@ -4,6 +4,13 @@ | |||
| # Created by falkTX | |||
| # | |||
| # -------------------------------------------------------------- | |||
| # Build config | |||
| PREFIX ?= /usr/local | |||
| DESTDIR ?= | |||
| SYSDEPS ?= false | |||
| # -------------------------------------------------------------- | |||
| # Project name, used for binaries | |||
| @@ -150,10 +157,41 @@ SOURCE_DIR = $(CURDIR) | |||
| endif | |||
| BUILD_CXX_FLAGS += -DCARDINAL_PLUGIN_SOURCE_DIR='"$(SOURCE_DIR)"' | |||
| BUILD_CXX_FLAGS += -DCARDINAL_PLUGIN_PREFIX='"$(PREFIX)"' | |||
| # -------------------------------------------------------------- | |||
| # 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; | |||
| } | |||
| 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) { | |||
| return system::join(userDir, trim(filename)); | |||
| return system(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"); | |||
| } | |||
| } | |||
| } | |||