2010年05月28日

Portable C Compiler をビルドしてみる

最近では gcc、clang に押され気味 (?) ですが、老舗の C コンパイラとして PCC (Portable C Compiler) があります。

pcc - pcc portable c compiler

http://ja.wikipedia.org/wiki/Portable_C_Compiler

なぜいまPCC? - 高速さとクオリティの高いコード出力が魅力 (2007/10/16)

とりあえずビルドしてみましょう。



Windows ターゲットの場合、Visual Studio と flex/bison が必要とのこと。

building - pcc portable c compiler

とりあえず Visual Studio 2008 と、MinGW の flex/bison で試してみます。

bison.simple というファイルが何なのかよくわからないのですが、少なくとも bison 1.4.1 には入っていませんでした。

GnuWin32 のサイトから、bison-1.35-4-bin.zip を持ってきて展開したところ、share/bison 以下に bison.simple と bison.hairy がありました。

pcc-100525.tgz で試してみます。

tarball の展開には MSYS の tar を使っていますが、何でも良いと思います。(以下は Visual Studio 2008 コマンドプロンプトなので、MSYS のツールを使用する際には絶対パスで指定しています。もちろん PATH を通しても良いのですが、今は tar.exe しか使わないので。)

Setting environment for using Microsoft Visual Studio 2008 x86 tools.

c:\Program Files\Microsoft Visual Studio 9.0\VC>path c:\mingw\bin;%path%

c:\Program Files\Microsoft Visual Studio 9.0\VC>flex --version
flex version 2.5.4

c:\Program Files\Microsoft Visual Studio 9.0\VC>bison --version
bison (GNU Bison) 2.1
(省略)

c:\Program Files\Microsoft Visual Studio 9.0\VC>cd c:\work\pcc

C:\work\pcc>c:\msys\1.0\bin\tar.exe zxvf pcc-100525.tgz

C:\work\pcc>cd pcc-cvs-100524\os\win32

os/win32 に、bison.simple をコピーしておきます。

これで build.bat を /cl オプション(VC++ でビルドする場合)で実行してみると、_vsnprintf() 周りでエラーが出ます。

C:\work\pcc\pcc-100525\os\win32>cl.exe -D__MSC__ -o pcc.exe -DWIN32 -DGCC_COMPAT
 -DPCC_DEBUG -DCPP_DEBUG -DTARGOS=win32 -Dos_win32 -Dmach_i386 -DLIBEXECDIR="" -
D_CRT_SECURE_NO_WARNINGS /nologo /Zi /MT /W2 -I..\..\cc\cc -I..\..\os\win32 -I..
\..\arch\i386 -I..\..\mip ..\..\cc\cc\cc.c ..\..\mip\compat.c
cl : コマンド ライン warning D9035 : オプション 'o' の使用は現在推奨されていませ
ん。今後のバージョンからは削除されます。
cc.c
c:\Program Files\Microsoft Visual Studio 9.0\VC\INCLUDE\stdio.h(358) : error C31
63: '_vsnprintf': 属性が前の宣言と整合しません
        c:\Program Files\Microsoft Visual Studio 9.0\VC\INCLUDE\stdio.h(350) : '
_vsnprintf' の宣言を確認してください。
compat.c
c:\Program Files\Microsoft Visual Studio 9.0\VC\INCLUDE\stdio.h(358) : error C31
63: '_vsnprintf': 属性が前の宣言と整合しません
        c:\Program Files\Microsoft Visual Studio 9.0\VC\INCLUDE\stdio.h(350) : '
_vsnprintf' の宣言を確認してください。

もともと Visual Studio 7 でしか確認されていないようですし、あまりメンテナンスされていない感じです。

そもそも後半の方で、pcc-libs というディレクトリ以下のソースコードが軒並み Not Found になっています。ファイル名で検索してみても、どこにもそんなディレクトリやファイルはありません。どうも不安です。

キーワードで検索してみたところ、VS 2008 でビルドに成功している方がいました。

いきちがいのぷろぐらむあ 雑記/2010-3-9[火] マイナーなCコンパイラをちょっと触る

なるほど、pcc-libs は pcc とは別にソースコードが必要なんですね。

pcc-libs-100525.tgz をダウンロードして、同様に展開しました。

上記記事を参考に、os/win32/config.h を修正し、ビルド。なるほど、先に stdio.h をインクルードしておかないと、vsnprintf() が置換されてしまってエラーになるんですね。

C:\work\pcc>c:\msys\1.0\bin\tar.exe zxvf pcc-libs-100525.tgz

C:\work\pcc>cd pcc-100525\os\win32

C:\work\pcc\pcc-100525\os\win32>fc config.h config.h.orig
ファイル config.h と CONFIG.H.ORIG を比較しています
***** config.h
#if !defined(vsnprintf)
#include <stdio.h>
#define vsnprintf _vsnprintf
***** CONFIG.H.ORIG
#if !defined(vsnprintf)
#define vsnprintf _vsnprintf
*****

C:\work\pcc\pcc-100525\os\win32>build /cl /pccsrcdir C:\work\pcc\pcc-100525 /pcclibssrcdir c:\work\pcc\pcc-libs-100525

なにやら大量の警告が出ていますが、一応 pcc.exe や libpcc.a はできてるみたいです。ビルドはすぐ終わります。私の環境では 30 秒もかかりませんでした。

C:\work\pcc\pcc-100525\os\win32>dir /b *.exe *.a
mkext.exe
pcc.exe
libpcc.a

ちょっと長くなってしまいましたので、今回はここまでです。

追記: 実は上手く行ってませんでした。すいません…

PCC を使ってみる。(失敗)



トラックバックURL

コメントする

名前
 
  絵文字
 
 
記事検索
最新コメント
アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

QRコード
QRコード