Проект по портированию LLVM на e2k-платформу.
Данный проект основан на форке проекта llvm-project (оригинальный README.md переименован в README.llvm.md). В рамках данного проекта штатное решение по портированию состоит в использовании проприетарного оптимизирующего e2k-бэкенда (из компилятора lcc). Использование e2k-бэкенда реализовано посредством транслятора промежуточных представлений llvm-IR -> EIR (lcc). В процессе трансляции используется транзитное представление lccrt-IR.
Правки в llvm.
В силу вышеописанного способа портирования на базе проприетарного e2k-бэкенда непосредственно в проекте llvm-project-e2k реализуется часть транслятора по преобразованию llvm-IR -> lccrt-IR, а также добавляется формальная поддержка target-архитектуры Elbrus. В первом приближении такой подход можно сравнить с WebAssembly-бэкендом.
Предполагается, что подобный патч в llvm может представлять интерес в случаях:
- применение патча для более новых/старых версий llvm отличных от llvm-13 с целью портирования на e2k и/или применения дополнительных собственных патчей силами сторонних разработчиков, если требуемая версия llvm не поддерживается на рассматриваемый момент времени со стороны разработчиков из МЦСТ
- получения собственных сборок llvm для e2k-платформы, например, с дополнительными отладочными свойствами
- для частичного упрощения процесса портирования новых llvm-фронтендов для e2k-платформы (например, go-llvm в ситуации ограниченного доступа к e2k-машинам (хотя бы как первые шаги в данном направлении, в том числе, для расширения обратной связи)
- в качестве “just for fun” разработка для llvm полнофункционального Си-бэкенда (например, lcbe в lccrt и/или упрощение использования в качестве бэкенда libgccjit (требуется уточнение вопроса с лицензией по использованию)
Сборка.
Для сборки нужно стандартным образом добавить Elbrus в target-список cmake параметров и установить параметр -DLLVM_WITH_LCCRT=$PATHTO, где $PATHTO - путь до prefix-установки liblccrt.