From d220d840e26def14ec318d705b76f831649a8bcd Mon Sep 17 00:00:00 2001 From: uslstenn Date: Mon, 22 Jun 2026 13:24:11 +0300 Subject: [PATCH] [infra] Introduced CMake * CPM integration was supported --- CMakeLists.txt | 42 ++++++++++++++++++++++++++++++++++++++++++ README.md | 36 ++++++++++++++++++++++++++++++++++++ cmake/CPM.cmake | 22 ++++++++++++++++++++++ 3 files changed, 100 insertions(+) create mode 100644 CMakeLists.txt create mode 100644 cmake/CPM.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..933e6c0 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,42 @@ +cmake_minimum_required(VERSION 3.14) +project(LIRA + VERSION 0.1.0 + DESCRIPTION "LIRA is a framework that provides a data-flow Intermediate Representation." + LANGUAGES NONE +) + +if(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR) + include(${CMAKE_CURRENT_LIST_DIR}/cmake/CPM.cmake) +endif() + +option(LIRA_PYTHON "Include Python LIRA library" ON) +option(LIRA_RUBY "Include Ruby LIRA library" ON) +option(LIRA_RUST "Include Rust LIRA library" ON) + +set(LIRA_PYTHON_DIR "${CMAKE_CURRENT_LIST_DIR}/python/lira" CACHE PATH "LIRA Python library path") +set(LIRA_RUBY_DIR "${CMAKE_CURRENT_LIST_DIR}/ruby/lira" CACHE PATH "LIRA Ruby library path") +set(LIRA_RUST_DIR "${CMAKE_CURRENT_LIST_DIR}/rust/lira" CACHE PATH "LIRA Rust library path") + +if(LIRA_PYTHON) + if(NOT TARGET lira-python) + add_library(lira-python INTERFACE) + target_compile_definitions(lira-python INTERFACE + LIRA_PYTHON_DIR="${LIRA_PYTHON_DIR}") + endif() +endif() + +if(LIRA_RUBY) + if(NOT TARGET lira-ruby) + add_library(lira-ruby INTERFACE) + target_compile_definitions(lira-ruby INTERFACE + LIRA_RUBY_DIR="${LIRA_RUBY_DIR}") + endif() +endif() + +if(LIRA_RUST) + if(NOT TARGET lira-rust) + add_library(lira-rust INTERFACE) + target_compile_definitions(lira-rust INTERFACE + LIRA_RUST_DIR="${LIRA_RUST_DIR}") + endif() +endif() diff --git a/README.md b/README.md index 9c4259a..645151a 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,42 @@ gem build ruby/lira.gemspec && gem install lira-*.gem cargo add --path rust/lira ``` +## CPM / CMake integration + +Configure and build: +```bash +cmake -B build -DLIRA_RUST=OFF +cmake --build build +``` + +Pull the entire project: +```cmake +include(cmake/CPM.cmake) +CPMAddPackage( + NAME lira + GITHUB_REPOSITORY ProteusLab/LIRA + GIT_TAG v0.1.0 + EXCLUDE_FROM_ALL YES + SYSTEM YES +) +# Source paths: ${LIRA_PYTHON_DIR} ${LIRA_RUBY_DIR} ${LIRA_RUST_DIR} +``` + +Sub-library selection via `OPTIONS`: +```cmake +CPMAddPackage( + NAME lira + GITHUB_REPOSITORY ProteusLab/LIRA + GIT_TAG v0.1.0 + EXCLUDE_FROM_ALL YES + OPTIONS "LIRA_RUBY OFF" + OPTIONS "LIRA_RUST OFF" +) +# Only ${LIRA_PYTHON_DIR} and lira-python target are created +``` + +CMake interface targets (source-only, no compilation): `lira-python` `lira-ruby` `lira-rust` + ## Examples - [Python 3 examples](python/examples) diff --git a/cmake/CPM.cmake b/cmake/CPM.cmake new file mode 100644 index 0000000..2c7081a --- /dev/null +++ b/cmake/CPM.cmake @@ -0,0 +1,22 @@ +# CPM.cmake — lightweight C/C++ package manager +# Source: https://github.com/cpm-cmake/CPM.cmake +# Distributed under MIT License +set(CPM_DOWNLOAD_VERSION 0.40.2) + +if(CPM_SOURCE_CACHE) + set(CPM_DOWNLOAD_LOCATION "${CPM_SOURCE_CACHE}/cpm/CPM_${CPM_DOWNLOAD_VERSION}.cmake") +elseif(DEFINED ENV{CPM_SOURCE_CACHE}) + set(CPM_DOWNLOAD_LOCATION "$ENV{CPM_SOURCE_CACHE}/cpm/CPM_${CPM_DOWNLOAD_VERSION}.cmake") +else() + set(CPM_DOWNLOAD_LOCATION "${CMAKE_BINARY_DIR}/cmake/CPM_${CPM_DOWNLOAD_VERSION}.cmake") +endif() + +if(NOT (EXISTS ${CPM_DOWNLOAD_LOCATION})) + message(STATUS "Downloading CPM.cmake to ${CPM_DOWNLOAD_LOCATION}") + file(DOWNLOAD + https://github.com/cpm-cmake/CPM.cmake/releases/download/v${CPM_DOWNLOAD_VERSION}/CPM.cmake + ${CPM_DOWNLOAD_LOCATION} + ) +endif() + +include(${CPM_DOWNLOAD_LOCATION})