Building Projucer on RPI4

FYI.

I followed that blog in order to build the Projucer on my Raspberry Pi 4 (with Raspbian Buster).

After installed the recommended packages i tested without success the following command:

 cd ~/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
In file included from /usr/include/c++/8/map:61,
                 from ../../../../modules/juce_core/system/juce_StandardHeader.h:57,
                 from ../../../../modules/juce_core/juce_core.h:203,
                 from ../../../../modules/juce_graphics/juce_graphics.h:57,
                 from ../../../../modules/juce_gui_basics/juce_gui_basics.h:56,
                 from ../../../Build/juce_build_tools/juce_build_tools.h:56,
                 from ../../JuceLibraryCode/JuceHeader.h:16,
                 from ../../Source/Application/jucer_Headers.h:28,
                 from ../../Source/Application/jucer_Main.cpp:26:
/usr/include/c++/8/bits/stl_map.h: In member function ‘std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type& std::map<_Key, _Tp, _Compare, _Alloc>::operator[](std::map<_Key, _Tp, _Compare, _Alloc>::key_type&&) [with _Key = juce::String; _Tp = juce::var; _Compare = std::less<juce::String>; _Alloc = std::allocator<std::pair<const juce::String, juce::var> >]’:
/usr/include/c++/8/bits/stl_map.h:518:8: note: parameter passing for argument of type ‘std::_Rb_tree<juce::String, std::pair<const juce::String, juce::var>, std::_Select1st<std::pair<const juce::String, juce::var> >, std::less<juce::String>, std::allocator<std::pair<const juce::String, juce::var> > >::const_iterator’ {aka ‘std::_Rb_tree_const_iterator<std::pair<const juce::String, juce::var> >’} changed in GCC 7.1
    __i = _M_t._M_emplace_hint_unique(__i, std::piecewise_construct,
In file included from /usr/include/c++/8/map:60,
                 from ../../../../modules/juce_core/system/juce_StandardHeader.h:57,
                 from ../../../../modules/juce_core/juce_core.h:203,
                 from ../../../../modules/juce_graphics/juce_graphics.h:57,
                 from ../../../../modules/juce_gui_basics/juce_gui_basics.h:56,
                 from ../../../Build/juce_build_tools/juce_build_tools.h:56,
                 from ../../JuceLibraryCode/JuceHeader.h:16,
                 from ../../Source/Application/jucer_Headers.h:28,
                 from ../../Source/Application/jucer_Main.cpp:26:
/usr/include/c++/8/bits/stl_tree.h: In member function ‘std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_M_emplace_hint_unique(std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::const_iterator, _Args&& ...) [with _Args = {const std::piecewise_construct_t&, std::tuple<juce::String&&>, std::tuple<>}; _Key = juce::String; _Val = std::pair<const juce::String, juce::var>; _KeyOfValue = std::_Select1st<std::pair<const juce::String, juce::var> >; _Compare = std::less<juce::String>; _Alloc = std::allocator<std::pair<const juce::String, juce::var> >]’:
/usr/include/c++/8/bits/stl_tree.h:2411:7: note: parameter passing for argument of type ‘std::_Rb_tree<juce::String, std::pair<const juce::String, juce::var>, std::_Select1st<std::pair<const juce::String, juce::var> >, std::less<juce::String>, std::allocator<std::pair<const juce::String, juce::var> > >::const_iterator’ {aka ‘std::_Rb_tree_const_iterator<std::pair<const juce::String, juce::var> >’} changed in GCC 7.1
       _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/8/bits/stl_tree.h: In member function ‘std::pair<std::_Rb_tree_node_base*, std::_Rb_tree_node_base*> std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_M_get_insert_hint_unique_pos(std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::const_iterator, const key_type&) [with _Key = juce::String; _Val = std::pair<const juce::String, juce::var>; _KeyOfValue = std::_Select1st<std::pair<const juce::String, juce::var> >; _Compare = std::less<juce::String>; _Alloc = std::allocator<std::pair<const juce::String, juce::var> >]’:
/usr/include/c++/8/bits/stl_tree.h:2146:5: note: parameter passing for argument of type ‘std::_Rb_tree<juce::String, std::pair<const juce::String, juce::var>, std::_Select1st<std::pair<const juce::String, juce::var> >, std::less<juce::String>, std::allocator<std::pair<const juce::String, juce::var> > >::const_iterator’ {aka ‘std::_Rb_tree_const_iterator<std::pair<const juce::String, juce::var> >’} changed in GCC 7.1
     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Compiling jucer_MainWindow.cpp
Compiling jucer_DocumentEditorComponent.cpp

...

Compiling include_juce_graphics.cpp
Compiling include_juce_gui_basics.cpp
Compiling include_juce_gui_extra.cpp
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:144: build/Projucer] Error 1

But the secondth works fine! :smiley:

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_CompileEngineClient.cpp
Compiling jucer_CompileEngineServer.cpp
Compiling jucer_DownloadCompileEngineThread.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

Thanks Matthew!

Note that it works with GCC with arch flags provided (annoying warnings remain).

make TARGET_ARCH="-mcpu=cortex-a72 -mtune=cortex-a72 -mfpu=neon-fp-armv8"
1 Like