That sounds a lot like the Pico SDK "include" isn't present in your 'CMakeLists.txt', and ...Unknown CMake command "pico_add_extra_outputs"[/code]
Quite possibly, the official 'pico-examples' are much the same.I get the impression that Pimoroni never considered that people would develop projects out of their example directory tree...
If this - https://github.com/pimoroni/pimoroni-pico/tree/main/examples/gfx_pack - is what you are using, are trying to build 'gfx_demo.cpp' using the 'CMakeLists.txt' there; it won't be enough.
I personally wouldn't consider it a 'Pimoroni SDK', more a 'Pimoroni install which includes Pico SDK and provides additional libraries which Pico SDK can use'.
It should be possible to install Pico SDK, install the Pimoroni stuff, then build 'gfx_demo.cpp' out of tree. I have a skeleton for that, using my own 'CMakeLists.txt', but I haven't configured for the necessary libraries yet -
Code:
pi@Pi4B:~/mypico/pimoroni_gfx_demo $ lsbuild CMakeLists.txt gfx_demo.cppCode:
pi@Pi4B:~/mypico/pimoroni_gfx_demo $ cd build/pi@Pi4B:~/mypico/pimoroni_gfx_demo/build $ cmake .....pi@Pi4B:~/mypico/pimoroni_gfx_demo/build $ make...[ 6%] Building CXX object CMakeFiles/pimoroni_gfx_demo.dir/gfx_demo.cpp.o /home/pi/mypico/pimoroni_gfx_demo/gfx_demo.cpp:2:10: fatal error: libraries/pico_graphics/pico_graphics.hpp: No such file or directory 2 | #include "libraries/pico_graphics/pico_graphics.hpp" | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Updated : I got most of the way there by making sure I had an up-to-date 'pimoroni-pico' installed, using this 'CMakeLists.txt' and the provided 'gfx_demo.cpp' file as is -
Code:
set(PROJECT pimoroni_gfx_demo)cmake_minimum_required(VERSION 3.12)include($ENV{PICO_SDK_PATH}/external/pico_sdk_import.cmake)project(${PROJECT} C CXX ASM)pico_sdk_init()add_executable(${PROJECT} gfx_demo.cpp)target_include_directories(${PROJECT} PRIVATE $ENV{PICO_SDK_PATH}/../pimoroni-pico)target_link_libraries(${PROJECT} pico_stdlib hardware_spi hardware_pwm)pico_add_extra_outputs(${PROJECT})pico_enable_stdio_usb(${PROJECT} 1)pico_enable_stdio_uart(${PROJECT} 0)Code:
pi@Pi4B:~/mypico/pimoroni_gfx_demo/build $ make...[100%] Linking CXX executable pimoroni_gfx_demo.elf/usr/lib/gcc/arm-none-eabi/12.2.1/../../../arm-none-eabi/bin/ld: CMakeFiles/pimoroni_gfx_demo.dir/gfx_demo.cpp.o: in function `pimoroni::ST7567::ST7567(unsigned short, unsigned short, pimoroni::SPIPins)':/home/pi/pico/pico-sdk/../pimoroni-pico/drivers/st7567/st7567.hpp:47: undefined reference to `pimoroni::ST7567::init(bool)'/usr/lib/gcc/arm-none-eabi/12.2.1/../../../arm-none-eabi/bin/ld: CMakeFiles/pimoroni_gfx_demo.dir/gfx_demo.cpp.o: in function `_GLOBAL__sub_I_st7567':/home/pi/mypico/pimoroni_gfx_demo/gfx_demo.cpp:8: undefined reference to `pimoroni::PicoGraphics_Pen1Bit::PicoGraphics_Pen1Bit(unsigned short, unsigned short, void*, unsigned short)'/usr/lib/gcc/arm-none-eabi/12.2.1/../../../arm-none-eabi/bin/ld: /home/pi/mypico/pimoroni_gfx_demo/gfx_demo.cpp:124: undefined reference to `vtable for pimoroni::ST7567'/usr/lib/gcc/arm-none-eabi/12.2.1/../../../arm-none-eabi/bin/ld: CMakeFiles/pimoroni_gfx_demo.dir/gfx_demo.cpp.o: in function `main':/home/pi/mypico/pimoroni_gfx_demo/gfx_demo.cpp:39: undefined reference to `pimoroni::ST7567::set_backlight(unsigned char)'/usr/lib/gcc/arm-none-eabi/12.2.1/../../../arm-none-eabi/bin/ld: /home/pi/mypico/pimoroni_gfx_demo/gfx_demo.cpp:66: undefined reference to `pimoroni::Button::raw()'/usr/lib/gcc/arm-none-eabi/12.2.1/../../../arm-none-eabi/bin/ld: /home/pi/mypico/pimoroni_gfx_demo/gfx_demo.cpp:69: undefined reference to `pimoroni::Button::raw()'/usr/lib/gcc/arm-none-eabi/12.2.1/../../../arm-none-eabi/bin/ld: /home/pi/mypico/pimoroni_gfx_demo/gfx_demo.cpp:73: undefined reference to `pimoroni::Button::raw()'/usr/lib/gcc/arm-none-eabi/12.2.1/../../../arm-none-eabi/bin/ld: /home/pi/mypico/pimoroni_gfx_demo/gfx_demo.cpp:76: undefined reference to `pimoroni::Button::raw()'/usr/lib/gcc/arm-none-eabi/12.2.1/../../../arm-none-eabi/bin/ld: /home/pi/mypico/pimoroni_gfx_demo/gfx_demo.cpp:80: undefined reference to `pimoroni::Button::raw()'/usr/lib/gcc/arm-none-eabi/12.2.1/../../../arm-none-eabi/bin/ld: /home/pi/mypico/pimoroni_gfx_demo/gfx_demo.cpp:85: undefined reference to `pimoroni::PicoGraphics_Pen1Bit::set_pen(unsigned int)'/usr/lib/gcc/arm-none-eabi/12.2.1/../../../arm-none-eabi/bin/ld: /home/pi/mypico/pimoroni_gfx_demo/gfx_demo.cpp:86: undefined reference to `pimoroni::PicoGraphics::clear()'/usr/lib/gcc/arm-none-eabi/12.2.1/../../../arm-none-eabi/bin/ld: /home/pi/mypico/pimoroni_gfx_demo/gfx_demo.cpp:108: undefined reference to `pimoroni::PicoGraphics_Pen1Bit::set_pen(unsigned int)'/usr/lib/gcc/arm-none-eabi/12.2.1/../../../arm-none-eabi/bin/ld: /home/pi/mypico/pimoroni_gfx_demo/gfx_demo.cpp:109: undefined reference to `pimoroni::PicoGraphics::circle(pimoroni::Point const&, long)'/usr/lib/gcc/arm-none-eabi/12.2.1/../../../arm-none-eabi/bin/ld: /home/pi/mypico/pimoroni_gfx_demo/gfx_demo.cpp:113: undefined reference to `pimoroni::PicoGraphics_Pen1Bit::set_pen(unsigned int)'/usr/lib/gcc/arm-none-eabi/12.2.1/../../../arm-none-eabi/bin/ld: /home/pi/mypico/pimoroni_gfx_demo/gfx_demo.cpp:114: undefined reference to `pimoroni::PicoGraphics::text(std::basic_string_view<char, std::char_traits<char> > const&, pimoroni::Point const&, long, float, float, unsigned char, bool)'/usr/lib/gcc/arm-none-eabi/12.2.1/../../../arm-none-eabi/bin/ld: /home/pi/mypico/pimoroni_gfx_demo/gfx_demo.cpp:117: undefined reference to `pimoroni::RGBLED::set_hsv(float, float, float)'/usr/lib/gcc/arm-none-eabi/12.2.1/../../../arm-none-eabi/bin/ld: /home/pi/mypico/pimoroni_gfx_demo/gfx_demo.cpp:119: undefined reference to `pimoroni::ST7567::update(pimoroni::PicoGraphics*)'collect2: error: ld returned 1 exit statusmake[2]: *** [CMakeFiles/pimoroni_gfx_demo.dir/build.make:1400: pimoroni_gfx_demo.elf] Error 1make[1]: *** [CMakeFiles/Makefile2:1782: CMakeFiles/pimoroni_gfx_demo.dir/all] Error 2make: *** [Makefile:91: all] Error 2Code:
set(PROJECT pimoroni_gfx_demo)set(PICO_SDK_PATH $ENV{PICO_SDK_PATH})set(PIMORONI_PATH ${PICO_SDK_PATH}/../pimoroni-pico)cmake_minimum_required(VERSION 3.12)include(${PICO_SDK_PATH}/external/pico_sdk_import.cmake)project(${PROJECT} C CXX ASM)pico_sdk_init()add_executable(${PROJECT} gfx_demo.cpp ${PIMORONI_PATH}/drivers/button/button.cpp ${PIMORONI_PATH}/drivers/rgbled/rgbled.cpp ${PIMORONI_PATH}/drivers/st7567/st7567.cpp ${PIMORONI_PATH}/libraries/pico_graphics/pico_graphics.cpp ${PIMORONI_PATH}/libraries/pico_graphics/pico_graphics_pen_1bit.cpp ${PIMORONI_PATH}/libraries/pico_graphics/types.cpp)target_include_directories(${PROJECT} PRIVATE ${PIMORONI_PATH} ${PIMORONI_PATH}/drivers/button ${PIMORONI_PATH}/drivers/rgbled ${PIMORONI_PATH}/drivers/st7567 ${PIMORONI_PATH}/libraries/pico_graphics)target_link_libraries(${PROJECT} pico_stdlib hardware_spi hardware_pwm)pico_add_extra_outputs(${PROJECT})pico_enable_stdio_usb(${PROJECT} 1)pico_enable_stdio_uart(${PROJECT} 0)Code:
[100%] Linking CXX executable pimoroni_gfx_demo.elf/usr/lib/gcc/arm-none-eabi/12.2.1/../../../arm-none-eabi/bin/ld: CMakeFiles/pimoroni_gfx_demo.dir/home/pi/pico/pimoroni-pico/libraries/pico_graphics/pico_graphics.cpp.o: in function `pimoroni::PicoGraphics::text(std::basic_string_view<char, std::char_traits<char> > const&, pimoroni::Point const&, long, float, float, unsigned char, bool)':/home/pi/pico/pimoroni-pico/libraries/pico_graphics/pico_graphics.cpp:167: undefined reference to `bitmap::text(bitmap::font_t const*, std::function<void (long, long, long, long)>, std::basic_string_view<char, std::char_traits<char> > const&, long, long, long, unsigned char, unsigned char, bool, long)'collect2: error: ld returned 1 exit statusmake[2]: *** [CMakeFiles/pimoroni_gfx_demo.dir/build.make:1496: pimoroni_gfx_demo.elf] Error 1make[1]: *** [CMakeFiles/Makefile2:1782: CMakeFiles/pimoroni_gfx_demo.dir/all] Error 2make: *** [Makefile:91: all] Error 2Statistics: Posted by hippy — Sun Jul 27, 2025 7:26 pm