Error on compiling with make release (and ProJucer)

Hi All,

I have a project in JUCE + TracktionEngine that can be compiled on a Raspberry PI5 with “make” command. But as soon as I try to do “make CONFIG=Release” I have this error:

administrator@juicypadssampler:~/Desktop/JuicyPadsSampler/Builds/LinuxMakefile $ make CONFIG=Release V=1
Linking JuicyPadsSampler - App
mkdir -p build
mkdir -p build
mkdir -p build
g++ -o build/JuicyPadsSampler build/intermediate/Release/InfiniteRotaryComponenth_ff56424d.o build/intermediate/Release/MidiManager_45733188.o build/intermediate/Release/HardwareControlsSimulatorComponent_6be6fe85.o build/intermediate/Release/FlashMessageComponent_803b2342.o build/intermediate/Release/KeyboardComponent_4e6baad2.o build/intermediate/Release/SequencerComponent_b0af367b.o build/intermediate/Release/OptionAudioDevice_73f1a48e.o build/intermediate/Release/OptionComponent_bb97f27f.o build/intermediate/Release/ExportComponent_f2575b5f.o build/intermediate/Release/ProjectListComponent_82e0cced.o build/intermediate/Release/ProjectRowComponent_b7a6929f.o build/intermediate/Release/TempProjectManager_c836b04f.o build/intermediate/Release/ClipEditorComponent_5aff36e3.o build/intermediate/Release/GridAreaComponent_f3e44e0d.o build/intermediate/Release/MidiClipComponent_e8a409af.o build/intermediate/Release/TimelineContainerComponent_bd800084.o build/intermediate/Release/TimelineContent_f8cfae3b.o build/intermediate/Release/TimelineRulerComponent_3a06cbaf.o build/intermediate/Release/TimelineScrollContent_7c957f6e.o build/intermediate/Release/TimelineViewport_81d1e6e.o build/intermediate/Release/ToolbarComponent_dcc2d4a9.o build/intermediate/Release/TopBarComponent_876049e2.o build/intermediate/Release/SoundComponent_5002e0ff.o build/intermediate/Release/ChannelStrip_2fafc7ec.o build/intermediate/Release/LevelMeterComp_a9567b2b.o build/intermediate/Release/MasterStrip_acc31169.o build/intermediate/Release/MixerComponent_ce939b0b.o build/intermediate/Release/App_e5d18802.o build/intermediate/Release/Main_90ebc5c2.o build/intermediate/Release/BinaryData_ce4232d4.o build/intermediate/Release/include_juce_audio_basics_8a4e984a.o build/intermediate/Release/include_juce_audio_devices_63111d02.o build/intermediate/Release/include_juce_audio_formats_15f82001.o build/intermediate/Release/include_juce_audio_processors_10c03666.o build/intermediate/Release/include_juce_audio_processors_ara_2a4c6ef7.o build/intermediate/Release/include_juce_audio_processors_lv2_libs_12bdca08.o build/intermediate/Release/include_juce_audio_utils_9f9fb2d6.o build/intermediate/Release/include_juce_core_f26d17db.o build/intermediate/Release/include_juce_core_CompilationTime_9257742c.o build/intermediate/Release/include_juce_data_structures_7471b1e3.o build/intermediate/Release/include_juce_dsp_aeb2060f.o build/intermediate/Release/include_juce_events_fd7d695.o build/intermediate/Release/include_juce_graphics_f817e147.o build/intermediate/Release/include_juce_graphics_Harfbuzz_60c52ba2.o build/intermediate/Release/include_juce_graphics_Sheenbidi_c310974d.o build/intermediate/Release/include_juce_gui_basics_e3f79785.o build/intermediate/Release/include_juce_gui_extra_6dee1c1a.o build/intermediate/Release/include_juce_osc_f3df604d.o build/intermediate/Release/include_tracktion_core_cfd18d5f.o build/intermediate/Release/include_tracktion_engine_airwindows_1_dc450312.o build/intermediate/Release/include_tracktion_engine_airwindows_2_dc531a93.o build/intermediate/Release/include_tracktion_engine_airwindows_3_dc613214.o build/intermediate/Release/include_tracktion_engine_audio_files_c0c46bd1.o build/intermediate/Release/include_tracktion_engine_model_1_fff5741e.o build/intermediate/Release/include_tracktion_engine_model_2_38b9f.o build/intermediate/Release/include_tracktion_engine_playback_c33296c2.o build/intermediate/Release/include_tracktion_engine_plugins_89d00a3.o build/intermediate/Release/include_tracktion_engine_timestretch_6df3399b.o build/intermediate/Release/include_tracktion_engine_utils_d9fbe4b4.o build/intermediate/Release/include_tracktion_graph_45a9cbd8.o   -Lbuild -Lbuild -lasound -lfontconfig -lfreetype -lcurl  -fvisibility=hidden -lrt -ldl -lpthread
/usr/bin/ld: build/intermediate/Release/include_juce_audio_processors_10c03666.o: in function `std::_Function_handler<void (float), juce::WebToggleButtonParameterAttachment::WebToggleButtonParameterAttachment(juce::RangedAudioParameter&, juce::WebToggleButtonRelay&, juce::UndoManager*)::{lambda(float)#1}>::_M_invoke(std::_Any_data const&, float&&)':
include_juce_audio_processors.cpp:(.text+0x2740): undefined reference to `juce::WebToggleButtonRelay::setToggleState(bool)'
/usr/bin/ld: build/intermediate/Release/include_juce_audio_processors_10c03666.o: in function `std::_Function_handler<void (float), juce::WebSliderParameterAttachment::WebSliderParameterAttachment(juce::RangedAudioParameter&, juce::WebSliderRelay&, juce::UndoManager*)::{lambda(float)#1}>::_M_invoke(std::_Any_data const&, float&&)':
include_juce_audio_processors.cpp:(.text+0x2784): undefined reference to `juce::WebSliderRelay::setValue(float)'
/usr/bin/ld: build/intermediate/Release/include_juce_audio_processors_10c03666.o: in function `juce::WebSliderParameterAttachment::~WebSliderParameterAttachment()':
include_juce_audio_processors.cpp:(.text+0x81e8): undefined reference to `juce::WebSliderRelay::removeListener(juce::WebSliderRelay::Listener*)'
/usr/bin/ld: build/intermediate/Release/include_juce_audio_processors_10c03666.o: in function `juce::WebSliderParameterAttachment::~WebSliderParameterAttachment()':
include_juce_audio_processors.cpp:(.text+0x8224): undefined reference to `juce::WebSliderRelay::removeListener(juce::WebSliderRelay::Listener*)'
/usr/bin/ld: build/intermediate/Release/include_juce_audio_processors_10c03666.o: in function `juce::WebToggleButtonParameterAttachment::~WebToggleButtonParameterAttachment()':
include_juce_audio_processors.cpp:(.text+0x8268): undefined reference to `juce::WebToggleButtonRelay::removeListener(juce::WebToggleButtonRelay::Listener*)'
/usr/bin/ld: build/intermediate/Release/include_juce_audio_processors_10c03666.o: in function `juce::WebToggleButtonParameterAttachment::~WebToggleButtonParameterAttachment()':
include_juce_audio_processors.cpp:(.text+0x82a4): undefined reference to `juce::WebToggleButtonRelay::removeListener(juce::WebToggleButtonRelay::Listener*)'
/usr/bin/ld: build/intermediate/Release/include_juce_audio_processors_10c03666.o: in function `juce::WebComboBoxParameterAttachment::~WebComboBoxParameterAttachment()':
include_juce_audio_processors.cpp:(.text+0x82e8): undefined reference to `juce::WebComboBoxRelay::removeListener(juce::WebComboBoxRelay::Listener*)'
/usr/bin/ld: build/intermediate/Release/include_juce_audio_processors_10c03666.o: in function `juce::WebComboBoxParameterAttachment::~WebComboBoxParameterAttachment()':
include_juce_audio_processors.cpp:(.text+0x8324): undefined reference to `juce::WebComboBoxRelay::removeListener(juce::WebComboBoxRelay::Listener*)'
/usr/bin/ld: build/intermediate/Release/include_juce_audio_processors_10c03666.o: in function `juce::WebSliderParameterAttachment::setValue(float)':
include_juce_audio_processors.cpp:(.text+0xd170): undefined reference to `juce::WebSliderRelay::setValue(float)'
/usr/bin/ld: build/intermediate/Release/include_juce_audio_processors_10c03666.o: in function `juce::WebToggleButtonParameterAttachment::setValue(float)':
include_juce_audio_processors.cpp:(.text+0xd1bc): undefined reference to `juce::WebToggleButtonRelay::setToggleState(bool)'
/usr/bin/ld: build/intermediate/Release/include_juce_audio_processors_10c03666.o: in function `juce::WebSliderParameterAttachment::sliderValueChanged(juce::WebSliderRelay*)':
include_juce_audio_processors.cpp:(.text+0x13894): undefined reference to `juce::WebSliderRelay::getValue() const'
/usr/bin/ld: build/intermediate/Release/include_juce_audio_processors_10c03666.o: in function `juce::WebComboBoxParameterAttachment::setValue(float)':
include_juce_audio_processors.cpp:(.text+0x1437c): undefined reference to `juce::WebComboBoxRelay::setValue(float)'
/usr/bin/ld: build/intermediate/Release/include_juce_audio_processors_10c03666.o: in function `std::_Function_handler<void (float), juce::WebComboBoxParameterAttachment::WebComboBoxParameterAttachment(juce::RangedAudioParameter&, juce::WebComboBoxRelay&, juce::UndoManager*)::{lambda(float)#1}>::_M_invoke(std::_Any_data const&, float&&)':
include_juce_audio_processors.cpp:(.text+0x144bc): undefined reference to `juce::WebComboBoxRelay::setValue(float)'
/usr/bin/ld: build/intermediate/Release/include_juce_audio_processors_10c03666.o: in function `juce::WebSliderParameterAttachment::sendInitialUpdate()':
include_juce_audio_processors.cpp:(.text+0x158e0): undefined reference to `juce::WebSliderRelay::emitEvent(juce::var const&)'
/usr/bin/ld: build/intermediate/Release/include_juce_audio_processors_10c03666.o: in function `juce::WebSliderParameterAttachment::WebSliderParameterAttachment(juce::RangedAudioParameter&, juce::WebSliderRelay&, juce::UndoManager*)':
include_juce_audio_processors.cpp:(.text+0x15b04): undefined reference to `juce::WebSliderRelay::addListener(juce::WebSliderRelay::Listener*)'
/usr/bin/ld: build/intermediate/Release/include_juce_audio_processors_10c03666.o: in function `juce::WebToggleButtonParameterAttachment::sendInitialUpdate()':
include_juce_audio_processors.cpp:(.text+0x15d7c): undefined reference to `juce::WebToggleButtonRelay::emitEvent(juce::var const&)'
/usr/bin/ld: build/intermediate/Release/include_juce_audio_processors_10c03666.o: in function `juce::WebToggleButtonParameterAttachment::WebToggleButtonParameterAttachment(juce::RangedAudioParameter&, juce::WebToggleButtonRelay&, juce::UndoManager*)':
include_juce_audio_processors.cpp:(.text+0x15f68): undefined reference to `juce::WebToggleButtonRelay::addListener(juce::WebToggleButtonRelay::Listener*)'
/usr/bin/ld: build/intermediate/Release/include_juce_audio_processors_10c03666.o: in function `juce::WebComboBoxParameterAttachment::sendInitialUpdate()':
include_juce_audio_processors.cpp:(.text+0x161a4): undefined reference to `juce::WebComboBoxRelay::emitEvent(juce::var const&)'
/usr/bin/ld: build/intermediate/Release/include_juce_audio_processors_10c03666.o: in function `juce::WebComboBoxParameterAttachment::WebComboBoxParameterAttachment(juce::RangedAudioParameter&, juce::WebComboBoxRelay&, juce::UndoManager*)':
include_juce_audio_processors.cpp:(.text+0x163d4): undefined reference to `juce::WebComboBoxRelay::addListener(juce::WebComboBoxRelay::Listener*)'
/usr/bin/ld: build/intermediate/Release/include_juce_events_fd7d695.o: in function `juce::JUCEApplicationBase::main(int, char const**)':
include_juce_events.cpp:(.text.startup+0x170): undefined reference to `juce_gtkWebkitMain'
/usr/bin/ld: build/intermediate/Release/include_juce_gui_basics_e3f79785.o: in function `juce::XWindowSystem::getFocusWindow(unsigned long) const':
include_juce_gui_basics.cpp:(.text+0x56770): undefined reference to `juce::juce_getCurrentFocusWindow(juce::ComponentPeer*)'
/usr/bin/ld: build/intermediate/Release/include_juce_gui_basics_e3f79785.o: in function `juce::XWindowSystem::destroyWindow(unsigned long)':
include_juce_gui_basics.cpp:(.text+0x8931c): undefined reference to `juce::juce_handleXEmbedEvent(juce::ComponentPeer*, void*)'
/usr/bin/ld: build/intermediate/Release/include_juce_gui_basics_e3f79785.o: in function `juce::XWindowSystem::windowMessageReceive(_XEvent&)':
include_juce_gui_basics.cpp:(.text+0xa26e8): undefined reference to `juce::juce_handleXEmbedEvent(juce::ComponentPeer*, void*)'
/usr/bin/ld: build/intermediate/Release/include_tracktion_engine_model_2_38b9f.o: in function `tracktion::engine::RenderOptions::setFilename(juce::String, bool)':
include_tracktion_engine_model_2.cpp:(.text+0x3dc0c): undefined reference to `juce::RecentlyOpenedFilesList::RecentlyOpenedFilesList()'
/usr/bin/ld: include_tracktion_engine_model_2.cpp:(.text+0x3dc70): undefined reference to `juce::RecentlyOpenedFilesList::restoreFromString(juce::String const&)'
/usr/bin/ld: include_tracktion_engine_model_2.cpp:(.text+0x3dd2c): undefined reference to `juce::RecentlyOpenedFilesList::addFile(juce::File const&)'
/usr/bin/ld: include_tracktion_engine_model_2.cpp:(.text+0x3dd38): undefined reference to `juce::RecentlyOpenedFilesList::toString() const'
/usr/bin/ld: build/intermediate/Release/include_tracktion_engine_utils_d9fbe4b4.o: in function `tracktion::engine::UIBehaviour::showInfoMessage(juce::String const&)':
include_tracktion_engine_utils.cpp:(.text+0x19e0c): undefined reference to `juce::BubbleMessageComponent::BubbleMessageComponent(int)'
/usr/bin/ld: include_tracktion_engine_utils.cpp:(.text+0x19e68): undefined reference to `juce::BubbleMessageComponent::showAt(juce::Component*, juce::AttributedString const&, int, bool, bool)'
collect2: error: ld returned 1 exit status
make: *** [Makefile:147: build/JuicyPadsSampler] Errore 1

