46 lines
1.3 KiB
CMake
46 lines
1.3 KiB
CMake
# build the Rust side as a static library
|
|
set(impl_basename "${CARGO_TARGET_DIR}/release/libPROJECT_NAME_impl")
|
|
|
|
add_custom_command(
|
|
OUTPUT ${impl_basename}.a
|
|
COMMAND env CARGO_TARGET_DIR=${CARGO_TARGET_DIR} ${CARGO} build --release --package PROJECT-NAME-impl
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
|
DEPFILE ${impl_basename}.d
|
|
USES_TERMINAL
|
|
JOB_SERVER_AWARE TRUE
|
|
VERBATIM
|
|
DEPENDS_EXPLICIT_ONLY
|
|
)
|
|
|
|
# HACK ensure CMake *actually adds* the command above
|
|
add_custom_target(build_impl
|
|
DEPENDS ${impl_basename}.a
|
|
)
|
|
|
|
add_library(PROJECT_NAME_impl STATIC IMPORTED)
|
|
|
|
set_target_properties(PROJECT_NAME_impl PROPERTIES
|
|
IMPORTED_LOCATION ${impl_basename}.a
|
|
)
|
|
|
|
# generate the bindings
|
|
file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/include")
|
|
set(bindings_basename "${CMAKE_CURRENT_BINARY_DIR}/include/bindings")
|
|
|
|
add_custom_command(
|
|
OUTPUT ${bindings_basename}.hxx
|
|
COMMAND ${CBINDGEN} --only-target-dependencies --output "${bindings_basename}.hxx" --depfile "${bindings_basename}.d"
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
|
DEPFILE ${bindings_basename}.d
|
|
VERBATIM
|
|
CODEGEN
|
|
DEPENDS_EXPLICIT_ONLY
|
|
)
|
|
|
|
target_sources(PROJECT_NAME_impl INTERFACE
|
|
${bindings_basename}.hxx
|
|
)
|
|
target_include_directories(PROJECT_NAME_impl INTERFACE
|
|
"${CMAKE_CURRENT_BINARY_DIR}/include"
|
|
)
|