diff --git a/jucewrapper/CMakeLists.txt b/jucewrapper/CMakeLists.txt index 4926dbb..5de734c 100644 --- a/jucewrapper/CMakeLists.txt +++ b/jucewrapper/CMakeLists.txt @@ -3,6 +3,82 @@ project(Cardinal VERSION 0.0.0) add_subdirectory(JUCE) +# Config + +set(CMAKE_C_VISIBILITY_PRESET hidden) +set(CMAKE_CXX_VISIBILITY_PRESET hidden) + +# Define static libs + +add_library(dgl STATIC IMPORTED) +set_property(TARGET dgl PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../dpf/build/libdgl-opengl.a") + +add_library(carla_host_plugin STATIC IMPORTED) +set_property(TARGET carla_host_plugin PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../carla/build/plugin/Release/carla-host-plugin.cpp.o") + +add_library(carla_engine_plugin STATIC IMPORTED) +set_property(TARGET carla_engine_plugin PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../carla/build/modules/Release/carla_engine_plugin.a") + +add_library(carla_plugin STATIC IMPORTED) +set_property(TARGET carla_plugin PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../carla/build/modules/Release/carla_plugin.a") + +add_library(native_plugins STATIC IMPORTED) +set_property(TARGET native_plugins PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../carla/build/modules/Release/native-plugins.a") + +add_library(audio_decoder STATIC IMPORTED) +set_property(TARGET audio_decoder PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../carla/build/modules/Release/audio_decoder.a") + +add_library(jackbridge STATIC IMPORTED) +set_property(TARGET jackbridge PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../carla/build/modules/Release/jackbridge.min.a") + +add_library(lilv STATIC IMPORTED) +set_property(TARGET lilv PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../carla/build/modules/Release/lilv.a") + +add_library(rtmempool STATIC IMPORTED) +set_property(TARGET rtmempool PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../carla/build/modules/Release/rtmempool.a") + +add_library(sfzero STATIC IMPORTED) +set_property(TARGET sfzero PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../carla/build/modules/Release/sfzero.a") + +add_library(water STATIC IMPORTED) +set_property(TARGET water PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../carla/build/modules/Release/water.a") + +add_library(zita_resampler STATIC IMPORTED) +set_property(TARGET zita_resampler PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../carla/build/modules/Release/zita-resampler.a") + +add_library(sCardinalFX STATIC IMPORTED) +set_property(TARGET sCardinalFX PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../bin/CardinalFX.a") + +add_library(sPlugins STATIC IMPORTED) +set_property(TARGET sPlugins PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../plugins/plugins.a") + +add_library(sRack STATIC IMPORTED) +set_property(TARGET sRack PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../src/rack.a") + +#ifeq ($(WINDOWS),true) +#RACK_EXTRA_LIBS += $(DEP_LIB_PATH)/libarchive_static.a +add_library(libarchive STATIC IMPORTED) +set_property(TARGET libarchive PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../src/Rack/dep/lib/libarchive.a") + +add_library(libjansson STATIC IMPORTED) +set_property(TARGET libjansson PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../src/Rack/dep/lib/libjansson.a") + +add_library(libquickjs STATIC IMPORTED) +set_property(TARGET libquickjs PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../src/Rack/dep/lib/libquickjs.a") + +add_library(libsamplerate STATIC IMPORTED) +set_property(TARGET libsamplerate PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../src/Rack/dep/lib/libsamplerate.a") + +add_library(libspeexdsp STATIC IMPORTED) +set_property(TARGET libspeexdsp PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../src/Rack/dep/lib/libspeexdsp.a") + +add_library(libzstd STATIC IMPORTED) +set_property(TARGET libzstd PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../src/Rack/dep/lib/libzstd.a") + +#find_package(Dbus) +find_package(OpenGL) +find_package(X11) + # FX variant juce_add_plugin(CardinalFX @@ -13,7 +89,7 @@ juce_add_plugin(CardinalFX EDITOR_WANTS_KEYBOARD_FOCUS TRUE PLUGIN_MANUFACTURER_CODE Dstr PLUGIN_CODE dCnF - FORMATS VST3 AU + FORMATS Standalone AU PRODUCT_NAME "CardinalFX") target_sources(CardinalFX @@ -27,19 +103,52 @@ target_include_directories(CardinalFX target_compile_definitions(CardinalFX PUBLIC + JUCE_DISPLAY_SPLASH_SCREEN=0 JUCE_USE_CURL=0 JUCE_WEB_BROWSER=0) -target_link_options(CardinalFX - PRIVATE - "-l/Shared/Personal/FOSS/GIT/DISTRHO/DISTRHO_Cardinal/bin/CardinalFX.so" - "-Wl,-rpath,." -) +target_link_directories(CardinalFX + PUBLIC + /opt/kxstudio/lib) target_link_libraries(CardinalFX PRIVATE juce::juce_audio_utils + -Wl,--whole-archive + sCardinalFX + sPlugins + sRack + carla_host_plugin + carla_engine_plugin + carla_plugin + native_plugins + audio_decoder + jackbridge + lilv + rtmempool + sfzero + water + zita_resampler + dgl + libarchive + libjansson + libquickjs + libsamplerate + libspeexdsp + libzstd + -Wl,--no-whole-archive + GLX + OpenGL + X11 + Xcursor + Xext + Xrandr PUBLIC + -ldbus-1 + -llo + -lmagic + -lsndfile -lFLAC -lvorbisenc -lvorbis -logg + -lrt juce::juce_recommended_config_flags juce::juce_recommended_lto_flags juce::juce_recommended_warning_flags) diff --git a/jucewrapper/CardinalWrapper.cpp b/jucewrapper/CardinalWrapper.cpp index 4d3a435..aab8db1 100644 --- a/jucewrapper/CardinalWrapper.cpp +++ b/jucewrapper/CardinalWrapper.cpp @@ -1,6 +1,6 @@ /* * DISTRHO Cardinal Plugin - * Copyright (C) 2021 Filipe Coelho + * Copyright (C) 2021-2022 Filipe Coelho * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -17,15 +17,14 @@ #include -#include "DistrhoPlugin.hpp" -#include "DistrhoUI.hpp" - -DISTRHO_PLUGIN_EXPORT DISTRHO_NAMESPACE::Plugin* createSharedPlugin(); -#define createPlugin ::createSharedPlugin +#define createPlugin createStaticPlugin #include "src/DistrhoPluginInternal.hpp" +#include "src/DistrhoUIInternal.hpp" START_NAMESPACE_DISTRHO +#if 0 + // ----------------------------------------------------------------------------------------------------------- class ParameterForDPF : public juce::AudioProcessorParameter @@ -69,29 +68,43 @@ protected: return 0.0f; } }; +#endif // ----------------------------------------------------------------------------------------------------------- class CardinalWrapperProcessor : public juce::AudioProcessor { + friend class CardinalWrapperEditor; + PluginExporter plugin; - static bool writeMidiCb(void* ptr, const MidiEvent& midiEvent) + static bool writeMidi(void* ptr, const MidiEvent& midiEvent) { return false; } - static bool requestParameterValueChangeCb(void* ptr, uint32_t index, float value) + static bool requestParameterValueChange(void* ptr, uint32_t index, float value) + { + return false; + } + + static bool updateStateValue(void* ptr, const char* key, const char* value) { return false; } public: CardinalWrapperProcessor() - : plugin(this, writeMidiCb, requestParameterValueChangeCb) + : plugin(this, writeMidi, requestParameterValueChange, updateStateValue) { - for (uint i=0; i 0, numSamples,); + + DISTRHO_SAFE_ASSERT_RETURN(buffer.getNumChannels() == 2,); + + const float* audioBufferIn[2]; + float* audioBufferOut[2]; + audioBufferIn[0] = buffer.getReadPointer(0); + audioBufferIn[1] = buffer.getReadPointer(1); + audioBufferOut[0] = buffer.getWritePointer(0); + audioBufferOut[1] = buffer.getWritePointer(1); + + plugin.run(audioBufferIn, audioBufferOut, numSamples, nullptr, 0); } double getTailLengthSeconds() const override { - return true; + return 0.0; } bool acceptsMidi() const override @@ -181,17 +208,80 @@ public: } }; +// ----------------------------------------------------------------------------------------------------------- + class CardinalWrapperEditor : public juce::AudioProcessorEditor { + UIExporter* ui; + void* const dspPtr; + + static void editParamFunc(void* ptr, uint32_t rindex, bool started) {} + static void setParamFunc(void* ptr, uint32_t rindex, float value) {} + static void setStateFunc(void* ptr, const char* key, const char* value) {} + static void sendNoteFunc(void* ptr, uint8_t channel, uint8_t note, uint8_t velo) {} + + static void setSizeFunc(void* ptr, uint width, uint height) + { + static_cast(ptr)->setSize(width, height); + } + + static bool fileRequestFunc(void* ptr, const char* key) { return false; } + public: - CardinalWrapperEditor(CardinalWrapperProcessor& processor) - : juce::AudioProcessorEditor(processor) - {} + CardinalWrapperEditor(CardinalWrapperProcessor& cardinalProcessor) + : juce::AudioProcessorEditor(cardinalProcessor), + ui(nullptr), + dspPtr(cardinalProcessor.plugin.getInstancePointer()) + { + setOpaque(true); + setResizable(true, false); + // setResizeLimits(648, 538, -1, -1); + setSize(1228, 666); + } ~CardinalWrapperEditor() override - {} + { + delete ui; + } + + void paint(juce::Graphics&) + { + if (ui == nullptr) + { + auto peer = getPeer(); + d_stdout("peer is %p", peer); + + auto handle = peer->getNativeHandle(); + d_stdout("handle is %p", handle); + + auto proc = getAudioProcessor(); + d_stdout("proc is %p", proc); + + ui = new UIExporter(this, + (uintptr_t)handle, + proc->getSampleRate(), + editParamFunc, + setParamFunc, + setStateFunc, + sendNoteFunc, + setSizeFunc, + fileRequestFunc, + nullptr, // bundlePath + dspPtr, + 0.0 // scaleFactor + ); + } + + ui->plugin_idle(); + repaint(); + } }; +juce::AudioProcessorEditor* CardinalWrapperProcessor::createEditor() +{ + return new CardinalWrapperEditor(*this); +} + // ----------------------------------------------------------------------------------------------------------- END_NAMESPACE_DISTRHO @@ -200,11 +290,10 @@ END_NAMESPACE_DISTRHO juce::AudioProcessor* createPluginFilter() { + // set valid but dummy values + d_nextBufferSize = 512; + d_nextSampleRate = 48000.0; return new DISTRHO_NAMESPACE::CardinalWrapperProcessor; } // ----------------------------------------------------------------------------------------------------------- - -#define DISTRHO_IS_STANDALONE 0 -#include "src/DistrhoPlugin.cpp" -#include "src/DistrhoUtils.cpp" diff --git a/src/Makefile.cardinal.mk b/src/Makefile.cardinal.mk index c5c0c63..748d02d 100644 --- a/src/Makefile.cardinal.mk +++ b/src/Makefile.cardinal.mk @@ -257,6 +257,8 @@ BUILD_CXX_FLAGS += -DCARDINAL_PLUGIN_PREFIX='"$(PREFIX)"' ifeq ($(CARDINAL_VARIANT),main) all: jack lv2 vst3 +else ifeq ($(CARDINAL_VARIANT),fx) +all: lv2 vst2 vst3 static else all: lv2 vst2 vst3 endif