aboutsummaryrefslogtreecommitdiff
path: root/libs/nak_ffi/CMakeLists.txt
blob: 72d939f7c75f4f9f5272b0875c4a0edc28cd8ccc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
cmake_minimum_required(VERSION 3.16)
project(nak_ffi)

if(CMAKE_BUILD_TYPE STREQUAL "Debug")
    set(CARGO_BUILD_TYPE "debug")
    set(CARGO_BUILD_FLAGS "")
else()
    set(CARGO_BUILD_TYPE "release")
    set(CARGO_BUILD_FLAGS "--release")
endif()

set(NAK_FFI_DIR ${CMAKE_CURRENT_SOURCE_DIR})
set(NAK_FFI_LIB ${NAK_FFI_DIR}/target/${CARGO_BUILD_TYPE}/libnak_ffi.so)

# Glob all Rust sources so any change triggers a cargo rebuild
file(GLOB_RECURSE NAK_FFI_SOURCES ${NAK_FFI_DIR}/src/*.rs)
file(GLOB_RECURSE NAK_SOURCES ${NAK_FFI_DIR}/../nak/src/*.rs)

add_custom_command(
    OUTPUT ${NAK_FFI_LIB}
    COMMAND cargo build ${CARGO_BUILD_FLAGS}
    WORKING_DIRECTORY ${NAK_FFI_DIR}
    COMMENT "Building NaK FFI library (Rust)"
    DEPENDS ${NAK_FFI_DIR}/Cargo.toml ${NAK_FFI_DIR}/../nak/Cargo.toml
            ${NAK_FFI_SOURCES} ${NAK_SOURCES}
)

add_custom_target(nak_ffi_build DEPENDS ${NAK_FFI_LIB})

# INTERFACE wrapper so ALIAS works (CMake can't alias IMPORTED targets)
add_library(nak_ffi_wrapper INTERFACE)
target_link_libraries(nak_ffi_wrapper INTERFACE ${NAK_FFI_LIB})
target_include_directories(nak_ffi_wrapper INTERFACE ${NAK_FFI_DIR}/include)
add_dependencies(nak_ffi_wrapper nak_ffi_build)
add_library(mo2::nak_ffi ALIAS nak_ffi_wrapper)

install(FILES ${NAK_FFI_LIB} DESTINATION lib)
install(DIRECTORY ${NAK_FFI_DIR}/include/ DESTINATION include)