I already tried to compile with JUCE_WEB_BROWSER=0 but nothing change.

Do you have any idea?

Thanks

You might need the juce_gui_extra module, is that included in your project?

Off topic but I would really advise using cmake these days. We don’t support PJ anymore.

1 Like

Thank you, maybe I found the problem.
In order to use cmake what you suggest in order to convert mi ProJucer project into cmake?
I use VisualStudio on Windows to program but I need the Linux builder for the raspberry.

Thanks again!

It depends what your PJ looks like but you really just need to go through setting up a new cmake project and copy the files/settings across.

Nope, doesn’t work.

My Makefile is this and seams that juce_gui_extra is included.
It works on debug but not on release.

I would like to migrate to cmake but maybe when I finish this long project :slight_smile:

# Automatically generated makefile, created by the Projucer
# Don't edit this file! Your changes will be overwritten when you re-save the Projucer project!

# build with "V=1" for verbose builds
ifeq ($(V), 1)
V_AT =
else
V_AT = @
endif

# (this disables dependency generation if multiple architectures are set)
DEPFLAGS := $(if $(word 2, $(TARGET_ARCH)), , -MMD)

ifndef PKG_CONFIG
  PKG_CONFIG=pkg-config
endif

ifndef STRIP
  STRIP=strip
endif

