Большая матрица сборок LLVM для тестирования
От: vovkos Россия https://ioninja.com
Дата: 11.04.17 15:01
Оценка: 295 (5) +1
Не уверен, что форум полностью соответствует моему посту -- судя по названию форума, скорее нет, чем да. Однако, на RSDN нет специализированного форума "Компиляторостроение", а темы про компиляторостроение по факту появляются в основном здесь. Посему, и я создам тему здесь.

Компиляторостроителям и им сочувствующим предлагается достаточно большая матрица сборок LLVM. Нужна она преимущественно для целей тестирования ваших LLVM-based проектов в различных конфигурациях. Впрочем, под Windows эти сборки вполне можно использовать и не только для тестирования, а, например, прямо линковать их к релизным экзешникам ваших проектов. Тут, конечно, встаёт вопрос доверия к источнику бинарников (в данном случае это AppVeyor), так что использовать их в production или нет, каждый решает для себя сам.

Мотивация создания такова.

Официальный сайт LLVM готовые сборки предлагает, но количество доступных конфигураций до слёз мало. LLVM большой и собирается долго, последние версии -- по 40-50 минут на средних-по-больнице машинах. При этом в большинстве бесплатных облачных сервисов непрерывной интеграции стоит жёсткий лимит на время сборки (ещё бы!) -- и эти факты ну никак не сочетаются друг с другом. Впрочем, даже если бы лимита и не было, не хочется каждый раз иметь эту часовую задержку до начала тестирования собственно вашего проекта.

Посему, я подготовил нужную мне матрицу конфигураций и собрал LLVM на тех же серверах непрерывной интеграции, на которых и происходит тестирование, а именно -- Travis CI и AppVeyor. Архивы сборок выложены (теми же самыми сервисами непрерывной интеграции) как GitHub-артефакты и доступны для скачивания и распаковки -- вместо убийства часа на сборку LLVM по месту.

Матрица на текущий момент такова:

Windows
  • Toolchain:

  • Target CPU:

  • C/C++ Runtime:

  • Configuration:

    Linux Ubuntu 14.04 Trusty Tahr
  • Compiler:

  • Target CPU:

  • Configuration:

    Mac OS X 10.11.6
  • Compiler:

  • Target CPU:

  • Configuration:

    Качать бинарники и контрибутить тут:

    https://github.com/vovkos/llvm-package-windows
    https://github.com/vovkos/llvm-package-travis

    Пример использования на моём проекте (shell скрипты для скачивания и подключения LLVM в папке ci):

    https://github.com/vovkos/jancy

    Логи тестирования (я гоняю только с двумя граничными поддерживаемыми версиями, на сегодняшний день это LLVM 3.4.2 и LLVM 3.9.1):

    https://travis-ci.org/vovkos/jancy
    https://ci.appveyor.com/project/vovkos/jancy
  • llvm
    Re: Большая матрица сборок LLVM для тестирования
    От: iZEN СССР  
    Дата: 11.04.17 17:45
    Оценка:
    Здравствуйте, vovkos, Вы писали:


    V>Мотивация создания такова.


    V>Официальный сайт LLVM готовые сборки предлагает, но количество доступных конфигураций до слёз мало. LLVM большой и собирается долго, последние версии -- по 40-50 минут на средних-по-больнице машинах. При этом в большинстве бесплатных облачных сервисов непрерывной интеграции стоит жёсткий лимит на время сборки (ещё бы!) -- и эти факты ну никак не сочетаются друг с другом. Впрочем, даже если бы лимита и не было, не хочется каждый раз иметь эту часовую задержку до начала тестирования собственно вашего проекта.


    Релиз LLVM/Clang-4.0.0 состоялся 13 марта 2017г — https://www.opennet.ru/opennews/art.shtml?num=46181

    На FreeBSD 11-STABLE LLVM/Clang-4.0.0 сейчас системный компилятор:
    % cc --version
    FreeBSD clang version 4.0.0 (tags/RELEASE_400/final 297347) (based on LLVM 4.0.0)
    Target: x86_64-unknown-freebsd11.0
    Thread model: posix
    InstalledDir: /usr/bin


    От порта devel/llvm40 во FreeBSD сейчас зависит графическая подсистема 2D/3D-акселерации Mesa/DRI-17.0.3.

    Состав компилятора из порта, собранного с отличными от дефолтных опциями:
    % pkg info llvm40
    llvm40-4.0.0_2
    Name           : llvm40
    Version        : 4.0.0_2
    Installed on   : Sun Apr  2 13:07:23 2017 MSK
    Origin         : devel/llvm40
    Architecture   : FreeBSD:11:amd64
    Prefix         : /usr/local
    Categories     : devel lang
    Licenses       : LLVM
    Maintainer     : brooks@FreeBSD.org
    WWW            : http://llvm.org/
    Comment        : LLVM and Clang
    Options        :
        CLANG          : on
        COMPILER_RT    : on
        DOCS           : off
        EXTRAS         : off
        GOLD           : off
        LIT            : off
        LLD            : on
        LLDB           : off
        OPENMP         : on
    Shared Libs required:
        libedit.so.0
        libxml2.so.2
    Shared Libs provided:
        libLLVM-4.0.so
        libLTO.so.4
        libclang.so.4
        libomp.so
        libclang_rt.dyndd-x86_64.so
        libclang_rt.asan-x86_64.so
    Annotations    :
    Flat size      : 974MiB
    Description    :
    The LLVM Project is a collection of modular and reusable compiler and
    toolchain technologies.
    
    This port includes Clang (a C/C++/Objective-C compiler), LLD (a linker),
    LLDB (a debugger), an OpenMP runtime library, and the LLVM infrastructure
    these are built on.
    
    WWW: http://llvm.org/


    Саму систему и почти всё ПО из портов можно собрать им или системным LLVM/Clang. (Надо пояснить, что есть GCC 5.4.0 для тех портов, которые не поддерживают сборку Clang — это примерно 1111 портов.)

    Дополнительный плюс использования LLVM/Clang — это оптимизация кода на этапе компоновки (LTO, Link-time optimization) с помощью линковщика LLD, которая показывает неплохие результаты быстродействия и качества результирующего кода.
    И переход FreeBSD с GNU ld на LLVM LLD в скором времени:
    % ld --version
    GNU ld 2.17.50 [FreeBSD] 2007-07-03
    Copyright 2007 Free Software Foundation, Inc.
    This program is free software; you may redistribute it under the terms of
    the GNU General Public License.  This program has absolutely no warranty.
    Отредактировано 11.04.2017 17:51 iZEN . Предыдущая версия .
    Re: Большая матрица сборок LLVM для тестирования
    От: kov_serg Россия  
    Дата: 11.04.17 17:59
    Оценка:
    Здравствуйте, vovkos, Вы писали:

    V>Мотивация создания такова.

    ...
    V>Посему, я подготовил нужную мне матрицу конфигураций и собрал LLVM на тех же серверах непрерывной интеграции, на которых и происходит тестирование, а именно -- Travis CI и AppVeyor. Архивы сборок выложены (теми же самыми сервисами непрерывной интеграции) как GitHub-артефакты и доступны для скачивания и распаковки -- вместо убийства часа на сборку LLVM по месту.


    версия которая работает под winxp ?
    Re[2]: Большая матрица сборок LLVM для тестирования
    От: vovkos Россия https://ioninja.com
    Дата: 12.04.17 01:39
    Оценка:
    Здравствуйте, iZEN, Вы писали:

    ZEN> <<<поскипано>>>


    Судя по тому, что ваш пост не очень связан с оригинальным (кроме того, что и то и другое про LLVM), возникло недопонимание.

    Предлагаемая матрица сборок -- это НЕ Clang, собранный в разных конфигурациях! Это именно библиотеки LLVM. Используются они при разработке околокомпиляторных тулзов: компиляторов, декомпиляторов, статических анализаторов и т.д.

    Тестировать предполагается не то, как ваш проект собирается всевозможными конфигурациями Кланга (это как раз не имеет особого смысла), а то, как ваш околокомпиляторный тулз собирается и работает в заданной конфигурации и с заданной версией библиотек LLVM.
    Re[2]: Большая матрица сборок LLVM для тестирования
    От: vovkos Россия https://ioninja.com
    Дата: 12.04.17 01:44
    Оценка:
    Здравствуйте, kov_serg, Вы писали:

    _> [Есть ли] версия которая работает под winxp ?


    Да вполне, а почему нет? В самом LLVM в общем-то, совсем немного платформенно-зависимого кода. Не проверял последние версии LLVM, а вот LLVM 3.4.2 гарантировано работает: мы собираем IO Ninja с LLVM 3.4.2 на Visual Studio 2010 со статическим рантаймом (libcmt), и это замечательно работает на ванильной XP.
    Re[3]: Большая матрица сборок LLVM для тестирования
    От: iZEN СССР  
    Дата: 12.04.17 08:11
    Оценка:
    Здравствуйте, vovkos, Вы писали:

    V>Судя по тому, что ваш пост не очень связан с оригинальным (кроме того, что и то и другое про LLVM), возникло недопонимание.


    Недопонимание в той части, что уже есть новый отлаженный набор LLVM, рабочая системная и прикладная инфраструктура на её основе. Удивительно то, что кому-то нужны устаревшие версии библиотек.

    V>Предлагаемая матрица сборок -- это НЕ Clang, собранный в разных конфигурациях! Это именно библиотеки LLVM. Используются они при разработке околокомпиляторных тулзов: компиляторов, декомпиляторов, статических анализаторов и т.д.


    Да и я о том же — LLVM включает в себя не только фронтенд (Clang, LLD и т.д.) но и рантайм-библиотеки времени выполнения.

    V>Тестировать предполагается не то, как ваш проект собирается всевозможными конфигурациями Кланга (это как раз не имеет особого смысла), а то, как ваш околокомпиляторный тулз собирается и работает в заданной конфигурации и с заданной версией библиотек LLVM.


    Что-то мешает перейти на крайнюю версию комплекта LLVM? Правда, интересно.
    Отредактировано 12.04.2017 8:13 iZEN . Предыдущая версия .
    Re[4]: Большая матрица сборок LLVM для тестирования
    От: iZEN СССР  
    Дата: 12.04.17 08:12
    Оценка:
    ---
    Отредактировано 12.04.2017 8:12 iZEN . Предыдущая версия .
    Re[4]: Большая матрица сборок LLVM для тестирования
    От: vovkos Россия https://ioninja.com
    Дата: 12.04.17 09:33
    Оценка:
    Здравствуйте, iZEN, Вы писали:

    ZEN>Недопонимание в той части, что уже есть новый отлаженный набор LLVM, рабочая системная и прикладная инфраструктура на её основе.


    Очевидно, не читалось (или не осмысливалось) написанное мной выше. Официальные готовые сборки есть, но количество доступных конфигураций недостаточно для полноценного тестирования. Где Debug сборки? Где 32-битная сборка под Ubuntu? Где 32-битная сборка под Windows? Где сборка со статической линковкой к libcmt под Windows?

    ZEN>Удивительно то, что кому-то нужны устаревшие версии библиотек.


    Съезжаем в оффтопик, но... Удивительно то, что надо объяснять, что нельзя мгновенно переводить production код на только что вышедшую версию библиотек -- это относится вообще к любым зависимостям. В случае же LLVM -- не знаю, в курсе вы или нет, -- ситуация усугубляется тем, что каждое увеличение минорной версии до сих пор было API-breaking, то есть с переводом на новую версию ваш проект просто перестаёт компилироваться, и его надо портировать и заново отлаживать.

    Я убеждён, что переход на новую версию зависимостей должен быть оправдан объективными причинами, а не просто чтоб всегда была распоследняя версия. Впрочем, это тема для священных войн.

    ZEN>Да и я о том же — LLVM включает в себя не только фронтенд (Clang, LLD и т.д.) но и рантайм-библиотеки времени выполнения.


    Хорошо, LLVM как umbrella project -- да, включает в себя Clang и прочие тулзы. И как это сюда относится? У нас идёт речь именно про библиотеки LLVM -- то, что линкуется к вашему околокомпиляторному проекту.

    ZEN>Что-то мешает перейти на крайнюю версию комплекта LLVM? Правда, интересно.


    Что может мешать, ответил выше. И потом, крайняя версия 4.0.0, естественно, присутствует -- в чём вы и сами могли бы убедиться, зайдя по линкам на гитхаб. Но, в отличие от официальных сборок, присутствует во всём многообразии: 64/32 бита, Debug/Release, статическая/динамическая линковка к Микрософтовским рантаймам и т.д.
     
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.