В качестве эксперимента расширение возможностей для задания версии процессора через опцию --target= без задействования опции -march=. В определенной степени решения по настройке версии процессора скопированы с архитектуры ARM. Ранее для задания опции процессора необходимо было, например, использовать пару --target=e2k64-unknown-linux-gnu -march=elbrus-8c2 Теперь можно задать версию процессора или системы команд только через установку значения опции --target=, например, так --target=e2k8c2-unknown-linux-gnu В последствии конкретные значения для опции --target могут ИЗМЕНИТЬСЯ, поэтому НЕ СЛЕДУЕТ их рассматривать как устоявшиеся!!! Важное изменение состоит также в том, что теперь систему команд и даже версию процессора по умолчанию можно установить при конфигурации процесса сборки через установку значений cmake-параметров, например, cmake .. -DLLVM_DEFAULT_TARGET_TRIPLE=e2kv5-unknown-linux-gnu Версии компонент: бэкенд liblccrt: ecomp.r29.146776 - ecomp.r29.147014 плагин liblccopt: ecomp.r29.146958 - ecomp.r29.147014
9 месяцев назад История
README.md

Проект по портированию 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.

Конвейеры
0 успешных
0 с ошибкой