ifndef AR
  AR=ar
endif

ifndef CONFIG
  CONFIG=Debug
endif

JUCE_ARCH_LABEL := $(shell uname -m)

ifeq ($(CONFIG),Debug)
  JUCE_BINDIR := build
  JUCE_LIBDIR := build
  JUCE_OBJDIR := build/intermediate/Debug
  JUCE_OUTDIR := build

  ifeq ($(TARGET_ARCH),)
    TARGET_ARCH := 
  endif

  JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DDEBUG=1" "-D_DEBUG=1" "-DJUCE_PROJUCER_VERSION=0x80006" "-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_dsp=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_MODULE_AVAILABLE_juce_osc=1" "-DJUCE_MODULE_AVAILABLE_tracktion_core=1" "-DJUCE_MODULE_AVAILABLE_tracktion_engine=1" "-DJUCE_MODULE_AVAILABLE_tracktion_graph=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_STRICT_REFCOUNTEDPOINTER=1" "-DJUCE_WEB_BROWSER=0" "-DJUCE_USE_WIN_WEBVIEW2_WITH_STATIC_LINKING=1" "-DJUCE_USE_WIN_WEBVIEW2=1" "-DJUCE_STANDALONE_APPLICATION=1" "-DTRACKTION_ENABLE_TIMESTRETCH_SOUNDTOUCH=1" "-DTRACKTION_ENABLE_SOUNDTOUCH=1" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=1.0.0" "-DJUCE_APP_VERSION_HEX=0x10000" $(shell $(PKG_CONFIG) --cflags alsa freetype2 fontconfig libcurl) -pthread -I../../JuceLibraryCode -I../../tracktion_engine/modules/juce/modules -I../../tracktion_engine/modules $(CPPFLAGS)
  JUCE_CPPFLAGS_APP :=  "-DJucePlugin_Build_VST=0" "-DJucePlugin_Build_VST3=0" "-DJucePlugin_Build_AU=0" "-DJucePlugin_Build_AUv3=0" "-DJucePlugin_Build_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0" "-DJucePlugin_Build_LV2=0"
  JUCE_TARGET_APP := JuicyPadsSampler

  JUCE_CFLAGS += $(JUCE_CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 $(CFLAGS)
  JUCE_CXXFLAGS += $(JUCE_CFLAGS) -std=c++20 $(CXXFLAGS)
  JUCE_LDFLAGS += $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) $(shell $(PKG_CONFIG) --libs alsa freetype2 fontconfig libcurl) -fvisibility=hidden -lrt -ldl -lpthread $(LDFLAGS)

  CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(JUCE_TARGET_APP) $(JUCE_OBJDIR)
endif

ifeq ($(CONFIG),Release)
  JUCE_BINDIR := build
  JUCE_LIBDIR := build
  JUCE_OBJDIR := build/intermediate/Release
  JUCE_OUTDIR := build

  ifeq ($(TARGET_ARCH),)
    TARGET_ARCH := 
  endif

  JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DNDEBUG=1" "-DJUCE_PROJUCER_VERSION=0x80006" "-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_dsp=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_MODULE_AVAILABLE_juce_osc=1" "-DJUCE_MODULE_AVAILABLE_tracktion_core=1" "-DJUCE_MODULE_AVAILABLE_tracktion_engine=1" "-DJUCE_MODULE_AVAILABLE_tracktion_graph=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_STRICT_REFCOUNTEDPOINTER=1" "-DJUCE_WEB_BROWSER=0" "-DJUCE_USE_WIN_WEBVIEW2_WITH_STATIC_LINKING=1" "-DJUCE_USE_WIN_WEBVIEW2=1" "-DJUCE_STANDALONE_APPLICATION=1" "-DTRACKTION_ENABLE_TIMESTRETCH_SOUNDTOUCH=1" "-DTRACKTION_ENABLE_SOUNDTOUCH=1" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=1.0.0" "-DJUCE_APP_VERSION_HEX=0x10000" $(shell $(PKG_CONFIG) --cflags alsa freetype2 fontconfig libcurl) -pthread -I../../JuceLibraryCode -I../../tracktion_engine/modules/juce/modules -I../../tracktion_engine/modules $(CPPFLAGS)
  JUCE_CPPFLAGS_APP :=  "-DJucePlugin_Build_VST=0" "-DJucePlugin_Build_VST3=0" "-DJucePlugin_Build_AU=0" "-DJucePlugin_Build_AUv3=0" "-DJucePlugin_Build_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0" "-DJucePlugin_Build_LV2=0"
  JUCE_TARGET_APP := JuicyPadsSampler

  JUCE_CFLAGS += $(JUCE_CPPFLAGS) $(TARGET_ARCH) -O3 $(CFLAGS)
  JUCE_CXXFLAGS += $(JUCE_CFLAGS) -std=c++20 $(CXXFLAGS)
  JUCE_LDFLAGS += $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) $(shell $(PKG_CONFIG) --libs alsa freetype2 fontconfig libcurl) -fvisibility=hidden -lrt -ldl -lpthread $(LDFLAGS)

  CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(JUCE_TARGET_APP) $(JUCE_OBJDIR)
endif

