Эльбрус стал намного ближе
Не так давно МЦСТ опубликовали кросскомпилятор для Эльбрусов. Это действительно важное событие в развитии платформы. Теперь для разработки под 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:

После скачивания архива распакуйте его. В архиве будет каталог 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
и посмотрите на вывод.

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

Отлично, мы ее собрали, но как запустить ее? У меня есть доступ к серверу на Эльбрусе, получить его достаточно просто. Нужно просто подать заявку на сайте. Этот процесс может затянуться до 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 и собрать программку.


Вывод
Я попробовал пособирать разные свои проекты, и многое собирается и даже работает в qemu, но без проблем не обошлось. Соберется ли и заработает ли ваш проект? Попробуйте собрать и запустить, только так можно узнать.
В любом случае это большой шаг вперед для всей платформы и, я надеюсь, МЦСТ и дальше будет открываться людям.
Источники
Сайт для разработчиков от МЦСТ — тут
Исходный код qemu-e2k — тут
Инструкция по настройке qemu-e2k — тут
Habrahabr.ru прочитано 6344 раза