gear-teeth/ui/impl.cmake
2026-10-17 21:25:44 +03:00

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"
)