OBJECTS_APP := \
  $(JUCE_OBJDIR)/InfiniteRotaryComponenth_ff56424d.o \
  $(JUCE_OBJDIR)/MidiManager_45733188.o \
  $(JUCE_OBJDIR)/HardwareControlsSimulatorComponent_6be6fe85.o \
  $(JUCE_OBJDIR)/FlashMessageComponent_803b2342.o \
  $(JUCE_OBJDIR)/KeyboardComponent_4e6baad2.o \
  $(JUCE_OBJDIR)/SequencerComponent_b0af367b.o \
  $(JUCE_OBJDIR)/OptionAudioDevice_73f1a48e.o \
  $(JUCE_OBJDIR)/OptionComponent_bb97f27f.o \
  $(JUCE_OBJDIR)/ExportComponent_f2575b5f.o \
  $(JUCE_OBJDIR)/ProjectListComponent_82e0cced.o \
  $(JUCE_OBJDIR)/ProjectRowComponent_b7a6929f.o \
  $(JUCE_OBJDIR)/TempProjectManager_c836b04f.o \
  $(JUCE_OBJDIR)/ClipEditorComponent_5aff36e3.o \
  $(JUCE_OBJDIR)/GridAreaComponent_f3e44e0d.o \
  $(JUCE_OBJDIR)/MidiClipComponent_e8a409af.o \
  $(JUCE_OBJDIR)/TimelineContainerComponent_bd800084.o \
  $(JUCE_OBJDIR)/TimelineContent_f8cfae3b.o \
  $(JUCE_OBJDIR)/TimelineRulerComponent_3a06cbaf.o \
  $(JUCE_OBJDIR)/TimelineScrollContent_7c957f6e.o \
  $(JUCE_OBJDIR)/TimelineViewport_81d1e6e.o \
  $(JUCE_OBJDIR)/ToolbarComponent_dcc2d4a9.o \
  $(JUCE_OBJDIR)/TopBarComponent_876049e2.o \
  $(JUCE_OBJDIR)/SoundComponent_5002e0ff.o \
  $(JUCE_OBJDIR)/ChannelStrip_2fafc7ec.o \
  $(JUCE_OBJDIR)/LevelMeterComp_a9567b2b.o \
  $(JUCE_OBJDIR)/MasterStrip_acc31169.o \
  $(JUCE_OBJDIR)/MixerComponent_ce939b0b.o \
  $(JUCE_OBJDIR)/App_e5d18802.o \
  $(JUCE_OBJDIR)/Main_90ebc5c2.o \
  $(JUCE_OBJDIR)/BinaryData_ce4232d4.o \
  $(JUCE_OBJDIR)/include_juce_audio_basics_8a4e984a.o \
  $(JUCE_OBJDIR)/include_juce_audio_devices_63111d02.o \
  $(JUCE_OBJDIR)/include_juce_audio_formats_15f82001.o \
  $(JUCE_OBJDIR)/include_juce_audio_processors_10c03666.o \
  $(JUCE_OBJDIR)/include_juce_audio_processors_ara_2a4c6ef7.o \
  $(JUCE_OBJDIR)/include_juce_audio_processors_lv2_libs_12bdca08.o \
  $(JUCE_OBJDIR)/include_juce_audio_utils_9f9fb2d6.o \
  $(JUCE_OBJDIR)/include_juce_core_f26d17db.o \
  $(JUCE_OBJDIR)/include_juce_core_CompilationTime_9257742c.o \
  $(JUCE_OBJDIR)/include_juce_data_structures_7471b1e3.o \
  $(JUCE_OBJDIR)/include_juce_dsp_aeb2060f.o \
  $(JUCE_OBJDIR)/include_juce_events_fd7d695.o \
  $(JUCE_OBJDIR)/include_juce_graphics_f817e147.o \
  $(JUCE_OBJDIR)/include_juce_graphics_Harfbuzz_60c52ba2.o \
  $(JUCE_OBJDIR)/include_juce_graphics_Sheenbidi_c310974d.o \
  $(JUCE_OBJDIR)/include_juce_gui_basics_e3f79785.o \
  $(JUCE_OBJDIR)/include_juce_gui_extra_6dee1c1a.o \
  $(JUCE_OBJDIR)/include_juce_osc_f3df604d.o \
  $(JUCE_OBJDIR)/include_tracktion_core_cfd18d5f.o \
  $(JUCE_OBJDIR)/include_tracktion_engine_airwindows_1_dc450312.o \
  $(JUCE_OBJDIR)/include_tracktion_engine_airwindows_2_dc531a93.o \
  $(JUCE_OBJDIR)/include_tracktion_engine_airwindows_3_dc613214.o \
  $(JUCE_OBJDIR)/include_tracktion_engine_audio_files_c0c46bd1.o \
  $(JUCE_OBJDIR)/include_tracktion_engine_model_1_fff5741e.o \
  $(JUCE_OBJDIR)/include_tracktion_engine_model_2_38b9f.o \
  $(JUCE_OBJDIR)/include_tracktion_engine_playback_c33296c2.o \
  $(JUCE_OBJDIR)/include_tracktion_engine_plugins_89d00a3.o \
  $(JUCE_OBJDIR)/include_tracktion_engine_timestretch_6df3399b.o \
  $(JUCE_OBJDIR)/include_tracktion_engine_utils_d9fbe4b4.o \
  $(JUCE_OBJDIR)/include_tracktion_graph_45a9cbd8.o \

.PHONY: clean all strip

all : $(JUCE_OUTDIR)/$(JUCE_TARGET_APP)

$(JUCE_OUTDIR)/$(JUCE_TARGET_APP) : $(OBJECTS_APP) $(JUCE_OBJDIR)/execinfo.cmd $(RESOURCES)
	@command -v $(PKG_CONFIG) >/dev/null 2>&1 || { echo >&2 "pkg-config not installed. Please, install it."; exit 1; }
	@$(PKG_CONFIG) --print-errors alsa freetype2 fontconfig libcurl
	@echo Linking "JuicyPadsSampler - App"
	-$(V_AT)mkdir -p $(JUCE_BINDIR)
	-$(V_AT)mkdir -p $(JUCE_LIBDIR)
	-$(V_AT)mkdir -p $(JUCE_OUTDIR)
	$(V_AT)$(CXX) -o $(JUCE_OUTDIR)/$(JUCE_TARGET_APP) $(OBJECTS_APP) $(JUCE_LDFLAGS) $(shell cat $(JUCE_OBJDIR)/execinfo.cmd) $(JUCE_LDFLAGS_APP) $(RESOURCES) $(TARGET_ARCH)

