(dicerminkan di GitHub)
cproc
adalah kompiler C11 yang menggunakan QBE sebagai backend. Ini dirilis di bawah lisensi ISC.
Beberapa fitur C23 dan ekstensi GNU C juga diterapkan.
Masih banyak yang harus dilakukan, namun saat ini ia mengimplementasikan sebagian besar bahasa tersebut dan mampu membangun perangkat lunak termasuk dirinya sendiri, mcpp, gcc 4.7, binutils, dan banyak lagi.
Itu terinspirasi oleh beberapa kompiler C kecil lainnya termasuk 8cc, c, lacc, dan scc.
Kompilernya sendiri ditulis dalam standar C99 dan dapat dibuat dengan kompiler C99 apa pun yang sesuai.
Driver POSIX bergantung pada antarmuka POSIX.1-2008, dan Makefile
memerlukan make(1) yang kompatibel dengan POSIX.
Saat runtime, Anda memerlukan QBE, assembler, dan linker untuk sistem target. Karena praprosesor belum diimplementasikan, maka diperlukan praprosesor eksternal juga.
Semua arsitektur yang didukung oleh QBE akan berfungsi (saat ini x86_64, aarch64, dan riscv64).
Target berikut diuji dengan build berkelanjutan dan diketahui melakukan bootstrap serta lulus semua pengujian:
x86_64-linux-musl
x86_64-linux-gnu
x86_64-freebsd
aarch64-linux-musl
aarch64-linux-gnu
riscv64-linux-gnu
Jalankan ./configure
untuk membuat config.h
dan config.mk
yang sesuai untuk sistem Anda. Jika sistem Anda tidak didukung oleh skrip konfigurasi, Anda dapat membuat file ini secara manual. config.h
harus mendefinisikan beberapa array string ( static char *[]
):
startfiles
: Objek yang akan diteruskan ke linker di awal perintah link.endfiles
: Objek yang akan diteruskan ke linker di akhir perintah link (termasuk libc).preprocesscmd
: Perintah praprosesor, dan tanda apa pun yang diperlukan untuk sistem target.codegencmd
: Perintah QBE, dan mungkin tanda target eksplisit.assemblecmd
: Perintah assembler.linkcmd
: Perintah tautan. Anda mungkin juga ingin menyesuaikan lingkungan atau config.mk
Anda dengan CC
, CFLAGS
dan LDFLAGS
yang sesuai.
Setelah ini selesai, Anda dapat membangunnya
make
Makefile
menyertakan beberapa target lain yang dapat digunakan untuk bootstrap. Target ini memerlukan kemampuan untuk menjalankan alat yang ditentukan dalam config.h
.
stage2
: Bangun kompiler dengan keluaran awal ( stage1
).stage3
: Bangun kompiler dengan output stage2
.bootstrap
: Bangun kompiler stage2
dan stage3
, dan verifikasi bahwa keduanya identik dalam byte. volatile
(#7).long double
(#3).Ada milis di ~mcf/[email protected]. Jangan ragu untuk menggunakannya untuk diskusi umum, pertanyaan, patch, atau laporan bug (jika Anda tidak memiliki akun sr.ht).
Silakan laporkan masalah apa pun ke ~mcf/[email protected].
Tambalan sangat dihargai. Kirimkan ke milis (lebih disukai), atau sebagai permintaan tarik di mirror GitHub.