1.おかしな挙動

ATtiny10向けの開発環境を整備し他のATtiny,ATmageにも対応させる作業中,ターゲットをATtiny10にしてコンパイルしたら,コンパイラが「unKnown MCU」エラーを吐くようになった。

2.原因を探る(Macでの例)

「作業中にavr-gcc環境が書き換えられたのではないか」と思い調べたが,書き換えはされていなかった。avr-gccがどこかに新たにインストールされコンパイラへのpathがそちらに振り向けられたと予想してAtduino IDEのコンパイラへのpathがどうなっているのか調べたが全く情報は無く不明だった。

「ならば…」と,新たなにコンパイラ(avr-gcc)がインストールされた場所をfindコマンドで探した。

$ sudo find / -name "avr-gcc" -ls

結果,次の場所に自分の意図しないavr-gccが存在することが分かった。

/Users/[ユーザ名]/Library/Arduino15/packages/arduino/tools/avr-gcc/4.8.1-arduino5/bin/avr-gcc

ユーザ配下のLibraryフォルダは隠しフォルダになっておりFinderで見ることができないの次の操作で隠しフォルダ/ファイル制限を解除して以後Finderでファイル操作した。

$ defaults write com.apple.finder AppleShowAllFiles -boolean true
$ killall Finder

隠しフォルダ/ファイル制限を元に戻す操作

$ defaults delete com.apple.finder AppleShowAllFiles
$ killall Finder

このavr-gccツール一式を一時的に外してArduino IDEでコンパイル操作を行うと案の定avr-gccが起動せずIDEにコンパイルエラーが表示された。

3.何で”これが”インストールされたのか

なぜ,自分の意図しないavr-gccがインストールされたのかと作業の記憶を遡ったらLauszus/Sanguinoというマイコンボードの定義ファイルをArduino IDEのボードマネージャを使ってクラウド連携でインストールしていた。このインストールで自分の意図しないavr-gccもインストールされたのではないかと予想しボードマネージャからLauszus/Sanguinoをアンインストールすると自分が整備しているavr-gcc環境が正しく動いた。

Lauszus/Sanguinoのインストールにあわせて自分の意図しないavr-gccがインストールされている。

4.意図しないavr-gccがインストールされる仕掛けを探る

まず,Arduino IDEのボードマネージャがボード定義ファイルをインストールする仕組みを探った。

  1. ボード定義ファイル配布者(以下,配布者)はGithubにボード定義ファイルをuploadしReleaseで配信する
  2. 配布者は,そのファイルの場所(url)とインストール情報をjsonテキストにしてGithubにuploadする。
  3. 配布者は,そのjsonテキストのraw=直接リンクurlを公開する。
  4. Arduino IDE ユーザ(以下,ユーザ)は直接リンクurlをArduino IDEに入力する。
  5. ユーザがボードマネージャを開くと配布者提供のボード定義ファイルがリストされる。
  6. ユーザは,そのリストでインストール操作を行うとGithubからダウンロードされてインストールが行われる。

自分の意図しないavr-gccがインストールされるのは,配布者が書いたjsonテキストにあった。直接リンクurlは次のとおり。

https://raw.githubusercontent.com/Lauszus/Sanguino/master/package_lauszus_sanguino_index.json

このテキストの最後の方に toolsDependencies 句があってここにavr-gcc他の開発ツールの情報が書かれている。このバージョンのavr-gccがインストールされていた。

5.Windowsの場合

Windowsの場合も同様にLauszus/Sanguinoをインストールすると自分の意図しないavr-gccがインストールされる。その場所は

\ユーザ\[ユーザ名]\AppData\Local\Arduino15\  以下Macと同じ
6.教訓
  1. ボードマネージャでボード定義ファイルをインストールする場合は,配布者が示すjsonテキストを見て事前チェックすること。
  2. 今回のようなavr-gccが書き換わる記述があったらボードマネージャ経由でインストールせず,手動操作でGithubから当該の定義ファイルをダウンロードしArduino IDEに組み込むこと。
  3. 他の場合でもクラウド連携に気をつけること。相手都合により自分の意図以外の操作が行われることがある。