$(JUCE_OBJDIR)/InfiniteRotaryComponenth_ff56424d.o: ../../Source/GUI/InfiniteRotaryComponenth.cpp
	-$(V_AT)mkdir -p $(@D)
	@echo "Compiling InfiniteRotaryComponenth.cpp"
	$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/MidiManager_45733188.o: ../../Source/Utilities/MidiManager.cpp
	-$(V_AT)mkdir -p $(@D)
	@echo "Compiling MidiManager.cpp"
	$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/HardwareControlsSimulatorComponent_6be6fe85.o: ../../Source/Utilities/HardwareControlsSimulatorComponent.cpp
	-$(V_AT)mkdir -p $(@D)
	@echo "Compiling HardwareControlsSimulatorComponent.cpp"
	$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/FlashMessageComponent_803b2342.o: ../../Source/Utilities/FlashMessageComponent.cpp
	-$(V_AT)mkdir -p $(@D)
	@echo "Compiling FlashMessageComponent.cpp"
	$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/KeyboardComponent_4e6baad2.o: ../../Source/Utilities/KeyboardComponent.cpp
	-$(V_AT)mkdir -p $(@D)
	@echo "Compiling KeyboardComponent.cpp"
	$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/SequencerComponent_b0af367b.o: ../../Source/Modules/Sequencer/SequencerComponent.cpp
	-$(V_AT)mkdir -p $(@D)
	@echo "Compiling SequencerComponent.cpp"
	$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/OptionAudioDevice_73f1a48e.o: ../../Source/Modules/Option/OptionAudioDevice.cpp
	-$(V_AT)mkdir -p $(@D)
	@echo "Compiling OptionAudioDevice.cpp"
	$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/OptionComponent_bb97f27f.o: ../../Source/Modules/Option/OptionComponent.cpp
	-$(V_AT)mkdir -p $(@D)
	@echo "Compiling OptionComponent.cpp"
	$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/ExportComponent_f2575b5f.o: ../../Source/Modules/Export/ExportComponent.cpp
	-$(V_AT)mkdir -p $(@D)
	@echo "Compiling ExportComponent.cpp"
	$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/ProjectListComponent_82e0cced.o: ../../Source/Modules/Project/ProjectListComponent.cpp
	-$(V_AT)mkdir -p $(@D)
	@echo "Compiling ProjectListComponent.cpp"
	$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/ProjectRowComponent_b7a6929f.o: ../../Source/Modules/Project/ProjectRowComponent.cpp
	-$(V_AT)mkdir -p $(@D)
	@echo "Compiling ProjectRowComponent.cpp"
	$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/TempProjectManager_c836b04f.o: ../../Source/Modules/Project/TempProjectManager.cpp
	-$(V_AT)mkdir -p $(@D)
	@echo "Compiling TempProjectManager.cpp"
	$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/ClipEditorComponent_5aff36e3.o: ../../Source/Modules/Timeline/ClipEditorComponent.cpp
	-$(V_AT)mkdir -p $(@D)
	@echo "Compiling ClipEditorComponent.cpp"
	$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/GridAreaComponent_f3e44e0d.o: ../../Source/Modules/Timeline/GridAreaComponent.cpp
	-$(V_AT)mkdir -p $(@D)
	@echo "Compiling GridAreaComponent.cpp"
	$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/MidiClipComponent_e8a409af.o: ../../Source/Modules/Timeline/MidiClipComponent.cpp
	-$(V_AT)mkdir -p $(@D)
	@echo "Compiling MidiClipComponent.cpp"
	$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/TimelineContainerComponent_bd800084.o: ../../Source/Modules/Timeline/TimelineContainerComponent.cpp
	-$(V_AT)mkdir -p $(@D)
	@echo "Compiling TimelineContainerComponent.cpp"
	$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/TimelineContent_f8cfae3b.o: ../../Source/Modules/Timeline/TimelineContent.cpp
	-$(V_AT)mkdir -p $(@D)
	@echo "Compiling TimelineContent.cpp"
	$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/TimelineRulerComponent_3a06cbaf.o: ../../Source/Modules/Timeline/TimelineRulerComponent.cpp
	-$(V_AT)mkdir -p $(@D)
	@echo "Compiling TimelineRulerComponent.cpp"
	$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/TimelineScrollContent_7c957f6e.o: ../../Source/Modules/Timeline/TimelineScrollContent.cpp
	-$(V_AT)mkdir -p $(@D)
	@echo "Compiling TimelineScrollContent.cpp"
	$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/TimelineViewport_81d1e6e.o: ../../Source/Modules/Timeline/TimelineViewport.cpp
	-$(V_AT)mkdir -p $(@D)
	@echo "Compiling TimelineViewport.cpp"
	$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/ToolbarComponent_dcc2d4a9.o: ../../Source/Modules/Timeline/ToolbarComponent.cpp
	-$(V_AT)mkdir -p $(@D)
	@echo "Compiling ToolbarComponent.cpp"
	$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/TopBarComponent_876049e2.o: ../../Source/Modules/Timeline/TopBarComponent.cpp
	-$(V_AT)mkdir -p $(@D)
	@echo "Compiling TopBarComponent.cpp"
	$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/SoundComponent_5002e0ff.o: ../../Source/Modules/Sound/SoundComponent.cpp
	-$(V_AT)mkdir -p $(@D)
	@echo "Compiling SoundComponent.cpp"
	$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/ChannelStrip_2fafc7ec.o: ../../Source/Modules/Mixer/ChannelStrip.cpp
	-$(V_AT)mkdir -p $(@D)
	@echo "Compiling ChannelStrip.cpp"
	$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/LevelMeterComp_a9567b2b.o: ../../Source/Modules/Mixer/LevelMeterComp.cpp
	-$(V_AT)mkdir -p $(@D)
	@echo "Compiling LevelMeterComp.cpp"
	$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/MasterStrip_acc31169.o: ../../Source/Modules/Mixer/MasterStrip.cpp
	-$(V_AT)mkdir -p $(@D)
	@echo "Compiling MasterStrip.cpp"
	$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/MixerComponent_ce939b0b.o: ../../Source/Modules/Mixer/MixerComponent.cpp
	-$(V_AT)mkdir -p $(@D)
	@echo "Compiling MixerComponent.cpp"
	$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/App_e5d18802.o: ../../Source/App.cpp
	-$(V_AT)mkdir -p $(@D)
	@echo "Compiling App.cpp"
	$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/Main_90ebc5c2.o: ../../Source/Main.cpp
	-$(V_AT)mkdir -p $(@D)
	@echo "Compiling Main.cpp"
	$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/BinaryData_ce4232d4.o: ../../JuceLibraryCode/BinaryData.cpp
	-$(V_AT)mkdir -p $(@D)
	@echo "Compiling BinaryData.cpp"
	$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/include_juce_audio_basics_8a4e984a.o: ../../JuceLibraryCode/include_juce_audio_basics.cpp
	-$(V_AT)mkdir -p $(@D)
	@echo "Compiling include_juce_audio_basics.cpp"
	$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/include_juce_audio_devices_63111d02.o: ../../JuceLibraryCode/include_juce_audio_devices.cpp
	-$(V_AT)mkdir -p $(@D)
	@echo "Compiling include_juce_audio_devices.cpp"
	$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/include_juce_audio_formats_15f82001.o: ../../JuceLibraryCode/include_juce_audio_formats.cpp
	-$(V_AT)mkdir -p $(@D)
	@echo "Compiling include_juce_audio_formats.cpp"
	$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/include_juce_audio_processors_10c03666.o: ../../JuceLibraryCode/include_juce_audio_processors.cpp
	-$(V_AT)mkdir -p $(@D)
	@echo "Compiling include_juce_audio_processors.cpp"
	$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/include_juce_audio_processors_ara_2a4c6ef7.o: ../../JuceLibraryCode/include_juce_audio_processors_ara.cpp
	-$(V_AT)mkdir -p $(@D)
	@echo "Compiling include_juce_audio_processors_ara.cpp"
	$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/include_juce_audio_processors_lv2_libs_12bdca08.o: ../../JuceLibraryCode/include_juce_audio_processors_lv2_libs.cpp
	-$(V_AT)mkdir -p $(@D)
	@echo "Compiling include_juce_audio_processors_lv2_libs.cpp"
	$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/include_juce_audio_utils_9f9fb2d6.o: ../../JuceLibraryCode/include_juce_audio_utils.cpp
	-$(V_AT)mkdir -p $(@D)
	@echo "Compiling include_juce_audio_utils.cpp"
	$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/include_juce_core_f26d17db.o: ../../JuceLibraryCode/include_juce_core.cpp
	-$(V_AT)mkdir -p $(@D)
	@echo "Compiling include_juce_core.cpp"
	$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/include_juce_core_CompilationTime_9257742c.o: ../../JuceLibraryCode/include_juce_core_CompilationTime.cpp
	-$(V_AT)mkdir -p $(@D)
	@echo "Compiling include_juce_core_CompilationTime.cpp"
	$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/include_juce_data_structures_7471b1e3.o: ../../JuceLibraryCode/include_juce_data_structures.cpp
	-$(V_AT)mkdir -p $(@D)
	@echo "Compiling include_juce_data_structures.cpp"
	$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/include_juce_dsp_aeb2060f.o: ../../JuceLibraryCode/include_juce_dsp.cpp
	-$(V_AT)mkdir -p $(@D)
	@echo "Compiling include_juce_dsp.cpp"
	$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/include_juce_events_fd7d695.o: ../../JuceLibraryCode/include_juce_events.cpp
	-$(V_AT)mkdir -p $(@D)
	@echo "Compiling include_juce_events.cpp"
	$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/include_juce_graphics_f817e147.o: ../../JuceLibraryCode/include_juce_graphics.cpp
	-$(V_AT)mkdir -p $(@D)
	@echo "Compiling include_juce_graphics.cpp"
	$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/include_juce_graphics_Harfbuzz_60c52ba2.o: ../../JuceLibraryCode/include_juce_graphics_Harfbuzz.cpp
	-$(V_AT)mkdir -p $(@D)
	@echo "Compiling include_juce_graphics_Harfbuzz.cpp"
	$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/include_juce_graphics_Sheenbidi_c310974d.o: ../../JuceLibraryCode/include_juce_graphics_Sheenbidi.c
	-$(V_AT)mkdir -p $(@D)
	@echo "Compiling include_juce_graphics_Sheenbidi.c"
	$(V_AT)$(CC) $(JUCE_CFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/include_juce_gui_basics_e3f79785.o: ../../JuceLibraryCode/include_juce_gui_basics.cpp
	-$(V_AT)mkdir -p $(@D)
	@echo "Compiling include_juce_gui_basics.cpp"
	$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/include_juce_gui_extra_6dee1c1a.o: ../../JuceLibraryCode/include_juce_gui_extra.cpp
	-$(V_AT)mkdir -p $(@D)
	@echo "Compiling include_juce_gui_extra.cpp"
	$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/include_juce_osc_f3df604d.o: ../../JuceLibraryCode/include_juce_osc.cpp
	-$(V_AT)mkdir -p $(@D)
	@echo "Compiling include_juce_osc.cpp"
	$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/include_tracktion_core_cfd18d5f.o: ../../JuceLibraryCode/include_tracktion_core.cpp
	-$(V_AT)mkdir -p $(@D)
	@echo "Compiling include_tracktion_core.cpp"
	$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/include_tracktion_engine_airwindows_1_dc450312.o: ../../JuceLibraryCode/include_tracktion_engine_airwindows_1.cpp
	-$(V_AT)mkdir -p $(@D)
	@echo "Compiling include_tracktion_engine_airwindows_1.cpp"
	$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/include_tracktion_engine_airwindows_2_dc531a93.o: ../../JuceLibraryCode/include_tracktion_engine_airwindows_2.cpp
	-$(V_AT)mkdir -p $(@D)
	@echo "Compiling include_tracktion_engine_airwindows_2.cpp"
	$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/include_tracktion_engine_airwindows_3_dc613214.o: ../../JuceLibraryCode/include_tracktion_engine_airwindows_3.cpp
	-$(V_AT)mkdir -p $(@D)
	@echo "Compiling include_tracktion_engine_airwindows_3.cpp"
	$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/include_tracktion_engine_audio_files_c0c46bd1.o: ../../JuceLibraryCode/include_tracktion_engine_audio_files.cpp
	-$(V_AT)mkdir -p $(@D)
	@echo "Compiling include_tracktion_engine_audio_files.cpp"
	$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/include_tracktion_engine_model_1_fff5741e.o: ../../JuceLibraryCode/include_tracktion_engine_model_1.cpp
	-$(V_AT)mkdir -p $(@D)
	@echo "Compiling include_tracktion_engine_model_1.cpp"
	$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/include_tracktion_engine_model_2_38b9f.o: ../../JuceLibraryCode/include_tracktion_engine_model_2.cpp
	-$(V_AT)mkdir -p $(@D)
	@echo "Compiling include_tracktion_engine_model_2.cpp"
	$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/include_tracktion_engine_playback_c33296c2.o: ../../JuceLibraryCode/include_tracktion_engine_playback.cpp
	-$(V_AT)mkdir -p $(@D)
	@echo "Compiling include_tracktion_engine_playback.cpp"
	$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/include_tracktion_engine_plugins_89d00a3.o: ../../JuceLibraryCode/include_tracktion_engine_plugins.cpp
	-$(V_AT)mkdir -p $(@D)
	@echo "Compiling include_tracktion_engine_plugins.cpp"
	$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/include_tracktion_engine_timestretch_6df3399b.o: ../../JuceLibraryCode/include_tracktion_engine_timestretch.cpp
	-$(V_AT)mkdir -p $(@D)
	@echo "Compiling include_tracktion_engine_timestretch.cpp"
	$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/include_tracktion_engine_utils_d9fbe4b4.o: ../../JuceLibraryCode/include_tracktion_engine_utils.cpp
	-$(V_AT)mkdir -p $(@D)
	@echo "Compiling include_tracktion_engine_utils.cpp"
	$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/include_tracktion_graph_45a9cbd8.o: ../../JuceLibraryCode/include_tracktion_graph.cpp
	-$(V_AT)mkdir -p $(@D)
	@echo "Compiling include_tracktion_graph.cpp"
	$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/execinfo.cmd:
	-$(V_AT)mkdir -p $(@D)
	-@if [ -z "$(V_AT)" ]; then echo "Checking if we need to link libexecinfo"; fi
	$(V_AT)printf "int main() { return 0; }" | $(CXX) -x c++ -o $(@D)/execinfo.x -lexecinfo - >/dev/null 2>&1 && printf -- "-lexecinfo" > "$@" || touch "$@"

$(JUCE_OBJDIR)/cxxfs.cmd:
	-$(V_AT)mkdir -p $(@D)
	-@if [ -z "$(V_AT)" ]; then echo "Checking if we need to link stdc++fs"; fi
	$(V_AT)printf "int main() { return 0; }" | $(CXX) -x c++ -o $(@D)/cxxfs.x -lstdc++fs - >/dev/null 2>&1 && printf -- "-lstdc++fs" > "$@" || touch "$@"

clean:
	@echo Cleaning JuicyPadsSampler
	$(V_AT)$(CLEANCMD)

strip:
	@echo Stripping JuicyPadsSampler
	-$(V_AT)$(STRIP) --strip-unneeded $(JUCE_OUTDIR)/$(JUCE_TARGET_APP)

-include $(OBJECTS_APP:%.o=%.d)

Thanks

I’m not sure what’s going on, it looks like there are undefined symbols to the web parts of juce from the juce_audio_processors module. But I would have thought that defining JUCE_WEB_BROWSER=0 would avoid that.

You could try installing libwebkit2gtk-4.1-dev.

Have you tried deleting the entire build folder and regenerating from PJ?

Paste your .jucer file into Grok, and tell it to convert to CMake for you.

This works very well these days, I have done it with dozens of projects with great success.

For CMake-based projects, the investment in CLion is very much worth it. I’ve moved all of my .jucer projects over to CMake and use CLion with very little friction. It’s absolutely the nicest environment for JUCE development, imho ..

You might also have success having Visual Studio maintain your CMake project - I don’t have much experience with that, since CLion is very nice.

Edit: I got Grok to convert this Makefile to CMake, which produced this - disclaimer: untested - but I post it here to show you how easily this can be done. Better would be to start with the .jucer file. I’ll include Groks’ findings as well, it identified issues ..

Groks findings:

I’ll help analyze the Makefile, convert it to CMake, identify potential issues for Raspberry Pi Debian, and provide fixes. The Makefile is for a JUCE-based audio application called “JuicyPadsSampler.”

Analysis of the Makefile

The Makefile is generated by Projucer for a JUCE project and includes:

  • Configurations: Debug and Release builds.
  • Dependencies: Uses pkg-config for libraries like ALSA, FreeType2, FontConfig, and libcurl.
  • Compiler Flags: C++20 standard, various JUCE module includes, and platform-specific flags (e.g., -DLINUX=1).
  • Libraries: Links against ALSA, FreeType2, FontConfig, libcurl, and system libraries (-lrt, -ldl, -lpthread).
  • Source Files: Includes application-specific files (e.g., Main.cpp, App.cpp) and JUCE/Tracktion modules.
  • Platform Considerations: Contains flags like -DJUCE_USE_WIN_WEBVIEW2=1, which are Windows-specific and irrelevant for Linux/Raspberry Pi.
  • Build Artifacts: Outputs to build/ directory with separate intermediate object directories for Debug/Release.

Potential Issues for Raspberry Pi Debian

  1. Architecture Compatibility:

    • The Makefile uses $(shell uname -m) for JUCE_ARCH_LABEL, which may not correctly set the target architecture for Raspberry Pi (e.g., arm or aarch64).
    • Raspberry Pi typically uses ARM architectures (e.g., armv7l for 32-bit or aarch64 for 64-bit). If TARGET_ARCH is not set appropriately, the build may fail or produce incompatible binaries.
  2. Windows-Specific Flags:

    • Flags like -DJUCE_USE_WIN_WEBVIEW2=1 and -DJUCE_USE_WIN_WEBVIEW2_WITH_STATIC_LINKING=1 are irrelevant for Linux and may cause conflicts or warnings.
  3. Dependency Availability:

    • The Makefile relies on pkg-config for alsa, freetype2, fontconfig, and libcurl. These must be installed on the Raspberry Pi Debian system, or the build will fail.
    • The libexecinfo check (execinfo.cmd) is for backtrace support, which may not be available or necessary on Raspberry Pi Debian.
  4. C++17 Filesystem Library:

    • The cxxfs.cmd checks for -lstdc++fs, which is needed for C++17 filesystem support in older GCC versions (pre-GCC 9). On Raspberry Pi Debian (e.g., Bullseye or later), GCC may include filesystem support in the standard library, making this flag unnecessary or causing linker issues if explicitly included.
  5. Resource Constraints:

    • Raspberry Pi has limited memory and CPU resources. The -O3 optimization in Release mode may increase compilation time and memory usage significantly.
  6. ALSA Dependency:

    • The project uses ALSA for audio. Raspberry Pi Debian typically includes ALSA, but the specific audio configuration (e.g., default sound card) may require additional setup or runtime configuration.
  7. File Paths:

    • The include paths (../../JuceLibraryCode, ../../tracktion_engine/modules) assume a specific directory structure. If the project is moved or the JUCE/Tracktion modules are not in the expected locations, the build will fail.

Conversion to CMake

Below is a CMakeLists.txt equivalent to the Makefile, structured to support both Debug and Release configurations and tailored for Raspberry Pi Debian.

cmake_minimum_required(VERSION 3.16)
project(JuicyPadsSampler VERSION 1.0.0 LANGUAGES CXX C)

# Set C++ standard
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

# Define build type (default to Debug)
if(NOT CMAKE_BUILD_TYPE)
    set(CMAKE_BUILD_TYPE Debug CACHE STRING "Choose the type of build" FORCE)
endif()

# Set output directories
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/build)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/build)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/build)

