LinuxMint上にWindows64bit向けFreePascalクロスコンパイラを動作させる環境を作ったよ その2

LinuxMint上にWindows64bit向けFreePascalクロスコンパイラを動作させる環境を作ったよ - 四角革命前夜の続き。実はもっと簡単に構築できたみたい……!
環境:LinuxMint 12 64bit

下準備

$ mkdir -p $HOME/Binary/ $HOME/Repos/src/

前回と同じく、生成するバイナリ類を$HOME/Binary/に、ソース類を$HOME/Repos/src/に置きます。


http://sourceforge.net/projects/freepascal/files/からダウンロードするもの:

  • fpc-2.6.0.source.tar.gz
  • fpc-2.6.0.x86_64-linux.tar


ここが前回と違うところ。

$ sudo apt-get install -y mingw-w64

これでコンパイル済みのWindows 32/64bit向けbinutilsgccと.hなどがインストールされます。
前回の苦労はなんだったのか……!


もうちょっと説明するとmingw-w64はメタパッケージで、

がインストールされます。gcc-mingw64もメタパッケージで、

とか、その他いろいろなものが入ります。
build-essentialとか入れてる場合(というか入ってないと困るんだけど)は取得するものもそんなに多くないはず。

FreePascalのインストール

先にFreePascalをインストール。これも前回と同じ。

$ cd ~/Repos/src/
$ tar xvf fpc-2.6.0.x86_64-linux.tar
$ cd fpc-2.6.0.x86_64-linux/
$ sh install.sh
Install prefix (/usr or /usr/local)  [/home/sasaplus1/fpc-2.6.0] : /home/sasaplus1/Binary/fpc-2.6.0
Install Textmode IDE (Y/n) ? n
Install FCL (Y/n) ? y
Install packages (Y/n) ? y
Install documentation (Y/n) ? y
Install demos (Y/n) ? y
$ export PATH=$HOME/Binary/fpc-2.6.0/bin:$PATH

FreePascalのコンパイル

FreePacalをクロスコンパイルします。.exeなコンパイラとか生成されますが、欲しいのはunits以下だけです。

$ cd ~/Repos/src/
$ tar xvfz fpc-2.6.0.source.tar.gz
$ cd fpc-2.6.0/
$ make clean all CROSSBINDIR=/usr/bin OS_TARGET=win64 CPU_TARGET=x86_64 BINUTILSPREFIX=x86_64-w64-mingw32- OPT="-Xd -Xt -gl"
$ make install INSTALL_PREFIX=$HOME/Binary/fpc-win64 CROSSBINDIR=/usr/bin OS_TARGET=win64 CPU_TARGET=x86_64 BINUTILSPREFIX=x86_64-w64-mingw32- OPT="-Xd -Xt -gl"

コンパイルしてみる

実際にコンパイルしてみる。

$ vim asdf.lpr
program asdf;

begin
  WriteLn('Hello, World!');
end.
$ fpc asdf.lpr -Fu$HOME/Binary/fpc-win64/lib/fpc/2.6.0/units/x86_64-win64/rtl -Twin64 -XPx86_64-w64-mingw32-
$ objdump -a asdf.exe

asdf.exe:     file format pei-x86-64
asdf.exe

できたっぽい。


ついでにリソースも。
というか前回の方法でリソースがコンパイルできなかったからやり直したんだけど……

$ vim qwerty.rc
#include <winver.h>
1 VERSIONINFO
FILEVERSION 0,0,1,0
PRODUCTVERSION 0,0,1,0
FILEOS VOS_NT_WINDOWS32
FILETYPE VFT_APP
BEGIN
	BLOCK "StringFileInfo"
	BEGIN
		BLOCK "041103A4"
		BEGIN
			VALUE "FileDescription", "asdf\0"
			VALUE "LegalCopyright", "CopyRight(C) 2011 sasa+1\0"
			VALUE "FileVersion", "0.0.1\0"
			VALUE "OriginalFilename", "asdf.exe\0"
		END
	END
	BLOCK "VarFileInfo"
	BEGIN
		VALUE "Translation", 0x0411, 0x03A4
	END
END
$ x86_64-w64-mingw32-windres -i qwerty.rc -o qwerty.res -I/usr/i686-w64-mingw32/include

できたっぽい。


前回の苦労はなんだったのか……