Anylinux - переносимый тулчейн

Тема в разделе "WASM.PROJECTS", создана пользователем HoShiMin, 4 май 2025.

  1. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.498
    Адрес:
    Россия, Нижний Новгород
    https://hub.docker.com/r/hoshimin/anylinux

    Anylinux - Docker-образ на базе Ubuntu 18.04 с переносимым тулчейном для разработки на C++.
    Тулчейн содержит компиляторы, системы сборки и базовое окружение новейших версий.

    В Linux существует проблема с обновлением софта: в большинстве дистрибутивов
    софт фиксируется на версиях, существовавших на момент выхода дистрибутива в релиз,
    и больше не обновляется до новых мажорных версий.
    Это обеспечивает стабильное состояние системы, гарантирующее отсутствие
    ломающих изменений, но вносит проблемы с разработкой софта под разные версии дистрибутивов.

    Большинство дистрибутивов опираются на экосистему GNU - в частности, на библиотеку Glibc,
    которая служит не только библиотекой си, но и слоем POSIX API, оборачивающим сисколлы ядра
    в стандартные POSIX-функции.
    В Glibc гарантируется строгая обратная совместимость: приложение, собранное под более старый Glibc,
    гарантированно запустится на более новом. Но приложение, собранное под более новый Glibc,
    гарантированно НЕ запустится на более старом.
    Отсюда следует необходимость собирать приложение или под каждый дистрибутив отдельно,
    или собирать приложение на самом старом поддерживаемом дистрибутиве, используя старые тулчейны.

    Но есть и более сложный путь: если мы хотим использовать самые новые версии компиляторов,
    мы можем собрать их сами на старом дистрибутиве с минимально необходимой версией Glibc -
    в этом случае получим и новейший переносимый тулчейн, и возможность собирать им переносимые приложения,
    которые тоже будут зависеть от старого Glibc.

    Это и сделано в Anylinux: в качестве базовой системы выбрана Ubuntu 18.04 как система
    с достаточно старым Glibc, чтобы покрывать большинство современных дистрибутивов.
    В этом окружении собраны новейшие компоненты для разработки:
    * GCC и Clang.
    * Отладчик GDB.
    * Системы сборки (CMake, Make, GNU Autotools).
    * Основные утилиты GNU (Coreutils, Binutils, Diffutils, Grep, Less и т.д.).
    * Скриптовые движки (Python, Perl, Lua).
    * Несколько musthave-утилит и библиотек (PkgConf, PatchELF, Neovim, Nano, Tmux).
    Полный список с версиями см. на Dockerhub.

    Все компоненты переносимы на дистрибутивы с Glibc не ниже 2.27: можно запаковать любой компонент в архив и унести из контейнера наружу.
    Некоторые компоненты (в частности, GCC и Clang) собраны с -march=x86-64-v3, для которых требуется поддержка AVX2.
    Компиляторы собраны с -O3 и FullLTO для достижения максимальной производительности.

    Скачать образ:
    Код (Bash):
    1. docker pull hoshimin/anylinux
    Запустить:
    Код (Bash):
    1. docker run --rm -it    \
    2.   -e TERM=xterm-color  \
    3.   -tmpfs /tmp:rw       \
    4.   -tmpfs /run:rw       \
    5.   hoshimin/anylinux:latest
    Все компоненты лежат в /opt/.
    Включение и отключение компонентов производится прописыванием каждого компонента в PATH, PKG_CONFIG_PATH и LD_LIBRARY_PATH.
    За это отвечает скрипт /etc/profile.d/toolchain.sh, запускающийся автоматически при входе в контейнер:
    сразу после входа вы получаете полностью настроенное окружение.

    Способы сборок тулчейном для GCC и Clang описаны в инструкции на Dockerhub.
     
    Последнее редактирование: 4 май 2025
    alex_dz, Research и Mikl___ нравится это.