# Find dependencies using pkg-config
find_package(PkgConfig REQUIRED)
pkg_check_modules(ALSA REQUIRED alsa)
pkg_check_modules(FREETYPE2 REQUIRED freetype2)
pkg_check_modules(FONTCONFIG REQUIRED fontconfig)
pkg_check_modules(LIBCURL REQUIRED libcurl)

# Define source files
set(SOURCE_FILES
    ../../Source/GUI/InfiniteRotaryComponenth.cpp
    ../../Source/Utilities/MidiManager.cpp
    ../../Source/Utilities/HardwareControlsSimulatorComponent.cpp
    ../../Source/Utilities/FlashMessageComponent.cpp
    ../../Source/Utilities/KeyboardComponent.cpp
    ../../Source/Modules/Sequencer/SequencerComponent.cpp
    ../../Source/Modules/Option/OptionAudioDevice.cpp
    ../../Source/Modules/Option/OptionComponent.cpp
    ../../Source/Modules/Export/ExportComponent.cpp
    ../../Source/Modules/Project/ProjectListComponent.cpp
    ../../Source/Modules/Project/ProjectRowComponent.cpp
    ../../Source/Modules/Project/TempProjectManager.cpp
    ../../Source/Modules/Timeline/ClipEditorComponent.cpp
    ../../Source/Modules/Timeline/GridAreaComponent.cpp
    ../../Source/Modules/Timeline/MidiClipComponent.cpp
    ../../Source/Modules/Timeline/TimelineContainerComponent.cpp
    ../../Source/Modules/Timeline/TimelineContent.cpp
    ../../Source/Modules/Timeline/TimelineRulerComponent.cpp
    ../../Source/Modules/Timeline/TimelineScrollContent.cpp
    ../../Source/Modules/Timeline/TimelineViewport.cpp
    ../../Source/Modules/Timeline/ToolbarComponent.cpp
    ../../Source/Modules/Timeline/TopBarComponent.cpp
    ../../Source/Modules/Sound/SoundComponent.cpp
    ../../Source/Modules/Mixer/ChannelStrip.cpp
    ../../Source/Modules/Mixer/LevelMeterComp.cpp
    ../../Source/Modules/Mixer/MasterStrip.cpp
    ../../Source/Modules/Mixer/MixerComponent.cpp
    ../../Source/App.cpp
    ../../Source/Main.cpp
    ../../JuceLibraryCode/BinaryData.cpp
    ../../JuceLibraryCode/include_juce_audio_basics.cpp
    ../../JuceLibraryCode/include_juce_audio_devices.cpp
    ../../JuceLibraryCode/include_juce_audio_formats.cpp
    ../../JuceLibraryCode/include_juce_audio_processors.cpp
    ../../JuceLibraryCode/include_juce_audio_processors_ara.cpp
    ../../JuceLibraryCode/include_juce_audio_processors_lv2_libs.cpp
    ../../JuceLibraryCode/include_juce_audio_utils.cpp
    ../../JuceLibraryCode/include_juce_core.cpp
    ../../JuceLibraryCode/include_juce_core_CompilationTime.cpp
    ../../JuceLibraryCode/include_juce_data_structures.cpp
    ../../JuceLibraryCode/include_juce_dsp.cpp
    ../../JuceLibraryCode/include_juce_events.cpp
    ../../JuceLibraryCode/include_juce_graphics.cpp
    ../../JuceLibraryCode/include_juce_graphics_Harfbuzz.cpp
    ../../JuceLibraryCode/include_juce_graphics_Sheenbidi.c
    ../../JuceLibraryCode/include_juce_gui_basics.cpp
    ../../JuceLibraryCode/include_juce_gui_extra.cpp
    ../../JuceLibraryCode/include_juce_osc.cpp
    ../../JuceLibraryCode/include_tracktion_core.cpp
    ../../JuceLibraryCode/include_tracktion_engine_airwindows_1.cpp
    ../../JuceLibraryCode/include_tracktion_engine_airwindows_2.cpp
    ../../JuceLibraryCode/include_tracktion_engine_airwindows_3.cpp
    ../../JuceLibraryCode/include_tracktion_engine_audio_files.cpp
    ../../JuceLibraryCode/include_tracktion_engine_model_1.cpp
    ../../JuceLibraryCode/include_tracktion_engine_model_2.cpp
    ../../JuceLibraryCode/include_tracktion_engine_playback.cpp
    ../../JuceLibraryCode/include_tracktion_engine_plugins.cpp
    ../../JuceLibraryCode/include_tracktion_engine_timestretch.cpp
    ../../JuceLibraryCode/include_tracktion_engine_utils.cpp
    ../../JuceLibraryCode/include_tracktion_graph.cpp
)

