Эльбрус стал намного ближе

Не так давно МЦСТ опубликовали кросскомпилятор для Эльбрусов. Это действительно важное событие в развитии платформы. Теперь для разработки под e2k не нужен ни свой Эльбрус, ни даже доступ к серверу на нем.

Для справки, кросскомпиляция — компиляция, при которой компилятор создает код для платформы, отличной от хостовой. Это удобно, так как процесс компиляции можно проводить на любом компьютере, а не только на устройстве с целевой архитектурой. В плане Эльбруса это позволяет проверять компилируемость вашего кода под e2k, добавлять сборку в свои ci/cd пайплайны, публиковать артефакты и релизы, не покупая свой сервер.

Это очень хороший шаг со стороны МЦСТ, ведущий к увеличению интереса к платформе. Теперь любой человек может собрать свой код под e2k и даже проверить его работу у себя на ПК. А о том, как сделать это, будет ниже. Я сделал Docker — контейнер со всем необходимым, так что вы можете развернуть всю среду в одну команду, и даже на Windows. Также я сделал скрипт для установки, если вы не любите контейнеры.

Если вы итак все знаете и вам не интересно читать статью, то можете сразу перейти в репозиторий.

Ручная настройка среды

Установка компилятора

Сперва компилятор нужно скачать. Сделать это можно с сайта МЦСТ. Я буду использовать последнюю версию для Эльбрус 2С3.

Страница загрузки компилятора
Страница загрузки компилятора

Установите компилятор

Установка компилятора
Установка компилятора

Это можно сделать с помощью команды:

wget https://dev.mcst.ru/downloads/2025-03-30/cross-sp-rel-1.27.21.e2k-v6.5.10-e2c3_64.tgz
Скрытый текст

Если вы будете читать эту статью через какое-то время, то версия компилятора скорее всего изменится, и команды будут нуждаться в корректировке.

Дополнительно можете проверить хэш — суммы архива:

Стрибог:

Гост хэш
Гост хэш

Sha512:

Sha хэш
Sha хэш

После скачивания архива распакуйте его. В архиве будет каталог opt, в котором будет папка mcst. Вы должны поместить mcst в свою директорию opt.

Установленный компилятор
Установленный компилятор

Для этого выполните следующие команды:

tar -xzvf cross-sp-rel-1.27.21.e2k-v6.5.10-e2c3_64.tgz
sudo mv opt/mcst /opt

Теперь для проверки установки можно написать простую программу и попробовать собрать ее, но предварительно нужно обновить path. Для этого выполните следующую команду:

export PATH=$PATH:/opt/mcst/lcc-1.27.21.e2k-v6.5.10-e2c3/bin/

Она обновит path вашей терминальной сессии. Для проверки вызовите команду lcc и посмотрите на вывод.

Рабочий lcc
Рабочий lcc

Теперь можно написать простую программу и попробовать скомпилировать ее.

Удачная компиляция
Удачная компиляция

Отлично, мы ее собрали, но как запустить ее? У меня есть доступ к серверу на Эльбрусе, получить его достаточно просто. Нужно просто подать заявку на сайте. Этот процесс может затянуться до 7 дней. Я советую получить доступ, но сейчас можно обойтись и без этого.

Установка qemu-e2k

Для запуска программ, собранных под e2k можно использовать qemu-e2k. Это не совсем e2k. Посмотрим ALT Linux Wiki.

На x86 можно воспользоваться программным эмулятором qemu-e2k от сообщества, который, по словам сотрудника МЦСТ, «эмулирует что-то напоминающее архитектуру эльбрус» (при этом для ряда практических задач уже вполне пригоден).

Но для нас, скорее всего, этого будет достаточно. Поэтому расскажу про этот спопсоб. К сожалению, готовых бинарных файлов нет даже в aur, поэтому придется собирать руками. Но это на самом деле несложно.

Перейдите на гитхаб проекта и склонируйте его с помощью команды:

git clone https://github.com/OpenE2K/qemu-e2k.git

Для сборки требуется ninja.

Скрытый текст

Список необходимых на Ubuntu пакетов:

  • build-essential

  • ninja-build

  • python3

  • python3-pip

  • libglib2.0-dev

Теперь можно собрать проект с помощью следующих команд:

cd qemu-e2k
git checkout e2k
mkdir build
cd build
../configure --target-list=e2k-linux-user --static --disable-capstone --disable-werror
nice ninja

Можно добавить бинарный файл qemu-e2k в /usr/local/bin, чтобы он был доступен из любого места.

sudo cp qemu-e2k /usr/local/bin

Теперь можно запускать нашу программу:

Неудачный запуск
Неудачный запуск

Что-то не получилось. Дело в том, что программа собрана не статически и она пытается подгрузить системные библиотеки. Они загружаются по стандартным путям, по которым у нас в системе лежат библиотеки под нашу архитектуру. Если мы соберем программу с ключом -static, то все заработает.

Удачный запуск статически собранного бинарного файла
Удачный запуск статически собранного бинарного файла

Но для динамической линковки тоже есть выход, нужно использовать ключ -L при вызове qemu-e2k и передать путь к директории fs внутри компилятора.

Удачный запуск собранного без статичной линковки бинарного файла
Удачный запуск собранного без статичной линковки бинарного файла

Команда для запуска:

qemu-e2k -L /opt/mcst/lcc-1.27.21.e2k-v6.5.10-e2c3/fs/ a.out 

Вместо использования ключа, можно использовать переменную окружения QEMU_LD_PREFIX. Поместите в нее путь к fs вашего компилятора.

Если вы не хотите каждый раз устанавливать руками системные переменны, то можете добавить все эти настройки в ваш .bashrc или .zshrc. Также можно создать алиас для вызова qemu, например так:

alias e2k='qemu-e2k -L /opt/mcst/lcc-1.27.21.e2k-v6.5.10-e2c3/fs'

Скрипт

Склонируйте репозиторий к себе на компьютер.

git clone https://gitflic.ru/project/mrognor/lcc-env.git
Клонирование репозитория
Клонирование репозитория

Теперь нужно перейти в репозиторий и вызвать скрипт install.sh. Установка может занять довольно много времени.

cd lcc-env
sudo ./install.sh
Вызов скрипта установки окружения
Вызов скрипта установки окружения

Установка удалась

Установка удалась
Установка удалась

Прочитаем новый enviroment и попробуем запустить и собрать программку.

Все работает
Все работает

Контейнер

Из репозитория вам потребуется скрипт для удобного запуска контейнера. Вы можете использовать только скрипт, но я буду использовать весь репо.  

Установите контейнер из registry с помощью команды:

docker pull registry.gitflic.ru/project/mrognor/lcc-env/lcc-container
Установленный контейнер
Установленный контейнер

Теперь можно запустить контейнер с помощью скрипта container.sh или container.bat и собрать программку.

Рабочий контейнер на Linux
Рабочий контейнер на Linux
Рабочий контейнер на Windows
Рабочий контейнер на Windows

Вывод

Я попробовал пособирать разные свои проекты, и многое собирается и даже работает в qemu, но без проблем не обошлось. Соберется ли и заработает ли ваш проект? Попробуйте собрать и запустить, только так можно узнать.

В любом случае это большой шаг вперед для всей платформы и, я надеюсь, МЦСТ и дальше будет открываться людям.

Источники

Сайт для разработчиков от МЦСТ — тут

Исходный код qemu-e2k — тут

Инструкция по настройке qemu-e2k — тут

Habrahabr.ru прочитано 6344 раза