Думаю, многим, также, как и мне, книга «Getting Started with LLVM Core Libraries» покажется интересной. Это первая книга, посвященная целиком и полностью LLVM. В основном, как следует из названия, ориентирована на новичков, которые только обратили свое внимание на LLVM, но уже имеют опыт программирования на C++.
Глава 1. Сборка и установка LLVM. описывает установку Clang/LLVM на Linux, Windows, Mac (с описанием как собрать эту библиотеку на Visual Studio и XCode). Также здесь рассматривается вопрос, что и когда лучше выбрать — скачать уже скомпилированные бинарные файлы, воспользоваться пакетным менеджером или самому компилировать исходники.
Глава 2. Внешние проекты. Содержит описание проектов, не являющихся часть ядра библиотеки. Например: дополнительные утилиты Clang'а, DragonEgg — плагин для GCC, отладчик LLDB и набор тестов LLVM test suite.
Глава 3. Инструменты и архитектура проекта. Объясняет, как в LLVM налажено взаимодействие различные составляющих. Предоставляет пример пошаговой трансляции из исходного кода в ассемблер. Также описывает как работает драйвер компилятора и, напоследок, как написать свою первую утилиту, использующую LLVM.
Глава 4. Компилятор. Описывает инструменты проекта Clang и способ написания утилиты, пользующейся этими инструментами.
Глава 5. Промежуточное представление LLVM. Описывает одну из важнейших частей LLVM — код промежуточного представления (intermediate representation — IR). Описывается его синтаксис, структура, что делает его таким важным и как написать программу, производящую такой код.
Глава 6. Генератор машинного кода. Описывает часть LLVM, ответственную за генерацию машинного кода из IR. Здесь дается информация, достаточная для создания собственного генератора.
Глава 7. Компилятор Just-in-Time (JIT). Описываются инструменты LLVM, обеспечивающие JIT компиляцию, и приводится пример создания своего JIT компилятора.
Глава 8. Кросс-платформенная компиляция. Приводится объяснение, как с помощью Clang/LLVM создать программу, предназначенную для выполнения на других платформах (например на ARM). Описывается настройка окружения для выполнения таких компиляций.
Глава 9. Статический анализатор Clang'а. Описывается данный анализатор и способы расширить его функциональность своими утилитами.
Глава 10. Библиотека LibTooling. Описывается данная библиотека (фреймворк), которая позволяет выполнять рефракторинг исходного кода. Также описывается пример создания своей утилиты рефракторинга кода на основе LibTooling.
На момент написания книги (август 2014) LLVM 3.5 еще не был зарелизен, поэтому все примеры выполнены для LLVM 3.4. Однако авторы обещают со временем сделать дополнение (бесплатное) к книге, перевести все примеры на LLVM 3.5 и разместить на сайте издательства.
Коротко об авторах:
Bruno Cordoso Lopes — участвовал в разработке LLVM с 2007г. Внутри этого проекта принимал участие в разработке кодогенератора MIPS, поддержке x86 AVX, улучшении ассемблерного кода для ARM.
Rafael Auler — прямого участия в разработке LLVM не принимал. Однако с LLVM связаны его PhD исследования.
В списке рецензентов значатся известные в LLVM люди (такие как Eli Bendersky), огорчает отсутствие Lattner'а, но, видимо, он очень занят. В целом, книга читается легко. Не помешает, а зачастую и поможет, тем, кто хочет начать использовать LLVM.
Автор: kpdev