Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -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()
36 changes: 36 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
22 changes: 22 additions & 0 deletions cmake/CPM.cmake
Original file line number Diff line number Diff line change
@@ -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})
Loading