差分表示
#freeze
** lcc
** lcc メモ
lcc は
lcc, A Retargetable Compiler for ANSI C~
https://sites.google.com/site/lccretargetablecompiler/
で配布されてるANSI-Cコンパイラで、設計&実装を解説した書籍もでているよう
です。というか書籍のサンプル/教材としての側面が強そうに思えます。
(実用品なら作りこむべきところを簡易(単純)なままにしているし)
ライセンスはわりと緩めだったり古くからソース公開されてたりするためか、
lcc 派生(フリー&商用)コンパイラの lcc-win32 や Pelles-C
が出ていたりします。
lcc-winやPelles-C は結構作り込まれていますが、もともとの lcc 自体はすごく
pure な ansi-c89 コンパイラのままです。c99のごく一部 //コメントと long long
は追加されていますが、long long は x86用だと 32ビット整数(alpha用は64bit)
だし、他は inline さえ無い状態です。
lcc自体は リンカやライブラリアン、標準ライブラリを提供しておらず、それらは
既存のものを流用しており、コンパイラドライバではそれらをソースに直書きして
います。unix系の場合はos標準搭載のcコンパイラに寄生で もとより構成がある
程度決まってるので問題少なそうですが、win用はvc(5)だけで、今使おうとすると
手直しが必要...
~
で、Winではコンパイラ/ヴァージョンごとフォルダ構成・設定
オプションの幅があるのでソース直書でなく定義ファイルを読み込むように修正
してみました。~
[[これ>http://www.6809.net/tenk/html/lib/lcc42mod20130620.zip]]
(ソースのみ 要コンパイル)
寄生対象として、vc7.1~VC11、borland-c (5.5.1+tasm32|jwasm) が可能です.~
lcc自体のコンパイルは各種 Cコンパイラで可能ですが、lccが生成するアセンブラソースや C ABI の都合、寄生対象は ms 互換の必要あり。
でも dll(import/export)未対応なので vc の Express版は 寄生先としては不可です。
一応無料ツールのみとしては bcc32 5.5.1 と JWasm の組み合わせは可能でした。
できた lcc で何かをコンパイルする時、新し目のVCだとヘッダでinlineや拡張で
通らないことがあります。vc7.1 や bcc 5.5.1 のような古めのコンパイラの
ほうが無難そうです。
※ ヘッダ寄生の辻褄合わせはたいてい #define マクロ定義で行いますが、
long long については たとえ32bitでも認識してくれないと long long を
使った宣言のエラー回避できないので必須だったのだな、と納得でした。