(GitHub にミラーリングされています)
cproc
QBE をバックエンドとして使用する C11 コンパイラです。 ISC ライセンスに基づいてリリースされています。
一部の C23 機能と GNU C 拡張機能も実装されています。
やるべきことはまだたくさんありますが、現在、言語の大部分が実装されており、それ自体、mcpp、gcc 4.7、binutils などを含むソフトウェアを構築できます。
これは、8cc、c、lacc、scc など、他のいくつかの小規模な C コンパイラーからインスピレーションを得ています。
コンパイラ自体は標準 C99 で記述されており、準拠する任意の C99 コンパイラを使用して構築できます。
POSIX ドライバーは POSIX.1-2008 インターフェイスに依存しており、 Makefile
は POSIX 互換の make(1) が必要です。
実行時には、ターゲット システム用の QBE、アセンブラ、およびリンカが必要になります。プリプロセッサはまだ実装されていないため、現在は外部プリプロセッサも必要です。
QBE でサポートされているすべてのアーキテクチャが動作するはずです (現在、x86_64、aarch64、および riscv64)。
次のターゲットは継続的ビルドによってテストされ、ブートストラップしてすべてのテストに合格することがわかっています。
x86_64-linux-musl
x86_64-linux-gnu
x86_64-freebsd
aarch64-linux-musl
aarch64-linux-gnu
riscv64-linux-gnu
./configure
を実行して、システムに適したconfig.h
およびconfig.mk
を作成します。ご使用のシステムが構成スクリプトでサポートされていない場合は、これらのファイルを手動で作成できます。 config.h
いくつかの文字列配列 ( static char *[]
) を定義する必要があります。
startfiles
: リンク コマンドの開始時にリンカーに渡すオブジェクト。endfiles
: リンク コマンド (libc を含む) の最後でリンカーに渡すオブジェクト。preprocesscmd
: プリプロセッサ コマンド、およびターゲット システムに必要なフラグ。codegencmd
: QBE コマンド、および場合によっては明示的なターゲット フラグ。assemblecmd
: アセンブラコマンド。linkcmd
: リンカコマンド。適切なCC
、 CFLAGS
およびLDFLAGS
を使用して環境またはconfig.mk
カスタマイズすることもできます。
これが完了したら、次のようにビルドできます
make
Makefile
ブートストラップに使用できる他のターゲットがいくつか含まれています。これらのターゲットには、 config.h
で指定されたツールを実行する機能が必要です。
stage2
: 初期 ( stage1
) 出力を使用してコンパイラーをビルドします。stage3
: stage2
出力を使用してコンパイラをビルドします。bootstrap
: stage2
およびstage3
コンパイラをビルドし、それらがバイト単位で同一であることを確認します。 volatile
修飾型 (#7)。long double
タイプ(#3)。~mcf/[email protected] にメーリング リストがあります。一般的なディスカッション、質問、パッチ、バグ レポートなどにご自由にお使いください (sr.ht アカウントをお持ちでない場合)。
問題があれば ~mcf/[email protected] までご報告ください。
パッチは大歓迎です。それらをメーリング リスト (推奨) に送信するか、GitHub ミラー上のプルリクエストとして送信します。