こんばんは、大会が来月に迫っていて忙しいハズなのですが、
そういう時に限って他のことがやりたくなる絶賛逃避中のヌキヲです。
今回はタイトルの通り、PIC32MX PIC32MZ 用のコンパイラをバージョンアップしました。
ホントは順番的に MPLAB XC16 の記事も書きたいのですが・・・しばし待たれよ。
ちょっと Linux マシンをひっぱり出せなかったので、MinGW+MSYS 環境で実験です。
一応ビルドできまして、AN1388 の USB HID bootloader も
ちゃんとビルドできたのできっと大丈夫でしょう。
前回細かくやったので、今回は変更点だけかいつまんで説明します。
ビルドを始めて悩むのは gcc にたどり着く前、gmp の configure でコケる点でしょうか?
これは configure の中の path 解決がうまくいかない問題で、
MinGW+MSYS でビルドする際の固有のバグみたいです。
configure をテキストエディタで開き、置換機能にて置き換えます。
検索するワード 「#include "$srcdir」
置き換えるワード 「#include "$(cd $srcdir; pwd -W)」
簡単に解説すると、$srcdir は Linux で使われる POSIX 準拠のパスに展開されます。
しかし、MinGW は Windows ネイティブなので POSIX 系のパスを解読できません。
惜しいんですよね、コンパイルオプションで -I/foo/bar とかは OK なのに、
#include "/foo/bar/hoge.h" は NG なんですって。
gmp の configure は後者を生成していしまうので、Windows 形式の絶対パスで指定するか、
同じく Windows 形式の絶対パスを自動で作らせるか、という選択ができます。
私は後者を選びました、説明しやすいですしね。
やってることは $srcdir に移動して カレントディレクトリ名を取得しているだけです。
pwd のオプション -W は MSYS 専用のオプションで、パスを Windows 形式に直してくれるそうです。
もう一つ gcc のなかでも似たような問題に嵌ります。
こちらはシェルスクリプトの方で、ソースディレクトリを相対パスで指定することで対応しました。
最後に libstdc++-v3 のインストールでコケてますが、
もともとビルドしてないのでスルーしてください。
必要なバイナリーはすべてそろいます。
例のものはいつもの置き場に置いておきます。
※リンク切れを修正しました。2016.04.08(fri)
□2014.12.26(fri) 追記。
○現在、マイコン初心者さんからコメントいただいた通り、
PPL の Configure 最中に conftest.exe が異常終了するようです。
黙って conftest.exe の終了を選ぶと、そのままビルドは継続され、成果物が得られてしまうので
しばらくスルーの方向でいいのかなぁ?なんて思ってます。
M4 が足りない旨のエラーで止まってしまう件は、残念ながら再現しませんでした。
こちらもしばらくスルーいたします。
○なんと マイコン風雲録 さんのブログで紹介と検証をしていただきました。
PIC32MX: XC32の制限なし版(独自ビルド版)を無料で使うメモ
そこによると -Os や -mips16 オプションを気兼ねなく使うには
まだまだいろんな問題点があるみたいです。
ホントはこの辺の検証まで私がやるべきなんでしょうけど、
すみません、MIPS アセンブラとか言われてもチンプンカンプンでして(汗
その中の * あれっ?! の項の
(3) 標準ライブラリは、mips16版を指定してもmips32版がリンクされてしまう様だ。
の件ですが、gcc の configre のオプションで --disable-multilib してました!
すみません。m(_ _)m
素直に -enable-multilib にしたところ問題なくリンクできるようになりました。
置き場の方も更新しておきましたので、すでにダウンロードされてる方は日付を確認してください。
私の方でもどいうオプションか全く理解しないまま使用したのでちょっと解説すると、
gcc にはオプションによってライブラリー(のパス)を切り替える機能があるらしいです。
今回の例で行くと -O3, -Os や -mips16 -mmicromips とかで切り替えます。
などといった対応になっているようです。
□2015.10.07(wed) 追記。
実は野良ビルドした XC32 は MPLAB X IDE に独自追加することができます。
あまり解説しているところがないので、知らなかった人も多いのではないでしょうか?
MPLAB X IDE のメニューから
↓
tool
↓
Option
↓
Enbedded
↓
Build Tools タブを開き、Add ボタン押します。
Base Directory の欄の右にある Browse ボタンを押し、コンパイラの位置を指定します。
私の場合は C:\Devz\mplabxc32-133-mingw32 なのですが、
ここで指定するのは C:\Devz\mplabxc32-133-mingw32\bin フォルダです。
開く を押し、うまく認識されると Version 欄が XC32 にるので OK を押します。
Toolchain 欄に追加されているのを確認します。
ディフォルトコンパイラとして使用したい場合は、いま追加したコンパイラを選択、
バージョンとパスを確認し Default ボタンを押せば完了です。
□2018.06.17(sun) 追記
v2.05 を Ubuntu でクロスビルドしました。こちら
そういう時に限って他のことがやりたくなる絶賛逃避中のヌキヲです。
今回はタイトルの通り、PIC32MX PIC32MZ 用のコンパイラをバージョンアップしました。
ホントは順番的に MPLAB XC16 の記事も書きたいのですが・・・しばし待たれよ。
ちょっと Linux マシンをひっぱり出せなかったので、MinGW+MSYS 環境で実験です。
一応ビルドできまして、AN1388 の USB HID bootloader も
ちゃんとビルドできたのできっと大丈夫でしょう。
前回細かくやったので、今回は変更点だけかいつまんで説明します。
ビルドを始めて悩むのは gcc にたどり着く前、gmp の configure でコケる点でしょうか?
これは configure の中の path 解決がうまくいかない問題で、
MinGW+MSYS でビルドする際の固有のバグみたいです。
configure をテキストエディタで開き、置換機能にて置き換えます。
検索するワード 「#include "$srcdir」
置き換えるワード 「#include "$(cd $srcdir; pwd -W)」
簡単に解説すると、$srcdir は Linux で使われる POSIX 準拠のパスに展開されます。
しかし、MinGW は Windows ネイティブなので POSIX 系のパスを解読できません。
惜しいんですよね、コンパイルオプションで -I/foo/bar とかは OK なのに、
#include "/foo/bar/hoge.h" は NG なんですって。
gmp の configure は後者を生成していしまうので、Windows 形式の絶対パスで指定するか、
同じく Windows 形式の絶対パスを自動で作らせるか、という選択ができます。
私は後者を選びました、説明しやすいですしね。
やってることは $srcdir に移動して カレントディレクトリ名を取得しているだけです。
pwd のオプション -W は MSYS 専用のオプションで、パスを Windows 形式に直してくれるそうです。
もう一つ gcc のなかでも似たような問題に嵌ります。
こちらはシェルスクリプトの方で、ソースディレクトリを相対パスで指定することで対応しました。
最後に libstdc++-v3 のインストールでコケてますが、
もともとビルドしてないのでスルーしてください。
必要なバイナリーはすべてそろいます。
例のものはいつもの置き場に置いておきます。
※リンク切れを修正しました。2016.04.08(fri)
□2014.12.26(fri) 追記。
○現在、マイコン初心者さんからコメントいただいた通り、
PPL の Configure 最中に conftest.exe が異常終了するようです。
黙って conftest.exe の終了を選ぶと、そのままビルドは継続され、成果物が得られてしまうので
しばらくスルーの方向でいいのかなぁ?なんて思ってます。
M4 が足りない旨のエラーで止まってしまう件は、残念ながら再現しませんでした。
こちらもしばらくスルーいたします。
○なんと マイコン風雲録 さんのブログで紹介と検証をしていただきました。
PIC32MX: XC32の制限なし版(独自ビルド版)を無料で使うメモ
そこによると -Os や -mips16 オプションを気兼ねなく使うには
まだまだいろんな問題点があるみたいです。
ホントはこの辺の検証まで私がやるべきなんでしょうけど、
すみません、MIPS アセンブラとか言われてもチンプンカンプンでして(汗
その中の * あれっ?! の項の
(3) 標準ライブラリは、mips16版を指定してもmips32版がリンクされてしまう様だ。
の件ですが、gcc の configre のオプションで --disable-multilib してました!
すみません。m(_ _)m
素直に -enable-multilib にしたところ問題なくリンクできるようになりました。
置き場の方も更新しておきましたので、すでにダウンロードされてる方は日付を確認してください。
私の方でもどいうオプションか全く理解しないまま使用したのでちょっと解説すると、
gcc にはオプションによってライブラリー(のパス)を切り替える機能があるらしいです。
今回の例で行くと -O3, -Os や -mips16 -mmicromips とかで切り替えます。
/pic32mx/lib/. (default) /pic32mx/lib/size (-Os) /pic32mx/lib/speed (-O3) /pic32mx/lib/mips16 (-mips16) /pic32mx/lib/mips16/size (-mips16, -Os) /pic32mx/lib/mips16/speed (-mips16, -O3)
などといった対応になっているようです。
□2015.10.07(wed) 追記。
実は野良ビルドした XC32 は MPLAB X IDE に独自追加することができます。
あまり解説しているところがないので、知らなかった人も多いのではないでしょうか?
MPLAB X IDE のメニューから
↓
tool
↓
Option
↓
Enbedded
↓
Build Tools タブを開き、Add ボタン押します。
Base Directory の欄の右にある Browse ボタンを押し、コンパイラの位置を指定します。
私の場合は C:\Devz\mplabxc32-133-mingw32 なのですが、
ここで指定するのは C:\Devz\mplabxc32-133-mingw32\bin フォルダです。
開く を押し、うまく認識されると Version 欄が XC32 にるので OK を押します。
Toolchain 欄に追加されているのを確認します。
ディフォルトコンパイラとして使用したい場合は、いま追加したコンパイラを選択、
バージョンとパスを確認し Default ボタンを押せば完了です。
□2018.06.17(sun) 追記
v2.05 を Ubuntu でクロスビルドしました。こちら
資金がとぼしく
あまり大容量で高額なマイコンが買えないので
PIC32MX220や120などを利用しています
野良ビルドによる
最適化オプションの限定解除
凄く参考になります
でも私の環境ではどうもうまくいかず。
PPLのMAKEすらとうりません
開発環境はwindows7 64bit
mingw+msys
でやっています。
エラーログは以下に掲載
それとPPLの途中でconftest.exeが異常終了との
windows7からのメッセージが表示さます。
config.status: creating config.h
config.status: config.h is unchanged
config.status: executing depfiles commands
config.status: executing libtool commands
cd /home/kumasan/work/src/ppl && /bin/sh /home/kumasan/work/src/ppl/missing --run autoconf
/c/MinGW/bin/autoconf-2.68: line 501: /mingw/bin/autom4te-2.68: No such file or directory
/c/MinGW/bin/autoconf-2.68: line 501: exec: /mingw/bin/autom4te-2.68: cannot execute: No such file or directory
make: *** [/home/kumasan/work/src/ppl/configure] Error 1
cd /home/kumasan/work/src/ppl && /bin/sh /home/kumasan/work/src/ppl/missing --run autoconf
/c/MinGW/bin/autoconf-2.68: line 501: /mingw/bin/autom4te-2.68: No such file or directory
/c/MinGW/bin/autoconf-2.68: line 501: exec: /mingw/bin/autom4te-2.68: cannot execute: No such file or directory
make: *** [/home/kumasan/work/src/ppl/configure] Error 1
エラーメッセージを読むと MSYS の m4 というパッケージが足りない予感です。
gcc のビルドには m4 以外のもいろいろ必要なパッケージがあります。
私が MinGW+MSYS をインストールしたのはずいぶん前のことで、
現在ではかなり様相が違うようなのですが、
マイコン初心者さんがインストールした際に選んだ
パッケージのセットが足りなかったのかもしれません。
一個ずつ足りないものを都度インストールしていってもいいのですが、
さすがに骨が折れると思います。
もし MinGW+MSYS の現在のバージョンにこだわらなければ、
すべてアップデートして、足りないパッケージセットごと
インストールしてしまうと楽かもしれませんね。
MinGW のシェルを起動して以下のようにコマンド入力します。
mingw-get update
mingw-get upgrade
mingw-get install msys-base
mingw-get install mingw-developer-toolkit
上の2行で最新に更新し、下の2行で足りないパッケージの追加です。
もし既にインストールされている旨のエラーが出たらそのままスキップしてください。
上記のコマンド実行しましたが
何も変化なく
いろいろ調べてみてわかったことは
どうもM4がうまく機能しないみたいです
この記事にも書いてある
不具合なども関係しているみたいです
outoconf,autom4teなどで
絶対アドレスでのアクセスで/cがぬけていました
その後も何箇所か変更したのですが
同じような不具合でストップ中です
なにか環境にかんする不具合なのかな?
と思っています
どちらにしても M4 が見つからないのに違いはなさそうですが、
普通なら /mingw にはエイリアスが切ってありそのままアクセスできるはずです。
それができない環境というと、MinGW のシェルではなく、
Windows のコマンドプロンプトからビルドしてるとか
くらいしか思いつかないのですが、そんなことはしてないですよね?
それでもPPLは途中でおわっているのに
何とか生産物ができたのですが
ヌキヲさんのと少しおおきさが・・・小さい
PIC32MX220F032Bの
USBホストプログラム
コンパイル
コンパイル中不要なメッセージがでてるけど
正常に終了HEX生成
書き込み動作テスト正常に機能しました
??
なんか不思議
一応これで一件落着?
いろいろありがとうございました
ホントに不思議ですね。
お役にたてなくてすみません。
で、ちょっと時間が取れたので mingw-get でパッケージ類を更新して試したところ、
私の環境でも再現されました。
PPL の configure で checking if the compiler has the remainder bug... yes
という項目で conftest が落ちてますが・・・まだ詳細不明です。
また時間が取れたらもう少し調べて記事に反映しますね。
報告ありがとうございました。
私の方では全く気付いてなかったので助かります。
記事中のリンクを修正しましたのでご確認ください。
MinGW環境で1.33のコンパイルは成功しました。
ところで現在最新の1.40をチャレンジしているのですが少し変わっているようです。
1.33はMinGWにg++がなくてもよかったのですが1.40では必須のようです。
1.40は最後の方でbuild-mingw32/gcc/gccにMakefileが生成されていなくて「No rule to make target `install'」のエラーでストップします。
build-mingw32/gcc/gcc/のコンフィグに失敗しているようです。
1.33のビルド成功良かったですね。
1.40は需要をあまり感じてなくてまだ試してません。
今度時間の取れるときにまた試したいと思います。
エラーメッセ時の方ですが、Makefile 中のターゲット install が無いと言われており、Makefile は存在しそうです。
install の前の make (all?) の段階で何かコケてませんか?