Closed probonopd closed 2 years ago
Does the cmake build option work with bsd the way it is now? Just wondering if further additions would be needed.
# FreeBSD 13.0-RELEASE-p4
git clone https://github.com/asb2m10/dexed/
cd dexed
git submodule update --init --recursive
cmake .
Getting
In file included from
/tmp/dexed/libs/JUCE/modules/juce_gui_basics/juce_gui_basics.cpp:46:
/tmp/dexed/libs/JUCE/modules/juce_gui_basics/juce_gui_basics.h:322:12:
fatal error: 'X11/Xlib.h' file not found
#include <X11/Xlib.h>
^~~~~~~~~~~~
despite having /usr/local/include/X11/Xlib.h
.
Ok not good but good to know :)
But it's not Dexed quite yet, still Juce missing the libx11-dev package. On Linuxes it looks for it in /usr/include/X11. The fact that yours is in /usr/local/include/X11 is probably not the answer (but who knows).
Just to rule things out, have you managed to build other plugins that use the juce lib yet? Surge-XT for example, should be the same dependency-wise and has been reported to compile on freeBSD.
https://github.com/surge-synthesizer/surge https://www.freshports.org/audio/surge-synthesizer-xt-lv2/
As a workaround, sudo ln -s /usr/local/include/X11 /usr/include/
lets me build until this point:
[ 61%] Building CXX object Source/CMakeFiles/Dexed.dir/__/libs/JUCE/modules/juce_core/juce_core.cpp.o
In file included from /tmp/dexed/libs/JUCE/modules/juce_core/juce_core.cpp:45:
/usr/include/sys/timeb.h:44:2: error: "this file includes <sys/timeb.h> which is deprecated" [-Werror,-W#warnings]
#warning "this file includes <sys/timeb.h> which is deprecated"
^
[ 62%] Building CXX object Source/CMakeFiles/Dexed.dir/__/libs/JUCE/modules/juce_audio_devices/juce_audio_devices.cpp.o
[ 63%] Building CXX object Source/CMakeFiles/Dexed.dir/__/libs/JUCE/modules/juce_events/juce_events.cpp.o
1 error generated.
Maybe we should use FreeBSD's JUCE from /usr/local/include/JUCE-6.0.8/
instead?
I have not tried to build other plugins that use the juce lib yet.
Oh that one is because "warnings are errors" is turned on and it's too early for that.
You could try commenting out -Werror
in CMakeLists.txt
https://github.com/asb2m10/dexed/blob/master/CMakeLists.txt#L55
Only 2% missing now, getting
To build JUCE VST3 plug-ins on BSD you must use an external BSD-compatible VST3 SDK with JUCE_CUSTOM_VST3_SDK=1
How to do this?
FreeBSD has the following package:
vst3sdk-3.7.1.b.50.1_1 VST3 SDK (VST3 audio plugins Software Development Kit)
It resides in /usr/local/include/vst3sdk/
.
[ 98%] Building CXX object Source/CMakeFiles/Dexed_VST3.dir/__/libs/JUCE/modules/juce_audio_plugin_client/juce_audio_plugin_client_VST3.cpp.o
In file included from /tmp/dexed/libs/JUCE/modules/juce_audio_plugin_client/juce_audio_plugin_client_VST3.cpp:26:
In file included from /tmp/dexed/libs/JUCE/modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp:42:
/tmp/dexed/libs/JUCE/modules/juce_audio_processors/format_types/juce_VST3Headers.h:27:3: error: To build JUCE VST3 plug-ins on BSD you must use an external BSD-compatible VST3 SDK with JUCE_CUSTOM_VST3_SDK=1
#error To build JUCE VST3 plug-ins on BSD you must use an external BSD-compatible VST3 SDK with JUCE_CUSTOM_VST3_SDK=1
^
In file included from /tmp/dexed/libs/JUCE/modules/juce_audio_plugin_client/juce_audio_plugin_client_VST3.cpp:26:
In file included from /tmp/dexed/libs/JUCE/modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp:42:
In file included from /tmp/dexed/libs/JUCE/modules/juce_audio_processors/format_types/juce_VST3Headers.h:110:
In file included from /tmp/dexed/libs/JUCE/modules/juce_audio_processors/format_types/VST3_SDK/base/source/baseiids.cpp:38:
/tmp/dexed/libs/JUCE/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h:222:17: error: expected ';' after top level declarator
int32 PLUGIN_API atomicAdd (int32& value, int32 amount);
^
;
/tmp/dexed/libs/JUCE/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h:370:2: error: 'virtual' can only appear on non-static member functions
virtual tresult PLUGIN_API queryInterface (const TUID _iid, void** obj) = 0;
^
/tmp/dexed/libs/JUCE/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h:370:28: error: expected ';' at end of declaration list
virtual tresult PLUGIN_API queryInterface (const TUID _iid, void** obj) = 0;
^
;
/tmp/dexed/libs/JUCE/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h:375:2: error: 'virtual' can only appear on non-static member functions
virtual uint32 PLUGIN_API addRef () = 0;
^
/tmp/dexed/libs/JUCE/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h:375:17: error: duplicate member 'PLUGIN_API'
virtual uint32 PLUGIN_API addRef () = 0;
^
/tmp/dexed/libs/JUCE/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h:370:18: note: previous declaration is here
virtual tresult PLUGIN_API queryInterface (const TUID _iid, void** obj) = 0;
^
/tmp/dexed/libs/JUCE/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h:375:27: error: expected ';' at end of declaration list
virtual uint32 PLUGIN_API addRef () = 0;
^
;
/tmp/dexed/libs/JUCE/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h:379:2: error: 'virtual' can only appear on non-static member functions
virtual uint32 PLUGIN_API release () = 0;
^
/tmp/dexed/libs/JUCE/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h:379:17: error: duplicate member 'PLUGIN_API'
virtual uint32 PLUGIN_API release () = 0;
^
/tmp/dexed/libs/JUCE/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h:370:18: note: previous declaration is here
virtual tresult PLUGIN_API queryInterface (const TUID _iid, void** obj) = 0;
^
/tmp/dexed/libs/JUCE/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h:379:27: error: expected ';' at end of declaration list
virtual uint32 PLUGIN_API release () = 0;
^
;
/tmp/dexed/libs/JUCE/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h:493:26: error: no member named 'queryInterface' in 'Steinberg::FUnknown'
if (unknown && unknown->queryInterface (getTUID<I> (), (void**)&this->ptr) != kResultOk)
~~~~~~~ ^
/tmp/dexed/libs/JUCE/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h:502:26: error: no member named 'queryInterface' in 'Steinberg::FUnknown'
if (unknown && unknown->queryInterface (getTUID<I> (), (void**)&newPtr) == kResultOk)
~~~~~~~ ^
/tmp/dexed/libs/JUCE/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h:544:7: error: no member named 'release' in 'Steinberg::FUnknown'
u->release ();
~ ^
In file included from /tmp/dexed/libs/JUCE/modules/juce_audio_plugin_client/juce_audio_plugin_client_VST3.cpp:26:
In file included from /tmp/dexed/libs/JUCE/modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp:42:
In file included from /tmp/dexed/libs/JUCE/modules/juce_audio_processors/format_types/juce_VST3Headers.h:110:
In file included from /tmp/dexed/libs/JUCE/modules/juce_audio_processors/format_types/VST3_SDK/base/source/baseiids.cpp:39:
/tmp/dexed/libs/JUCE/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/istringresult.h:35:2: error: 'virtual' can only appear on non-static member functions
virtual void PLUGIN_API setText (const char8* text) = 0;
^
/tmp/dexed/libs/JUCE/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/istringresult.h:35:15: error: field has incomplete type 'void'
virtual void PLUGIN_API setText (const char8* text) = 0;
^
/tmp/dexed/libs/JUCE/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/istringresult.h:35:25: error: expected ';' at end of declaration list
virtual void PLUGIN_API setText (const char8* text) = 0;
^
;
/tmp/dexed/libs/JUCE/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/istringresult.h:54:2: error: 'virtual' can only appear on non-static member functions
virtual void PLUGIN_API setText8 (const char8* text) = 0;
^
/tmp/dexed/libs/JUCE/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/istringresult.h:54:15: error: field has incomplete type 'void'
virtual void PLUGIN_API setText8 (const char8* text) = 0;
^
/tmp/dexed/libs/JUCE/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/istringresult.h:54:25: error: expected ';' at end of declaration list
virtual void PLUGIN_API setText8 (const char8* text) = 0;
^
;
fatal error: too many errors emitted, stopping now [-ferror-limit=]
20 errors generated.
make[2]: *** [Source/CMakeFiles/Dexed_VST3.dir/build.make:202: Source/CMakeFiles/Dexed_VST3.dir/__/libs/JUCE/modules/juce_audio_plugin_client/juce_audio_plugin_client_VST3.cpp.o] Fehler 1
make[1]: *** [CMakeFiles/Makefile2:463: Source/CMakeFiles/Dexed_VST3.dir/all] Fehler 2
make: *** [Makefile:136: all] Fehler 2
I'm a bit guessing around right now but adding something like this:
if(CMAKE_SYSTEM_NAME MATCHES "BSD")
target_compile_definitions(${BaseTargetName} PUBLIC
JUCE_CUSTOM_VST3_SDK=1
endif()
somewhere here: https://github.com/asb2m10/dexed/blob/master/Source/CMakeLists.txt#L61 is what i would try, but it is probably not enough.
To see if at least the standalone works for now you can do:
cmake -Bbuild
cmake --build build --target Dexed_Standalone
similar issue here: https://github.com/surge-synthesizer/surge/issues/5996
Yes! Standalone works! Even with my MIDI keyboard. So happy!
With
if(CMAKE_SYSTEM_NAME MATCHES "BSD")
target_compile_definitions(${BaseTargetName} PUBLIC
JUCE_CUSTOM_VST3_SDK=1
)
endif()
getting
[ 87%] Built target Dexed_Standalone
Consolidate compiler generated dependencies of target Dexed_VST3
[ 88%] Building CXX object Source/CMakeFiles/Dexed_VST3.dir/__/libs/JUCE/modules/juce_audio_plugin_client/juce_audio_plugin_client_AAX.cpp.o
[ 89%] Building CXX object Source/CMakeFiles/Dexed_VST3.dir/__/libs/JUCE/modules/juce_audio_plugin_client/juce_audio_plugin_client_RTAS_1.cpp.o
[ 90%] Building CXX object Source/CMakeFiles/Dexed_VST3.dir/__/libs/JUCE/modules/juce_audio_plugin_client/juce_audio_plugin_client_RTAS_2.cpp.o
[ 91%] Building CXX object Source/CMakeFiles/Dexed_VST3.dir/__/libs/JUCE/modules/juce_audio_plugin_client/juce_audio_plugin_client_RTAS_3.cpp.o
[ 92%] Building CXX object Source/CMakeFiles/Dexed_VST3.dir/__/libs/JUCE/modules/juce_audio_plugin_client/juce_audio_plugin_client_RTAS_4.cpp.o
[ 94%] Building CXX object Source/CMakeFiles/Dexed_VST3.dir/__/libs/JUCE/modules/juce_audio_plugin_client/juce_audio_plugin_client_RTAS_utils.cpp.o
[ 95%] Building CXX object Source/CMakeFiles/Dexed_VST3.dir/__/libs/JUCE/modules/juce_audio_plugin_client/juce_audio_plugin_client_Standalone.cpp.o
[ 96%] Building CXX object Source/CMakeFiles/Dexed_VST3.dir/__/libs/JUCE/modules/juce_audio_plugin_client/juce_audio_plugin_client_Unity.cpp.o
[ 97%] Building CXX object Source/CMakeFiles/Dexed_VST3.dir/__/libs/JUCE/modules/juce_audio_plugin_client/juce_audio_plugin_client_VST2.cpp.o
[ 98%] Building CXX object Source/CMakeFiles/Dexed_VST3.dir/__/libs/JUCE/modules/juce_audio_plugin_client/juce_audio_plugin_client_VST3.cpp.o
In file included from /tmp/dexed/libs/JUCE/modules/juce_audio_plugin_client/juce_audio_plugin_client_VST3.cpp:26:
In file included from /tmp/dexed/libs/JUCE/modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp:42:
In file included from /tmp/dexed/libs/JUCE/modules/juce_audio_processors/format_types/juce_VST3Headers.h:110:
In file included from /tmp/dexed/libs/JUCE/modules/juce_audio_processors/format_types/VST3_SDK/base/source/baseiids.cpp:38:
/tmp/dexed/libs/JUCE/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h:222:17: error: expected ';' after top level declarator
int32 PLUGIN_API atomicAdd (int32& value, int32 amount);
^
;
/tmp/dexed/libs/JUCE/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h:370:2: error: 'virtual' can only appear on non-static member functions
virtual tresult PLUGIN_API queryInterface (const TUID _iid, void** obj) = 0;
^
/tmp/dexed/libs/JUCE/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h:370:28: error: expected ';' at end of declaration list
virtual tresult PLUGIN_API queryInterface (const TUID _iid, void** obj) = 0;
^
;
/tmp/dexed/libs/JUCE/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h:375:2: error: 'virtual' can only appear on non-static member functions
virtual uint32 PLUGIN_API addRef () = 0;
^
/tmp/dexed/libs/JUCE/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h:375:17: error: duplicate member 'PLUGIN_API'
virtual uint32 PLUGIN_API addRef () = 0;
^
/tmp/dexed/libs/JUCE/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h:370:18: note: previous declaration is here
virtual tresult PLUGIN_API queryInterface (const TUID _iid, void** obj) = 0;
^
/tmp/dexed/libs/JUCE/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h:375:27: error: expected ';' at end of declaration list
virtual uint32 PLUGIN_API addRef () = 0;
^
;
/tmp/dexed/libs/JUCE/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h:379:2: error: 'virtual' can only appear on non-static member functions
virtual uint32 PLUGIN_API release () = 0;
^
/tmp/dexed/libs/JUCE/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h:379:17: error: duplicate member 'PLUGIN_API'
virtual uint32 PLUGIN_API release () = 0;
^
/tmp/dexed/libs/JUCE/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h:370:18: note: previous declaration is here
virtual tresult PLUGIN_API queryInterface (const TUID _iid, void** obj) = 0;
^
/tmp/dexed/libs/JUCE/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h:379:27: error: expected ';' at end of declaration list
virtual uint32 PLUGIN_API release () = 0;
^
;
/tmp/dexed/libs/JUCE/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h:493:26: error: no member named 'queryInterface' in 'Steinberg::FUnknown'
if (unknown && unknown->queryInterface (getTUID<I> (), (void**)&this->ptr) != kResultOk)
~~~~~~~ ^
/tmp/dexed/libs/JUCE/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h:502:26: error: no member named 'queryInterface' in 'Steinberg::FUnknown'
if (unknown && unknown->queryInterface (getTUID<I> (), (void**)&newPtr) == kResultOk)
~~~~~~~ ^
/tmp/dexed/libs/JUCE/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h:544:7: error: no member named 'release' in 'Steinberg::FUnknown'
u->release ();
~ ^
In file included from /tmp/dexed/libs/JUCE/modules/juce_audio_plugin_client/juce_audio_plugin_client_VST3.cpp:26:
In file included from /tmp/dexed/libs/JUCE/modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp:42:
In file included from /tmp/dexed/libs/JUCE/modules/juce_audio_processors/format_types/juce_VST3Headers.h:110:
In file included from /tmp/dexed/libs/JUCE/modules/juce_audio_processors/format_types/VST3_SDK/base/source/baseiids.cpp:39:
/tmp/dexed/libs/JUCE/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/istringresult.h:35:2: error: 'virtual' can only appear on non-static member functions
virtual void PLUGIN_API setText (const char8* text) = 0;
^
/tmp/dexed/libs/JUCE/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/istringresult.h:35:15: error: field has incomplete type 'void'
virtual void PLUGIN_API setText (const char8* text) = 0;
^
/tmp/dexed/libs/JUCE/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/istringresult.h:35:25: error: expected ';' at end of declaration list
virtual void PLUGIN_API setText (const char8* text) = 0;
^
;
/tmp/dexed/libs/JUCE/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/istringresult.h:54:2: error: 'virtual' can only appear on non-static member functions
virtual void PLUGIN_API setText8 (const char8* text) = 0;
^
/tmp/dexed/libs/JUCE/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/istringresult.h:54:15: error: field has incomplete type 'void'
virtual void PLUGIN_API setText8 (const char8* text) = 0;
^
/tmp/dexed/libs/JUCE/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/istringresult.h:54:25: error: expected ';' at end of declaration list
virtual void PLUGIN_API setText8 (const char8* text) = 0;
^
;
/tmp/dexed/libs/JUCE/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/istringresult.h:56:2: error: 'virtual' can only appear on non-static member functions
virtual void PLUGIN_API setText16 (const char16* text) = 0;
^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
20 errors generated.
Maybe @yurivict (the maintainer of the vst3sdk
FreeBSD port) knows what needs to be done here?
Again just guessing around: you are maybe still using the same SDK as before and have to do
something like export VST3_SDK_DIR="/path/to/sdk"
first before the build steps.
(not sure about the exact syntax, but something like that)
FreeBSD% export VST3_SDK_DIR=/usr/local/include/vst3sdk
FreeBSD% cmake .
FreeBSD% make
does not seem to do it. Maybe we need something in CMake like
set(VST3_SDK_DIR "/usr/local/include/vst3sdk" CACHE PATH "VST3 SDK directory")
- but where...?
if(CMAKE_SYSTEM_NAME MATCHES "BSD")
set(VST3_SDK_DIR "/usr/local/include/vst3sdk" CACHE PATH "VST3 SDK directory")
target_compile_definitions(${BaseTargetName} PUBLIC
JUCE_CUSTOM_VST3_SDK=1
)
endif()
does not seem to do the trick.
if(CMAKE_SYSTEM_NAME MATCHES "BSD")
target_compile_definitions(${BaseTargetName} PUBLIC
JUCE_CUSTOM_VST3_SDK=1)
endif()
if(DEFINED ENV{VST3_SDK_DIR})
file(TO_CMAKE_PATH "$ENV{VST3_SDK_DIR}" JUCE_VST3_DIR)
juce_set_vst3_sdk_path(${JUCE_VST3_DIR})
message(STATUS "VST3 SDK path is $ENV{VST3_SDK_DIR}")
endif()
then
export VST3_SDK_DIR="/path/to/VST3_SDK"
cmake -Bbuild
cmake --build build --target Dexed_VST3
maybe need to wipe the build folder first
EDIT: I am also getting lots of errors on linux when using a slightly older version of the vst3_sdk which maybe another hint.
I'll make an effort to port dexed and will report result when available.
Noticed that having three instances of Dexed open takes relatively much CPU even when not playing, is this normal?
PID USERNAME THR PRI NICE SIZE RES STATE C TIME WCPU COMMAND
8342 user 5 22 0 85M 45M select 0 12:36 38,58% Dexed
8397 user 5 20 0 82M 43M select 0 4:32 33,90% Dexed
8352 user 5 22 0 84M 45M select 0 12:04 33,42% Dexed
The FreeBSD port has been added: https://cgit.freebsd.org/ports/commit/?id=4d1970829bb31e69ff383ee30d819df841999045
Thank you very, very much @yurivict.
@probonopd You are very welcome! :-)
Built. So just to clarify, it is impossible to build the vst3 on FreeBSD?
Built. So just to clarify, it is impossible to build the vst3 on FreeBSD?
I am not sure. Need to investigate. There's a port for VST3 - audio/vst3sdk. Need to see if it can work.
@probonopd I added the VST3 option to the port.
I didn't yet have a chance to try and see if it works.
Thanks @yurivict, this is great.
Tried using audio/carla
(which should be able to load VST3 plugins) but it does not seem to find Dexed. When I click on the "Refresh" button and let it scan for all types of plugins, it says Have 28 Internal, 243 LADSPA, 0 DSSI, 31 LV2, 0 VST2 and 0 VST3 plugins, plus 0 Sound Kits
. Can you reproduce the issue?
Carla doesn't support VST3 on FreeBSD yet due to some JUCE incompatibility.
More information is here: https://github.com/falkTX/Carla/issues/1607
FYI: qtractor now supports VST3 plugins on FreeBSD. The Dexed plugin now works in qtractor.
I would like to build dexed on FreeBSD both standalone and as a plugin for DAWs. Please add instructions on how to build dexed on FreeBSD.
FreeBSD has a
juce-6.0.8_4
package that includes/usr/local/bin/Projucer
. So I assume this can be used to build dexed?Getting
Unfortunately it does not say which JUCE module path is invalid. I don't even know what a JUCE module path is or where it is set.
When I run
Projucer
with no arguments, the GUI talks about Linux but not about FreeBSD. Yet I am running it on FreeBSD. What gives?