Getting Started Guide for Projucer on Raspberry Pi

Hi All,

Is there any guidance on how to build Projucer for a Raspberry Pi? (I assume I should be using cmake but I’m failing to make any sense out of it at the moment) I’m a complete beginner and I’m happy to follow instructions - I just can’t find any.

Thanks!

Do you really need it?
For instance I develop my projects on macOS and build on RPI/Linux without the Projucer.
But if you need it have a look in the post below.

Many thanks for your reply. I have just tried that and it has already got me further than I was!

I will do some more research…

It should compile (more or less) out of the box. If not it’s a bug!

Hi Nicolas,

Just tried it and it seems to have failed at the last hurdle:

pi@raspberrypi:~ $ ls
Bookshelf  Documents  Public     Videos
Desktop    Downloads  Music             Pictures  Templates
pi@raspberrypi:~ $ cd Downloads/
pi@raspberrypi:~/Downloads $ ls
JUCE  juce-6.1.6-linux.zip
pi@raspberrypi:~/Downloads $ cd JUCE/extras/Projucer/Builds/LinuxMakefile/
pi@raspberrypi:~/Downloads/JUCE/extras/Projucer/Builds/LinuxMakefile $ make
Compiling jucer_NewProjectWizard.cpp
Compiling jucer_StartPageComponent.cpp
Compiling jucer_AutoUpdater.cpp
Compiling jucer_CommandLine.cpp
Compiling jucer_Main.cpp
Compiling jucer_MainWindow.cpp
Compiling jucer_DocumentEditorComponent.cpp
Compiling jucer_OpenDocumentManager.cpp
Compiling jucer_SourceCodeEditor.cpp
Compiling jucer_ComponentTypeHandler.cpp
Compiling jucer_ButtonDocument.cpp
Compiling jucer_ComponentDocument.cpp
Compiling jucer_ColouredElement.cpp
Compiling jucer_PaintElement.cpp
Compiling jucer_PaintElementGroup.cpp
Compiling jucer_PaintElementImage.cpp
Compiling jucer_PaintElementPath.cpp
Compiling jucer_ComponentLayoutEditor.cpp
Compiling jucer_ComponentOverlayComponent.cpp
Compiling jucer_EditingPanelBase.cpp
Compiling jucer_JucerDocumentEditor.cpp
Compiling jucer_PaintRoutineEditor.cpp
Compiling jucer_PaintRoutinePanel.cpp
Compiling jucer_ResourceEditorPanel.cpp
Compiling jucer_TestComponent.cpp
Compiling jucer_BinaryResources.cpp
Compiling jucer_ComponentLayout.cpp
Compiling jucer_GeneratedCode.cpp
Compiling jucer_JucerDocument.cpp
Compiling jucer_ObjectTypes.cpp
Compiling jucer_PaintRoutine.cpp
Compiling jucer_Modules.cpp
Compiling jucer_HeaderComponent.cpp
Compiling jucer_Project.cpp
Compiling jucer_ProjectExporter.cpp
Compiling jucer_ProjectSaver.cpp
Compiling jucer_ResourceFile.cpp
Compiling jucer_AppearanceSettings.cpp
Compiling jucer_StoredSettings.cpp
Compiling jucer_CodeHelpers.cpp
Compiling jucer_FileHelpers.cpp
Compiling jucer_MiscUtilities.cpp
Compiling jucer_NewFileWizard.cpp
Compiling jucer_VersionInfo.cpp
Compiling jucer_PIPGenerator.cpp
Compiling jucer_Icons.cpp
Compiling jucer_JucerTreeViewBase.cpp
Compiling jucer_ProjucerLookAndFeel.cpp
Compiling jucer_SlidingPanelComponent.cpp
Compiling BinaryData.cpp
Compiling include_juce_build_tools.cpp
Compiling include_juce_core.cpp
In file included from ../../JuceLibraryCode/include_juce_core.cpp:8:
../../../../modules/juce_core/juce_core.cpp:92:13: fatal error: curl/curl.h: No such file or directory
   92 |    #include <curl/curl.h>
      |             ^~~~~~~~~~~~~
compilation terminated.
make: *** [Makefile:401: build/intermediate/Debug/include_juce_core_f26d17db.o] Error 1
pi@raspberrypi:~/Downloads/JUCE/extras/Projucer/Builds/LinuxMakefile $ 

(Note that the newest version of curl is already installed)

Have you tried with make CXX=clang++ instead?

On RPI4 / juce7 branch : it works for me.

