(отражено на GitHub)
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-совместимый 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
: команда компоновщика. Вы также можете настроить свою среду или 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.