#!/bin/bash # Exit on error set -e if grep -q Raspberry /proc/cpuinfo; then echo "Running on a Raspberry Pi" else echo "Not running on a Raspberry Pi. Use at your own risk!" SKIP_UART=1 fi # Number of cores when running make JNUM=4 # Where will the output go? OUTDIR="$(pwd)/pico" # Install dependencies GIT_DEPS="git" SDK_DEPS="cmake gcc-arm-none-eabi gcc g++" OPENOCD_DEPS="gdb-multiarch automake autoconf build-essential texinfo libtool libftdi-dev libusb-1.0-0-dev" VSCODE_DEPS="code" UART_DEPS="minicom" # Build full list of dependencies DEPS="$GIT_DEPS $SDK_DEPS" if [[ "$SKIP_OPENOCD" == 1 ]]; then echo "Skipping OpenOCD (debug support)" else DEPS="$DEPS $OPENOCD_DEPS" fi echo "Installing Dependencies" sudo apt update sudo apt install -y $DEPS echo "Creating $OUTDIR" # Create pico directory to put everything in mkdir -p $OUTDIR cd $OUTDIR # Clone sw repos GITHUB_PREFIX="https://github.com/raspberrypi/" GITHUB_SUFFIX=".git" SDK_BRANCH="master" for REPO in sdk examples extras playground do DEST="$OUTDIR/pico-$REPO" if [ -d $DEST ]; then echo "$DEST already exists so skipping" else REPO_URL="${GITHUB_PREFIX}pico-${REPO}${GITHUB_SUFFIX}" echo "Cloning $REPO_URL" git clone -b $SDK_BRANCH $REPO_URL # Any submodules cd $DEST git submodule update --init cd $OUTDIR # Define PICO_SDK_PATH in ~/.bashrc VARNAME="PICO_${REPO^^}_PATH" echo "Adding $VARNAME to ~/.bashrc" echo "export $VARNAME=$DEST" >> ~/.bashrc export ${VARNAME}=$DEST fi done cd $OUTDIR # Pick up new variables we just defined source ~/.bashrc # Build blink and hello world for pico and pico2 cd pico-examples for board in pico pico2 do build_dir=build_$board mkdir $build_dir cd $build_dir cmake ../ -DPICO_BOARD=$board -DCMAKE_BUILD_TYPE=Debug for e in blink hello_world do echo "Building $e for $board" cd $e make -j$JNUM cd .. done cd .. done cd $OUTDIR # Debugprobe and picotool for REPO in debugprobe picotool do DEST="$OUTDIR/$REPO" REPO_URL="${GITHUB_PREFIX}${REPO}${GITHUB_SUFFIX}" git clone $REPO_URL # Build both cd $DEST git submodule update --init mkdir build cd build cmake ../ make -j$JNUM if [[ "$REPO" == "picotool" ]]; then echo "Installing picotool to /usr/local/bin/picotool" sudo cp picotool /usr/local/bin/ fi cd $OUTDIR done if [ -d openocd ]; then echo "openocd already exists so skipping" SKIP_OPENOCD=1 fi if [[ "$SKIP_OPENOCD" == 1 ]]; then echo "Won't build OpenOCD" else # Build OpenOCD echo "Building OpenOCD" cd $OUTDIR OPENOCD_CONFIGURE_ARGS="--enable-ftdi --enable-sysfsgpio --enable-bcm2835gpio --disable-werror" git clone "${GITHUB_PREFIX}openocd${GITHUB_SUFFIX}" --depth=1 cd openocd ./bootstrap ./configure $OPENOCD_CONFIGURE_ARGS make -j$JNUM sudo make install fi cd $OUTDIR # Enable UART if [[ "$SKIP_UART" == 1 ]]; then echo "Skipping uart configuration" else sudo apt install -y $UART_DEPS echo "Disabling Linux serial console (UART) so we can use it for pico" sudo raspi-config nonint do_serial 2 echo "You must run sudo reboot to finish UART setup" fi