(معكوسة على جيثب)
cproc
هو مترجم C11 يستخدم QBE كواجهة خلفية. تم إصداره بموجب ترخيص ISC.
يتم أيضًا تنفيذ بعض ميزات C23 وملحقات GNU C.
لا يزال هناك الكثير للقيام به، ولكنه يطبق حاليًا معظم اللغات وهو قادر على بناء البرامج بما في ذلك نفسه، وmcpp، وgcc 4.7، وbinutils، والمزيد.
لقد كان مستوحى من العديد من مترجمات C الصغيرة الأخرى بما في ذلك 8cc وc وlacc وscc.
المترجم نفسه مكتوب بمعيار C99 ويمكن إنشاؤه باستخدام أي مترجم C99 مطابق.
يعتمد برنامج تشغيل POSIX على واجهات POSIX.1-2008، ويتطلب Makefile
تكوينًا متوافقًا مع POSIX(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
: أمر الرابط. قد ترغب أيضًا في تخصيص بيئتك أو config.mk
باستخدام CC
و CFLAGS
و LDFLAGS
المناسبين.
بمجرد الانتهاء من ذلك، يمكنك البناء باستخدام
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.