# Define include directories
set(INCLUDE_DIRS
    ../../JuceLibraryCode
    ../../tracktion_engine/modules/juce/modules
    ../../tracktion_engine/modules
)

# Define preprocessor definitions
set(COMMON_DEFINES
    LINUX=1
    JUCE_PROJUCER_VERSION=0x80006
    JUCE_MODULE_AVAILABLE_juce_audio_basics=1
    JUCE_MODULE_AVAILABLE_juce_audio_devices=1
    JUCE_MODULE_AVAILABLE_juce_audio_formats=1
    JUCE_MODULE_AVAILABLE_juce_audio_processors=1
    JUCE_MODULE_AVAILABLE_juce_audio_utils=1
    JUCE_MODULE_AVAILABLE_juce_core=1
    JUCE_MODULE_AVAILABLE_juce_data_structures=1
    JUCE_MODULE_AVAILABLE_juce_dsp=1
    JUCE_MODULE_AVAILABLE_juce_events=1
    JUCE_MODULE_AVAILABLE_juce_graphics=1
    JUCE_MODULE_AVAILABLE_juce_gui_basics=1
    JUCE_MODULE_AVAILABLE_juce_gui_extra=1
    JUCE_MODULE_AVAILABLE_juce_osc=1
    JUCE_MODULE_AVAILABLE_tracktion_core=1
    JUCE_MODULE_AVAILABLE_tracktion_engine=1
    JUCE_MODULE_AVAILABLE_tracktion_graph=1
    JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1
    JUCE_STRICT_REFCOUNTEDPOINTER=1
    JUCE_WEB_BROWSER=0
    JUCE_STANDALONE_APPLICATION=1
    TRACKTION_ENABLE_TIMESTRETCH_SOUNDTOUCH=1
    TRACKTION_ENABLE_SOUNDTOUCH=1
    JUCER_LINUX_MAKE_6D53C8B4=1
    JUCE_APP_VERSION=1.0.0
    JUCE_APP_VERSION_HEX=0x10000
    JucePlugin_Build_VST=0
    JucePlugin_Build_VST3=0
    JucePlugin_Build_AU=0
    JucePlugin_Build_AUv3=0
    JucePlugin_Build_AAX=0
    JucePlugin_Build_Standalone=0
    JucePlugin_Build_Unity=0
    JucePlugin_Build_LV2=0
)

# Configuration-specific settings
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
    add_definitions(-DDEBUG=1 -D_DEBUG=1)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -ggdb -O0")
elseif(CMAKE_BUILD_TYPE STREQUAL "Release")
    add_definitions(-DNDEBUG=1)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3")
endif()

# Add executable
add_executable(JuicyPadsSampler ${SOURCE_FILES})

# Set include directories
target_include_directories(JuicyPadsSampler PRIVATE
    ${INCLUDE_DIRS}
    ${ALSA_INCLUDE_DIRS}
    ${FREETYPE2_INCLUDE_DIRS}
    ${FONTCONFIG_INCLUDE_DIRS}
    ${LIBCURL_INCLUDE_DIRS}
)

# Set compile definitions
target_compile_definitions(JuicyPadsSampler PRIVATE ${COMMON_DEFINES})

# Link libraries
target_link_libraries(JuicyPadsSampler PRIVATE
    ${ALSA_LIBRARIES}
    ${FREETYPE2_LIBRARIES}
    ${FONTCONFIG_LIBRARIES}
    ${LIBCURL_LIBRARIES}
    rt
    dl
    pthread
)

