Compiling for the PicoSystem

I recently purchased a PicoSystem by Pimoroni with the intention of immediately diving in and programming a game; but, I have to admit I got distracted by how much fun Super Square Bros. is to play right out of the box. The overall system feels great as a small portable in the style of the 80s portable LCD based game systems. I’m noticing that the form factor of the system is a bit small for me from a purely functional perspective; but, again, I really like the overall aesthetic and the case is absolutely stellar.

Snake example running on the PicoSystem

As much fun as I’m having playing the shipped game, I decided the weekend was definitely the time to get a small hello world up and running. I’m using Vagrant in order to keep my dev environment consistent and source controlled. Starting from the guide on Pimoroni, I ran into this issue:

CMake Error at examples/snake/CMakeLists.txt:10 (find_package):
  By not providing "FindPICOSYSTEM.cmake" in CMAKE_MODULE_PATH this project
  has asked CMake to find a package configuration file provided by
  "PICOSYSTEM", but CMake did not find one.

  Could not find a package configuration file provided by "PICOSYSTEM" with
  any of the following names:

    PICOSYSTEMConfig.cmake
    picosystem-config.cmake

  Add the installation prefix of "PICOSYSTEM" to CMAKE_PREFIX_PATH or set
  "PICOSYSTEM_DIR" to a directory containing one of the above files.  If
  "PICOSYSTEM" provides a separate development package or SDK, be sure it has
  been installed.


-- Configuring incomplete, errors occurred!

Which has a workaround listed in issue 4 on the PicoSystem SDK project of providing the path to the PicoSystem SDK via PICOSYSTEM_DIR like so:

git clone https://github.com/pimoroni/picosystem.git ~/picosystem
mkdir ~/picosystem/build
cd picosystem/build
cmake -DPICOSYSTEM_DIR:PATH=~/picosystem ..
make

The next error I hit was:

    default: CMake Error at CMakeLists.txt:2 (project):
    default:   No CMAKE_CXX_COMPILER could be found.
    default: 
    default:   Tell CMake where to find the compiler by setting either the environment
    default:   variable "CXX" or the CMake cache entry CMAKE_CXX_COMPILER to the full path
    default:   to the compiler, or to the compiler name if it is in the PATH.
    default: 
    default: -- Configuring incomplete, errors occurred!

This was addressed by revisiting the initial package installs and adding build-essential like so:

    apt-get -y install build-essential \
                       cmake \
                       gcc-arm-none-eabi \
                       libnewlib-arm-none-eabi \
                       libstdc++-arm-none-eabi-newlib

At this point, the snake example built and I was able to transfer it to my PicoSystem in DFU mode. I’m including the current working version of my Vagrantfile below in case it is useful to others:

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/focal64"

  config.vm.provision "shell", inline: <<-SHELL
    apt-get update
    apt-get upgrade -y

    # pico requirements
    apt-get -y install build-essential \
                       cmake \
                       gcc-arm-none-eabi \
                       libnewlib-arm-none-eabi \
                       libstdc++-arm-none-eabi-newlib
  SHELL

  config.vm.provision "shell", privileged: false, env: {"PICO_SDK_PATH" => "~vagrant/pico-sdk"}, inline: <<-SHELL
    # pico sdk
    git clone https://github.com/raspberrypi/pico-sdk.git ~/pico-sdk
    echo 'export PICO_SDK_PATH="~vagrant/pico-sdk"' >> ~/.bashrc
    cd ~/pico-sdk && \
      git submodule update --init

    # pico system
    git clone https://github.com/pimoroni/picosystem.git ~/picosystem
    mkdir ~/picosystem/build

    cd ~/picosystem/build && \
      cmake -DPICOSYSTEM_DIR:PATH=~/picosystem .. && \
      make

  SHELL
end
Standard

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s