diff --git a/CMakeLists.txt b/CMakeLists.txt index 0cf3000..2b3c181 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,7 +20,9 @@ set( lccrt_SOURCE add_library( lccrt SHARED ${lccrt_SOURCE}) target_include_directories( lccrt PRIVATE include include/internal) +set_target_properties( lccrt PROPERTIES PUBLIC_HEADER "include/lccrt.h") install( TARGETS lccrt LIBRARY DESTINATION lib + PUBLIC_HEADER DESTINATION include RUNTIME DESTINATION bin) diff --git a/README.md b/README.md index fd5f82f..72c581f 100644 --- a/README.md +++ b/README.md @@ -4,17 +4,17 @@ ## Промежуточное представление lccrt-IR. -Промежуточное представление lccrt-IR ориентировано на модули полученные из Си-подобного языка. Изначально представление спроектировано как представление выполняющее транзитную функцию между представлением llvm-IR и EIR (компилятора lcc для e2k). Наличие дополнительного слоя в виде lccrt-IR позволяет сделать патч в llvm-project для e2k-платформы opensource-проектом. Внешние бэкенды подключаются как динамические плагины при инициализации библиотеки liblccrt. +Промежуточное представление lccrt-IR ориентировано на модули полученные из Си-подобного языка. Изначально представление спроектировано как представление выполняющее транзитную функцию между представлениями llvm-IR и EIR (из компилятора lcc для e2k). Наличие дополнительного слоя в виде lccrt-IR позволяет сделать патч в llvm-project для e2k-платформы opensource-проектом и предоставить открытое API для (закрытого) e2k-бэкенда. Внешние бэкенды подключаются как динамические плагины при инициализации библиотеки liblccrt. -Причем проект lccrt реализует самодостаточную библиотеку, формально не зависящую на уровне исходных кодов от других проектов. С этой точки зрения проект lccrt теоретически может рассматриваться как инструмент для преобразования и компиляции llvm-IR в другие IR'ы (предполагается вариант с libgccjit в качестве бэкенда), либо может выступать в качестве внешнего API (закрытого) оптимизирующего бэкенда для e2k-платформы в составе opensource-фронтендов отличных от llvm (если таковые возникнут на практике). +Проект lccrt реализует самодостаточную библиотеку, формально не зависящую на уровне исходных кодов от других проектов. С этой точки зрения проект lccrt теоретически может рассматриваться как инструмент для компиляции llvm-IR с помощью внешних бэкендов (предполагается вариант с libgccjit в качестве бэкенда), либо может выступать в качестве внешнего API для оптимизирующего e2k-бэкенда в составе opensource-фронтендов отличных от llvm (если таковые возникнут на практике). -В качестве тестового бэкенда может выступать lcbe-бэкенд (lib/lcbe), который преобразует lccrt-IR в компилируемый и исполняемый Си-код (разработка lcbe не завершена). В таком случае Си-код используется в качестве аналога target-ассемблера. +В качестве тестового бэкенда может выступать lcbe-бэкенд (lccrt/tools/lcbe), который преобразует lccrt-IR в компилируемый и исполняемый Си-код (разработка lcbe не завершена). В таком случае Си-код используется в качестве аналога target-ассемблера. Приниципиальной задачей, которая ставится перед lcbe-бэкендом, является задача получения минимальной замкнутой сборки при отсутствии бинарной версии e2k-бэкенда. ## Сборка. * ``mkdir lccrt/build && cd lccrt/build`` * ``cmake ../ && make && make install`` -## Использование. +## Применение. - * В трансляторе llvm-IR -> EIR (llvm-часть транслятора: https://gitflic.ru/project/e2khome/llvm-project-e-2-k) + * В трансляторе llvm-IR -> EIR (llvm-часть транслятора: [llvm-project-e2k](https://gitflic.ru/project/e2khome/llvm-project-e-2-k))