# Set linker flags
set_target_properties(JuicyPadsSampler PROPERTIES
    LINK_FLAGS "-fvisibility=hidden"
)

# Check for libexecinfo
include(CheckLibraryExists)
check_library_exists(execinfo backtrace "" HAVE_EXECINFO)
if(HAVE_EXECINFO)
    target_link_libraries(JuicyPadsSampler PRIVATE execinfo)
endif()

# Check for stdc++fs (for older GCC versions)
check_library_exists(stdc++fs std::filesystem::path::preferred_separator "" HAVE_STDCXXFS)
if(HAVE_STDCXXFS)
    target_link_libraries(JuicyPadsSampler PRIVATE stdc++fs)
endif()

# Enable dependency tracking
set_property(GLOBAL PROPERTY GLOBAL_DEPENDS_DEBUG_MODE 1)

# Clean target (equivalent to Makefile's clean)
add_custom_target(clean_all
    COMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
    COMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_BINARY_DIR}/build/intermediate
    COMMENT "Cleaning JuicyPadsSampler"
)

# Strip target (equivalent to Makefile's strip)
add_custom_target(strip
    COMMAND ${CMAKE_STRIP} --strip-unneeded ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/JuicyPadsSampler
    COMMENT "Stripping JuicyPadsSampler"
    DEPENDS JuicyPadsSampler
)

Fixes for Raspberry Pi Debian

  1. Architecture Compatibility:

    • CMake automatically handles the target architecture based on the host system. For Raspberry Pi, ensure the correct toolchain is used. If cross-compiling, use a toolchain file specifying the ARM architecture (e.g., arm-linux-gnueabihf for 32-bit or aarch64-linux-gnu for 64-bit).
    • Example toolchain file (toolchain-rpi.cmake):
      set(CMAKE_SYSTEM_NAME Linux)
      set(CMAKE_SYSTEM_PROCESSOR arm)
      set(CMAKE_C_COMPILER arm-linux-gnueabihf-gcc)
      set(CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++)
      set(CMAKE_FIND_ROOT_PATH /path/to/rpi/sysroot)
      set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
      set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
      set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
      
      Use with: cmake -DCMAKE_TOOLCHAIN_FILE=toolchain-rpi.cmake ..
  2. Remove Windows-Specific Flags:

    • The CMakeLists.txt excludes -DJUCE_USE_WIN_WEBVIEW2=1 and -DJUCE_USE_WIN_WEBVIEW2_WITH_STATIC_LINKING=1, as they are irrelevant for Linux.
  3. Ensure Dependency Availability:

    • Install required packages on Raspberry Pi Debian:
      sudo apt-get update
      sudo apt-get install libasound2-dev libfreetype6-dev libfontconfig1-dev libcurl4-openssl-dev pkg-config
      
    • The CMake script uses pkg_check_modules to ensure these dependencies are found, failing the configuration if they are missing.
  4. Handle C++17 Filesystem:

    • The CMake script checks for stdc++fs using check_library_exists. On modern Debian (e.g., Bullseye with GCC 10+), the filesystem library is included in libstdc++, so -lstdc++fs is only linked if necessary.
  5. Resource Constraints:

    • For Release builds, consider using -O2 instead of -O3 to reduce memory usage during compilation:
      set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2")
      
    • Alternatively, compile on a more powerful machine and cross-compile for Raspberry Pi.
  6. ALSA Configuration:

    • Ensure ALSA is configured correctly on the Raspberry Pi. Test with:
      aplay /usr/share/sounds/alsa/Front_Center.wav
      
    • If no sound is heard, configure the default ALSA device in /etc/asound.conf or ~/.asoundrc.
  7. File Path Robustness:

    • The CMake script uses relative paths consistent with the Makefile. Ensure the JuceLibraryCode and tracktion_engine directories are correctly placed relative to the project root.
    • For flexibility, consider using CMake variables for paths:
      set(JUCE_DIR ${CMAKE_SOURCE_DIR}/../../JuceLibraryCode)
      set(TRACKTION_DIR ${CMAKE_SOURCE_DIR}/../../tracktion_engine)
      
  8. Additional Raspberry Pi Considerations:

    • SoundTouch Library: The project uses SoundTouch (-DTRACKTION_ENABLE_SOUNDTOUCH=1). Ensure libsoundtouch-dev is installed:
      sudo apt-get install libsoundtouch-dev
      
      Add to CMake:
      pkg_check_modules(SOUNDTOUCH REQUIRED soundtouch)
      target_include_directories(JuicyPadsSampler PRIVATE ${SOUNDTOUCH_INCLUDE_DIRS})
      target_link_libraries(JuicyPadsSampler PRIVATE ${SOUNDTOUCH_LIBRARIES})
      
    • ARM-Specific Optimizations: Add architecture-specific flags if needed:
      if(CMAKE_SYSTEM_PROCESSOR MATCHES "arm")
          set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=armv7-a -mfpu=neon-vfpv4")
      elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64")
          set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=armv8-a")
      endif()
      

Building on Raspberry Pi

  1. Install Dependencies:

    sudo apt-get update
    sudo apt-get install build-essential cmake libasound2-dev libfreetype6-dev libfontconfig1-dev libcurl4-openssl-dev libsoundtouch-dev pkg-config
    
  2. Create Build Directory:

    mkdir build && cd build
    
  3. Configure CMake:

    cmake -DCMAKE_BUILD_TYPE=Debug ..
    

    For Release:

    cmake -DCMAKE_BUILD_TYPE=Release ..
    
  4. Build:

    make -j$(nproc)
    
  5. Run:

    ./build/JuicyPadsSampler
    

Additional Notes

  • Verbose Output: To debug build issues, use make VERBOSE=1 or set V=1 in the Makefile environment.
  • Cross-Compilation: If compiling on a different machine, ensure the Raspberry Pi sysroot is available and use the toolchain file mentioned above.
  • Testing: After building, test the application to ensure ALSA audio output works. Configure ALSA if necessary.
  • Maintenance: The CMakeLists.txt is modular and easier to maintain than the Makefile. Update paths or dependencies as needed for future changes.

This CMake conversion and the fixes address the identified issues, ensuring compatibility with Raspberry Pi Debian while maintaining the functionality of the original Makefile.

EDIT2: I paste this here to highlight how useful Grok can be for issues like this - looks like this solution as proposed would also be of use to you:

Solution 2: Enable Web Browser Support

If the web-based UI components are required, enable JUCE’s web browser support by setting JUCE_WEB_BROWSER=1 and ensuring the necessary dependencies are available.

  1. Update CMakeLists.txt:

    • Modify the COMMON_DEFINES section to enable web browser support:
      set(COMMON_DEFINES
          # ... other defines ...
          JUCE_WEB_BROWSER=1
          # Remove JUCE_USE_WIN_WEBVIEW2 and related flags
          JUCE_STANDALONE_APPLICATION=1
          # ... other defines ...
      )
      
  2. Install Web Engine Dependencies:

    • On Raspberry Pi Debian, JUCE’s web browser support typically relies on WebKitGTK. Install it:
      sudo apt-get update
      sudo apt-get install libwebkit2gtk-4.0-dev
      
    • Update CMake to include WebKitGTK:
      pkg_check_modules(WEBKITGTK REQUIRED webkit2gtk-4.0)
      target_include_directories(JuicyPadsSampler PRIVATE ${WEBKITGTK_INCLUDE_DIRS})
      target_link_libraries(JuicyPadsSampler PRIVATE ${WEBKITGTK_LIBRARIES})
      
  3. Rebuild:

    • Clean and rebuild:
      rm -rf build/*
      cmake -DCMAKE_BUILD_TYPE=Release ..
      make -j$(nproc)
      
  4. Consider Resource Impact:

    • WebKitGTK is resource-intensive on Raspberry Pi, which may affect performance, especially on lower-end models (e.g., Raspberry Pi 3). Test thoroughly to ensure the application remains responsive.