Eclipse CDT (x64) で sdcc を使う

最近、8051(MCS51)と遊んでる。ていうか遊ばれてるっぽい。(笑)
このCPUはアーキテクチャが古いだけとはいいきれないくらい今どきのCPUと比べると全く洗練されてない。変な命令セットに加え、スタックも普通?と逆にPUSHするとアドレスがインクリメントされるとかデータアドレッシングの基本が8ビットであるとか汎用レジスタとメモリの扱いがグチャゴチャだったりとか命令の実行に12クロックも必要(ということはAVRの16MHzと同等の性能を出すには12×16=192MHzのクロックが必要?)とかとにかく変づくしのCPUである。だが、こんなCPUでも世界的には結構使われてたりするのが不思議だ。しかも、Keilなど有料のバカ高い開発環境ばかりしかなく無料で使えるのはSDCCぐらいしかなかったりする。

しょうがないので昔ながらの方法で汎用エディターにてソースとメイクを作りコンパイルを始めてみたが、最近の統合化開発環境になれてしまってる私には耐えがたきを耐えられない。無料で使えるIDE環境もいくつか試してみたもののどれも中途半端でボツ。で、最後の望みを託して、Eclipse-CDT(Neon-X64)にSDCC Pluginを入れた環境を試してみた。

まずは、新規->Cプロジェクト->その他(MCS51 family (SDCC))を選んで、

完了すると、

なーんと、NullPointerExceptionが表示されプロジェクトが作れない...(T_T)

なんとか解決できないかと探しまくったらやっぱり同じ症状に悩まされている人がいた。どうやらSDCC Pluginに含まれているsh.exeが見つからないときの症状らしい。Pluginのソースを調べてみたところ確かにsh.exeのパスを取得している箇所がある。ようは、Javaのシステムプロパティを取得し実行したEclipse(x86 or x64)により異なるパスをチェックしていただけの問題のようだ。

【Eclipse(x86)で実行した場合】
{Eclipse}\plugins\net.sourceforge.eclipsesdcc.win32_1.0.0\os\win32\x86\sh.exe
【Eclipse(x64)で実行した場合】
{Eclipse}\plugins\net.sourceforge.eclipsesdcc.win32_1.0.0\os\win32\x86_64\sh.exe

Pluginの中のフォルダ名(x86)を(x86_64)に直接変更してみたら問題なくプロジェクトを作成することができた。が、今度はコンパイル時にsh.exeがエラーとなる。(T_T)

エラーを起こしているsh.exe(zsh.exe)を入れ替えたりもしてみたがうまくいかない。しょうがないので他の方法を試してみた。
その結果、確証はないが、プロジェクト->Property->C/C++ビルド->ツール・チェーン・エディター->現在のビルダー(Sdcc Make)

を(CDT内部ビルダー)

に変更したところうまくコンパイルができるようになった。なんとなくいい感じである。

あと残る問題は標準のコード解析だけ。ソースにSDCC独自の拡張構文を書くとソース・エディターが警告とエラー表示の山となるが、とりあえずコンパイルには支障ないので気にならない人はそのまま無視すれば良いだけ。かも。(-_-;)

この件は、nodamushiさん作成のプラグインを入れるとかなり改善してくれる。あとは、__sbitと__bitがなんとかなればとは思うが...

参考
eclipse SDCC
Eclipse CDTにSDCCの方言を追加するプラグインを作った