Using a previously made VST 3.x plugin made with Juce

I’m a very new and inexperienced with Elk and Juce (and programming in general) so please bare with me.

I found this documentation about building plugins for Elk OS but I want to know if it’s possible to make VST 3.x plugins using JUCE.

I understand that currently (release 5.4.x), JUCE only generates VST 2.4 plugins for Linux (my release version is 5.4.5) but is there any other way? I see that it’s possible to just use the VST3 SDK (I’m not sure how exactly.)

The main problem I’m trying to solve: I have previously made a VST3 plugin using JUCE and Visual Studio 2019 and it works well. I would not like to use this plugin on the Raspberry Pi (Elk OS). How can I easily do that?

I would be also ok with using a VST2 version of the plugin instead but I don’t have the proper license and VST2 SDK so I’m facing some issues with that.

Thanks a lot!

1 Like

juce 6 has just been announced with vst3 support for linux. in the repo I think this code has already been rolled out. also juce 6 has support for headless plugins (is this because they merged your branch ELK guys?) which hopefully means you probably won’t need a customized juce to build plugins for elk.

Hi,

Just to add to what frederic said. JUCE 6, while just announced, is not yet tested with Elk. Correct me if I’m wrong, but the JUCE 6 release repository is not yet public.

With that said, In theory it should make everything much easier, in that headless builds will work without using our fork, and finally they support VST3 on Linux.

We will definitely announce and post here as soon as we have had a chance to test this new JUCE functionality!

In the meanwhile, if you build your plugin with JUCE, and have access in some way to the VST2 SDK, you can use our JUCE fork to build your plugin as a VST2 for Elk. But you did say you didn’t have the VST2 SDK…

Porting your plugin to LV2, the other plugin format we support, is not as realistic an option, that may well be more effort than makes sense given that JUCE 6 is coming up soon.

Then the final step (also in our documentation), is that you cross-compile your plugin for Elk Pi, and you’ll be ready to run it on the device.

Best,
Ilias of Elk.

Hi,
a couple of other things:

It’s not released as stable but a preview branch is available to everyone on their Github:

No, it is not a merge of our fork. We had discussed the thing with them more than one year ago, however, and they took our input for their implementation (which is indeed easier to maintain the ours). When I tried a preview they sent me, it was not working straight away with our SDK but it shouldn’t take much work on our side to add a couple of things.

Now that JUCE also has (finally!) a good native integration with CMake, we could think about integrating it directly in our SDK.

Doing a manual port will indeed require a lot of work, but you can use FalkTX’s DISTRHO framework to wrap a JUCE plugin to LV2 easily:

Thanks for all the replies everyone, it’s all very helpful and I appreciate it! Sorry for the delayed response.

At the moment, I’ve used JUCE 6 to export a Linux Makefile. However, I’m very new to this and not quite sure how makefiles work.

As I understand, makefiles are just scripts that can be run in Linux. When I run it using make -f [filename], I expect to find a .so file of my plugin somewhere but nothing happens.

Is there a step-by-step guide somewhere for this?

Thanks again,

Nik

Haven’t tried Juce6 myself, but usually you just run make to build a makefile, this invokes the program make, which expects there to be a file named Makefile in the directory you’re running from, that tells it what to do. You don’t really pass it a filename, but you can pass an optional target to make to select which targets to build. If you don’t it will build the 'all' target, though 90% of the time that’s what you want anyway.

Thanks Gustav.

When I run make I get the following message in the terminal:

make
Package alsa was not found in the pkg-config search path.
Perhaps you should add the directory containing `alsa.pc'
to the PKG_CONFIG_PATH environment variable
No package 'alsa' found
Package freetype2 was not found in the pkg-config search path.
Perhaps you should add the directory containing `freetype2.pc'
to the PKG_CONFIG_PATH environment variable
No package 'freetype2' found
Package libcurl was not found in the pkg-config search path.
Perhaps you should add the directory containing `libcurl.pc'
to the PKG_CONFIG_PATH environment variable
No package 'libcurl' found
Package webkit2gtk-4.0 was not found in the pkg-config search path.
Perhaps you should add the directory containing `webkit2gtk-4.0.pc'
to the PKG_CONFIG_PATH environment variable
No package 'webkit2gtk-4.0' found
Package gtk+-x11-3.0 was not found in the pkg-config search path.
Perhaps you should add the directory containing `gtk+-x11-3.0.pc'
to the PKG_CONFIG_PATH environment variable
No package 'gtk+-x11-3.0' found
make: *** No rule to make target '../../JuceLibraryCode/include_juce_audio_plugin_client_VST3.cpp', needed by 'build/intermediate/Debug/include_juce_audio_plugin_client_VST3_dd633589.o'.  Stop.

Where can I find the packages mentioned and get rid of the errors?

Here is the Makefile in case you want to see it.

Hi @NikSaxena,
the new “Headless plugin output” feature of JUCE 6 still requires the headers of X11 library in the cross-compiling SDK and we currently don’t include them.

We have in our list to include the needed headers in the SDK - without adding X11 & co. to the target image - but it might take some time.

The current workarounds at the moment could be:

  • Use our previous fork of JUCE 5.x following the instructions in our documentation
  • Add manually the required headers somewhere on your build machine, modify the pkg-config scripts for each of the original package and move them on your cross SDK’s paths… quite a lot of work to be honest
  • Set up a Yocto build environment starting from our layers and build a new SDK adding the required packages. This is the cleanest solution but I won’t recommend it if you don’t have any Yocto experience, since the learning curve is pretty steep

Cheers,
Stefano