mbed CLIでのコンパイルを楽にするシェルスクリプト

はじめに

この記事はmbed Advent Calendar 2016の6日目の記事です。

mbed CLIがリリースされ、ローカル環境でのコンパイルが楽になりました。 しかし、コンパイルするときにボードを設定したり、コンパイルされたファイルが結構深い階層にあったりと、何度も手作業で繰り返すのは結構面倒です。 そこで一発でボードを自動的に判定し、mbedへのコピーまでやってくれるスクリプトを作ったので紹介します。

mbed CLI自体のインストールについては、既に日本語の記事がまとまっていますので、以下をご覧ください。

mbed CLI (コマンドライン・インタフェース)を Mac OS X で使ってみる | mbed

作ったスクリプト

#!/bin/bash

set -eu

PROGRAM_NAME=$(basename `pwd`)
MBED_DETECT=$(mbed detect | grep Detected | sed 's/,//g' | head -n 1)

if [ -z "${MBED_DETECT}" ];then
    echo "[info] No mbed boards are found."
    exit 1;
fi

TARGET=$(echo ${MBED_DETECT} | cut -d' ' -f3)
MBED_VOLUME=$(echo ${MBED_DETECT} | cut -d' ' -f7)

echo "[info] Target:"${TARGET}", Volume:"${MBED_VOLUME}

TOOL_CHAIN="GCC_ARM"

mbed compile --toolchain ${TOOL_CHAIN} --target ${TARGET}

BUILD_PATH=$(echo "BUILD/"${TARGET}"/"${TOOL_CHAIN}"/"${PROGRAM_NAME}".bin")
cp ${BUILD_PATH} ${MBED_VOLUME}/
echo "[info] Success to copy from "${BUILD_PATH}" to "${MBED_VOLUME}

適当な名前(compile.shなど)で保存し、$ bash compile.shとするか実行権限をつけて直接スクリプトを叩けば実行されます。

手元のLPC1768で試して動くことを確認しましたが、それ以外のボードでは未検証です。動かない場合は教えてください。

なおMacでしか動かないと思います(Linuxは動くかもですが)。

やっていること

mbed detectでターゲットとコピー先のボリュームを取得し、mbed compileで生成されたbinファイルをコピーしています。

mbed newmbed importするとディレクトリ名がbinファイルのファイル名となるので、それも利用しています。

複数のmbedがPCに接続されている場合はmbed detectで先頭になる1台に対してコピーが行われます。