Не уверен, что форум полностью соответствует моему посту -- судя по названию форума, скорее нет, чем да. Однако, на RSDN нет специализированного форума "Компиляторостроение", а темы про компиляторостроение по факту появляются в основном здесь. Посему, и я создам тему здесь.
Компиляторостроителям и им сочувствующим предлагается достаточно большая матрица сборок LLVM. Нужна она преимущественно для целей тестирования ваших LLVM-based проектов в различных конфигурациях. Впрочем, под Windows эти сборки вполне можно использовать и не только для тестирования, а, например, прямо линковать их к релизным экзешникам ваших проектов. Тут, конечно, встаёт вопрос доверия к источнику бинарников (в данном случае это AppVeyor), так что использовать их в production или нет, каждый решает для себя сам.
Мотивация создания такова.
Официальный сайт LLVM готовые сборки предлагает, но количество доступных конфигураций до слёз мало. LLVM большой и собирается долго, последние версии -- по 40-50 минут на средних-по-больнице машинах. При этом в большинстве бесплатных облачных сервисов непрерывной интеграции стоит жёсткий лимит на время сборки (ещё бы!) -- и эти факты ну никак не сочетаются друг с другом. Впрочем, даже если бы лимита и не было, не хочется каждый раз иметь эту часовую задержку до начала тестирования собственно вашего проекта.
Посему, я подготовил нужную мне матрицу конфигураций и собрал LLVM на тех же серверах непрерывной интеграции, на которых и происходит тестирование, а именно -- Travis CI и AppVeyor. Архивы сборок выложены (теми же самыми сервисами непрерывной интеграции) как GitHub-артефакты и доступны для скачивания и распаковки -- вместо убийства часа на сборку LLVM по месту.
Матрица на текущий момент такова:
Windows
Toolchain:
Visual Studio 2010 (LLVM 3.4.2 only)
Visual Studio 2013
Visual Studio 2015
V>Мотивация создания такова.
V>Официальный сайт LLVM готовые сборки предлагает, но количество доступных конфигураций до слёз мало. LLVM большой и собирается долго, последние версии -- по 40-50 минут на средних-по-больнице машинах. При этом в большинстве бесплатных облачных сервисов непрерывной интеграции стоит жёсткий лимит на время сборки (ещё бы!) -- и эти факты ну никак не сочетаются друг с другом. Впрочем, даже если бы лимита и не было, не хочется каждый раз иметь эту часовую задержку до начала тестирования собственно вашего проекта.
Состав компилятора из порта, собранного с отличными от дефолтных опциями:
% 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.
Здравствуйте, vovkos, Вы писали:
V>Мотивация создания такова.
... V>Посему, я подготовил нужную мне матрицу конфигураций и собрал LLVM на тех же серверах непрерывной интеграции, на которых и происходит тестирование, а именно -- Travis CI и AppVeyor. Архивы сборок выложены (теми же самыми сервисами непрерывной интеграции) как GitHub-артефакты и доступны для скачивания и распаковки -- вместо убийства часа на сборку LLVM по месту.
версия которая работает под winxp ?
Re[2]: Большая матрица сборок LLVM для тестирования
Здравствуйте, iZEN, Вы писали:
ZEN> <<<поскипано>>>
Судя по тому, что ваш пост не очень связан с оригинальным (кроме того, что и то и другое про LLVM), возникло недопонимание.
Предлагаемая матрица сборок -- это НЕ Clang, собранный в разных конфигурациях! Это именно библиотеки LLVM. Используются они при разработке околокомпиляторных тулзов: компиляторов, декомпиляторов, статических анализаторов и т.д.
Тестировать предполагается не то, как ваш проект собирается всевозможными конфигурациями Кланга (это как раз не имеет особого смысла), а то, как ваш околокомпиляторный тулз собирается и работает в заданной конфигурации и с заданной версией библиотек LLVM.
Re[2]: Большая матрица сборок LLVM для тестирования
Здравствуйте, kov_serg, Вы писали:
_> [Есть ли] версия которая работает под winxp ?
Да вполне, а почему нет? В самом LLVM в общем-то, совсем немного платформенно-зависимого кода. Не проверял последние версии LLVM, а вот LLVM 3.4.2 гарантировано работает: мы собираем IO Ninja с LLVM 3.4.2 на Visual Studio 2010 со статическим рантаймом (libcmt), и это замечательно работает на ванильной XP.
Re[3]: Большая матрица сборок LLVM для тестирования
Здравствуйте, vovkos, Вы писали:
V>Судя по тому, что ваш пост не очень связан с оригинальным (кроме того, что и то и другое про LLVM), возникло недопонимание.
Недопонимание в той части, что уже есть новый отлаженный набор LLVM, рабочая системная и прикладная инфраструктура на её основе. Удивительно то, что кому-то нужны устаревшие версии библиотек.
V>Предлагаемая матрица сборок -- это НЕ Clang, собранный в разных конфигурациях! Это именно библиотеки LLVM. Используются они при разработке околокомпиляторных тулзов: компиляторов, декомпиляторов, статических анализаторов и т.д.
Да и я о том же — LLVM включает в себя не только фронтенд (Clang, LLD и т.д.) но и рантайм-библиотеки времени выполнения.
V>Тестировать предполагается не то, как ваш проект собирается всевозможными конфигурациями Кланга (это как раз не имеет особого смысла), а то, как ваш околокомпиляторный тулз собирается и работает в заданной конфигурации и с заданной версией библиотек LLVM.
Что-то мешает перейти на крайнюю версию комплекта LLVM? Правда, интересно.
Здравствуйте, 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, статическая/динамическая линковка к Микрософтовским рантаймам и т.д.