pi@raspberrypi:~/JUCE/extras/Projucer/Builds/LinuxMakefile $ make CXX=clang++
Compiling jucer_NewProjectWizard.cpp
Compiling jucer_StartPageComponent.cpp
Compiling jucer_AutoUpdater.cpp
Compiling jucer_CommandLine.cpp
Compiling jucer_Main.cpp
Compiling jucer_MainWindow.cpp
Compiling jucer_DocumentEditorComponent.cpp
Compiling jucer_OpenDocumentManager.cpp
Compiling jucer_SourceCodeEditor.cpp
Compiling jucer_ComponentTypeHandler.cpp
Compiling jucer_ButtonDocument.cpp
Compiling jucer_ComponentDocument.cpp
Compiling jucer_ColouredElement.cpp
Compiling jucer_PaintElement.cpp
Compiling jucer_PaintElementGroup.cpp
Compiling jucer_PaintElementImage.cpp
Compiling jucer_PaintElementPath.cpp
Compiling jucer_ComponentLayoutEditor.cpp
Compiling jucer_ComponentOverlayComponent.cpp
Compiling jucer_EditingPanelBase.cpp
Compiling jucer_JucerDocumentEditor.cpp
Compiling jucer_PaintRoutineEditor.cpp
Compiling jucer_PaintRoutinePanel.cpp
Compiling jucer_ResourceEditorPanel.cpp
Compiling jucer_TestComponent.cpp
Compiling jucer_BinaryResources.cpp
Compiling jucer_ComponentLayout.cpp
Compiling jucer_GeneratedCode.cpp
Compiling jucer_JucerDocument.cpp
Compiling jucer_ObjectTypes.cpp
Compiling jucer_PaintRoutine.cpp
Compiling jucer_Modules.cpp
Compiling jucer_HeaderComponent.cpp
Compiling jucer_Project.cpp
Compiling jucer_ProjectExporter.cpp
Compiling jucer_ProjectSaver.cpp
Compiling jucer_ResourceFile.cpp
Compiling jucer_AppearanceSettings.cpp
Compiling jucer_StoredSettings.cpp
Compiling jucer_CodeHelpers.cpp
Compiling jucer_FileHelpers.cpp
Compiling jucer_MiscUtilities.cpp
Compiling jucer_NewFileWizard.cpp
Compiling jucer_VersionInfo.cpp
Compiling jucer_PIPGenerator.cpp
Compiling jucer_Icons.cpp
Compiling jucer_JucerTreeViewBase.cpp
Compiling jucer_ProjucerLookAndFeel.cpp
Compiling jucer_SlidingPanelComponent.cpp
Compiling BinaryData.cpp
Compiling include_juce_build_tools.cpp
Compiling include_juce_core.cpp
Compiling include_juce_cryptography.cpp
Compiling include_juce_data_structures.cpp
Compiling include_juce_events.cpp
Compiling include_juce_graphics.cpp
Compiling include_juce_gui_basics.cpp
Compiling include_juce_gui_extra.cpp
Linking Projucer - App

With gcc (Raspbian 8.3.0-6+rpi1) 8.3.0 there’s a bunch of warnings.
And it fails to link with libatomic as usual. :wink:

Linking Projucer - App
/usr/bin/ld: build/intermediate/Debug/include_juce_core_f26d17db.o: in function `std::__atomic_base<long long>::operator long long() const':
/usr/include/c++/8/bits/atomic_base.h:396: undefined reference to `__atomic_load_8'
/usr/bin/ld: build/intermediate/Debug/include_juce_core_f26d17db.o: in function `std::__atomic_base<long long>::operator^=(long long)':
/usr/include/c++/8/bits/atomic_base.h:344: undefined reference to `__atomic_fetch_xor_8'
collect2: error: ld returned 1 exit status
make: *** [Makefile:145: build/Projucer] Error 1

You need the development libraries for curl: libcurl4-openssl-dev on Debian for example.

1 Like

Hi Nicolas, I did try make CXX=clang++ but I got and error saying:

Compiling include_juce_core.cpp
/bin/sh: 1: clang++: not found
make: *** [Makefile:401: build/intermediate/Debug/include_juce_core_f26d17db.o] Error 127

BTW, I don’t really know enough to understand your:

With gcc (Raspbian 8.3.0-6+rpi1) 8.3.0` there’s a bunch of warnings.
And it fails to link with libatomic as usual.

…but I’m running the latest version of Raspberyy Pi OS.

Also, see my reply to oli1 below…

Hi oli1,

When I read your post I tried sudo apt-get install libcurl4-openssl-dev which didn’t cause any errors but then when I tried to do the build again it didn’t change the outcome of make CXX=clang++.

You don’t need make CXX=clang++ unless you have clang installed, which doesn’t appear to be the case.

I just built Projucer on my Pi 4. (Unofficial steps)

  • sudo apt install git cmake build-essential libx11-dev libxinerama-dev libxcursor-dev libxrandr-dev libcurl4-openssl-dev

  • wget https://github.com/juce-framework/JUCE/archive/refs/heads/master.zip

  • unzip master.zip && mkdir juce_build && cd juce_build

  • cmake -DCMAKE_BUILD_TYPE=Release -DJUCE_BUILD_EXTRAS=TRUE ../JUCE-master

  • make Projucer -j4

Building juceaide in the CMake configuration stage and building Projucer will take about 4-5 minutes.

2 Likes

I have just documented my process to post - but I can see that it looks a lot different to yours!
Very many thanks indeed for that - I will try that now…

1 Like

I use clang since gcc doesn’t work out of the box with the provided Makefile.
At least on my RPI (since many years now).
Sorry for the noise.

Not at all. You’re correct. It looks like the RPI handles linking atomic differently. This should be fixable with a flag passed to make. I will confirm.

It seems that simply add it to the core module requirements fix it.

Sorry, wrong box! This is what I meant to post:

This is a script which will install Projucer on a newly created Raspberry Pi image. It is basically just what Oli posted, placed into a script file. Many thanks to Oli!

#!/bin/bash
sudo apt install git cmake build-essential libx11-dev libxinerama-dev libxcursor-dev libxrandr-dev libcurl4-openssl-dev
read -p "Press Enter to continue..." </dev/tty
echo "*************************************"

wget https://github.com/juce-framework/JUCE/archive/refs/heads/master.zip
read -p "Press Enter to continue..." </dev/tty
echo "*************************************"

unzip master.zip && mkdir juce_build && cd juce_build
read -p "Press Enter to continue..." </dev/tty
echo "*************************************"

cmake -DCMAKE_BUILD_TYPE=Release -DJUCE_BUILD_EXTRAS=TRUE ../JUCE-master
read -p "Press Enter to continue..." </dev/tty
echo "*************************************"

make Projucer -j4
read -p "Press Enter to continue..." </dev/tty
echo "*************************************"
echo "Projucer can now be run from:"
echo "/home/pi/Desktop/juce_build/extras/Projucer/Projucer_artefacts/Release/Projucer"
1 Like