**If you cannot read Japanese, please read how2build_qt.txt.
***That article will come , but still not wrote.

***If you can tranlate Japanese to any languages, please
***translate this, publish and pull request to my GITHUB. 

Common Source Code Project for Qt：ビルド方法
                                        Feb 25, 2016 K.Ohta
                           <whatisthis.sowhat_at_gmail.com>

1.はじめに
　Common Source Code Project(CSP)をQtに移植する上で、ビルドを
する方法・特にMinGWを使うときによくわからないという声がありま
したので、少し書いていきます。

2.用意するもの
・Windowsの方は、MinGWが必要です…が、Qtのオープンソース版
　インストーラ[1]にはMinGW(Qt5.5.1の場合にはGCC4.9.2）が
　付いてきますが、しかし、中途半端。
・GCC (LLVM CLANGだとQtと相性が良くないかもしれない）
・Qt5.1以上、勿論ヘッダなどの開発ファイルも。
・OpenGL 2.1以上が動く環境。Windows用Qtにはソフトウェアレンダラが付
　いてきます。
・CMake[2] 2.8以上
・libSDL2[3]
・もし可能ならば、CCACHEを使うと若干速くできます[4]
・git[5]があれば、ソースコードをリポジトリ[6]からダウンロードするこ
　とが出来ます。
・emufm7の一部のコードはテキストファイルからgawkでソースコード
　に落としてます。ただし、ソースツリーには生成後のファイルが
　含まれています。

[1] http://www.qt.io/download-open-source/ でWindows用(32/64bit)の
　　インストーラを使ってみてください
[2] http://cmake.org/
[3] http://libsdl.org/
[4] https://ccache.samba.org/
[5] https://git-scm.com/
[6] https://github.com/Artanejp/common_source_project-fm7
    https://www.pikacode.com/Artanejp/common_source_project-fm7/
    
　これらのものは、GNU/LinuxなどやMinGWならば、パッケージ管理ソフト
で大半を入れられるでしょう。

3.ビルド方法
  3-1.基本的な方法
　　ソースツリーを${SRCDIR}に展開しておいて、
      $ cd ${SRCDIR}/source/build-cmake/{VM名}/
      $ mkdir -p build
      $ cd build
      $ cmake .. ※[7]
      $ make
  　うまく行ったら、
      $ sudo make install

[7] 実際には、CMakeのCursesGUI版のccmakeを使ったほうが設定が便利です。

   3-2.MinGWの場合
     　基本的には同じですが、Qtのwindeployqt.exeを使うと、必要なQtラ
     イブラリをコピーしてくれます。
     　ただし、libstdc関連とlibSDL2とOpenGL関係のDLLは手動でコピーす
     る必要があります。
     　公式のMinGWにはCMakeはないので、[8]からダウンロードしてください。
     
     a.MinGWをインストールします。
     　mingw32-gccとmingw32-g++とmingw32-binutils、
     　mingw-developer-toolkitとmingw32-pthreds-w32
     　を必ずインストールしてください。
     
     b.MSYS Bashのショートカットをデスクトップやメニューなどに登録して
     　おきましょう。デフォルトのインストール先ならば、
     　C:\MinGW\msys\1.0\msys.bat です。
     
     c.Qtをインストールします。
     　[1]からダウンロードしたインストーラを起動し、mingw toolchainを
     　含めた形でインストールします。
     
     d.CMakeをインストールします。
     　パスにCMakeが含まれるようにするか？とインストーラが訊いてくる
     　ので、チェックしてください。
     
     e.必要ならば、Gitをインストールします。
     
     f.C:\MinGW\msys\1.0\home\{ユーザ名}\.profile　を編集します。
     　この時、メモ帳で行うと問題が出るので、vimを使います。
     　MSYS BASH上から
       $ vim ~/.profile
       以下の行を付け加えてください。
           export PATH=/c/MinGw/bin:$PATH:/c/Qt/Qt5.5.1/5.5/mingw492_32/bin
       終わったら、[ESC]→ZZ コマンドで、書き込みます。
       
     g.SDL2をインストールします。(参考：[9]）
     　ダウンロードしてきたSDL2の"Windows Development MinGW"のtarball
       を展開して、インストールします。
       $ tar xf SDL2-devel-2.0.4-mingw.tar.gz
       $ cd SDL2-2.0.4
       $ mingw32-make install-package arch=i686-w64-mingw32 prefix=/c/mingw
       
     h.ここまで来れたら、MSYS BASHを再度起動します。
     　そして、git cloneで取ってきたソースやgithubにあるリリースページの
       ソースコードを展開します。ここでは、フルパスを${SRCDIR}と記述
       します。
       
     i.ビルドします。
       $ cd ${SRCDIR}
       $ cd source/build-cmake/${VM名}
       $ mkdir build-win32
       $ cd build-win32
       $ cmake .. -G "MinGW Makefiles"
        ※[10]
       $ mingw32-make

     　※注意点：Windwos上の(ネィティブの)MinGWでは、makeではなく、mingw32-make
     　　　　　　等を使います。Windows側がmakeを持ってて、しかもこれがunix形式の
     　　　　　　Makefileを真面目に解釈してくれないという極悪仕様ですので…
     
     j.う　ま　く　ビ　ル　ド　で　き　る　こ　と　を　祈　り　ま　す
     
     k.ビルドできたら、動かすためのディレクトリーにemu${VM名}.exeを
     　コピーします。
     
     l.コピーした先のディレクトリィに移動した上で、
       $ windeployqt.exe --release emu${VM名}.exe
       とすると、リリースモードで必要なQtのライブラリをコピーしてく
       れますが、libSDL2とlibpthreadとlibgcc_sなどを手動でコピー
       しないと、Windowsのエクスプローラからは起動できません(；´Д｀)
       なお、CMakeのビルドタイプにDebugやRelwithdebinfoを指定した
       時は、
       $ windeployqt.exe --debug emu${VM名}.exe
       としましょう。
       その後、以下のファイルをC:\Qt\Qt5.5.1\mingw492_32\bin (など）
       か、もしくはC:\MinGW\bin から、exeを置いたディレクトリにコピーします。
       　icudt54.dll
       　icuin54.dll
       　icuuc54.dll
       　libgcc_s_dw2-1.dll
       　libstdc++-6.dll
       　libwinpthread-1.dll
       その上で、 SDL2.dll (C:\MinGW\bin にあるはず)も、このディレクトリに
       コピーします。
     
[8] http://cmake.org/download/
[9] https://gist.github.com/Hamayama/155b5557db31334ce492
[10] 実際には、一旦CMakeを動かした後で、cmake-guiを起動して細かい設定を
　　 するほうがベターです。

   3-3.クロスビルド (GNU/LinuxなどでWindows用のビルドを行う）
   　ここでは、GNU/Linuxホストで、Windows向けのCSPをクロスビルドする方法を
   簡単に記述しておきます。
   　Android等向けのARMビルドやその他のOS向けビルドについての参考にもなるで
   しょう。

　　　a.クロスコンパイラのインストール
　　　　大抵の場合、MinGW向けのクロスGCC Toolchainがあるので、それを
　　　インストールします。

　　　b.Wineのインストール
　　　　mocなどはWindows用を使う必要があるので、Wineをインストールしま
　　　す。
　　　　その上で、exe拡張子のファイルをWine経由で起動できるように
　　　binfmt-supportなどのサポートスクリプトにある、upda-ebinfmtsで設定
　　　します。[11]
　　　$ sudo update-binfmts --install Win32Exec /usr/bin/wine --magic "MZ"
　　　で良かったと思います（うろおぼえでごめんなさい）

[11] http://d.hatena.ne.jp/kakurasan/20110909/p1 など参考に。
　　　
　　　c.Qt for Windowsのインストール
　　　　[1]のURLから、Windows用インストーラを落とします。
　　　　そして、
　　　　$ sudo wine ./qt-opensource-foo.exe
　　　　とします。
　　　　そうするとQtのインストーラ画面が出てくるので、
　　　　Z:\usr\local\i586-mingw-msvc
　　　　をインストール先に指定してください。
	この時に、
	$ sudo chmod ugo+x /usr/local/i586-mingw-msvc/5.5/mingw492_32/bin/*.exe
	などとして、Windows用Qt添付のツールを直接起動できるようにしましょう。
	　　　　
　　　d.libSDL2のインストール
　　　　libSDL2も、Windows用のものをインストールせねばなりません。
　　　　[3]から、SDL2のWindows用(Development用)をダウンロードして、
　　　　/usr/local/i586-mingw-msvc/ 辺りに展開しましょう。

　　　e.クロスビルド
　　　　CMakeのToolChain機能を使いますが、色々と設定がややこしいので、
　　　既に記述したものが用意してあります。
　　　　${SRCDIR}/source/build-cmake/cmake/toolchain_mingw_cross_linux.cmake
　　　　このファイルの記述をいじって、
　      $ cd ${SRCDIR}/source/build-cmake/{VM名}/
 　     $ mkdir -p build
  　    $ cd build
   　   $ cmake .. -DCMAKE_TOOLCHAIN_FILE=../../cmake/toolchain_mingw_cross_linux.cmake
    　  $ make
    　　で大丈夫なはずです。
    
　　3-3.楽をしよう
　　　ここまでの記述では、仮想マシン単位で手作業のビルドをしてきました。
　　　しかし、一度下準備ができたのに、毎回毎回では厄介です。
　　　故に、バッチファイル(Bashスクリプト)が用意されています。
　　　　・${SRCDIR}/source/build-cmake/config_build.sh : 通常のビルド
　　　　・${SRCDIR}/source/build-cmake/config_build_cross_win32.sh
　　　　　: GNU/Linux上でMinGW32(Windows)用のファイルをビルドする
　　　　　スクリプト
	・${SRCDIR}/source/build-cmake/config_build_mingw.sh
	　: Windows上のMinGWでMinGW用のファイルをビルドするスクリプト
	
　　　config_build.sh は、buildvars.dat と言うファイルに設定を書いていきます。
　　　config_build_mingw.sh は、buildvars_mingw.dat と言うファイルに設定を
　　　書いていきます。

　　　使い方は、
　　　$ ./${スクリプト名} ${VM名1} ${VM名2} ... ${VM名n}
　　　です。
　　　CMakeからMakefilesを生成→make→インストール→make clean
　　　を全自動で行います。

　　　make結果については、 ${VM名}/build/make.log (MinGW向けクロスビルドでは
　　　${VM名}/build-win32/build.log ）に記録されています。

　　　Windows向けビルドについては、 ${SRCDIR}/source/build-cmake/bin-win32/
　　　に出来上がったバイナリをコピーして、ビルド作業ディレクトリをcleanします。

　　　バッチビルドについては、Midnight Commander (mc)を使うと、非常に楽です。
　　　詳しくは、 https://www.midnight-commander.org/ を。
　　　Windowsの非公式ビルドが、https://sourceforge.net/projects/mcwin32/ に
　　　ありますので、インストーラを使ってインストールしましょう。
