Co-authored-by: Yuri Astrakhan <YuriAstrakhan@gmail.com> Co-authored-by: Ian Wagner <ianwagner+github@switzerlandmail.ch>
64 lines
2.0 KiB
CMake
64 lines
2.0 KiB
CMake
# Include guard
|
|
if(TARGET rustutils)
|
|
return()
|
|
endif()
|
|
|
|
include(FetchContent)
|
|
|
|
FetchContent_Declare(
|
|
Corrosion
|
|
GIT_REPOSITORY https://github.com/corrosion-rs/corrosion.git
|
|
GIT_TAG v0.5 # Optionally specify a commit hash, version tag or branch here
|
|
)
|
|
FetchContent_MakeAvailable(Corrosion)
|
|
|
|
corrosion_import_crate(MANIFEST_PATH ${CMAKE_CURRENT_LIST_DIR}/Cargo.toml)
|
|
|
|
# Define output directories for generated bindings
|
|
set(RUSTUTILS_OUTPUT_DIR "${CMAKE_BINARY_DIR}/rustutils_bindings")
|
|
set(RUSTUTILS_INCLUDE_DIR "${RUSTUTILS_OUTPUT_DIR}/cpp/include")
|
|
set(RUSTUTILS_SRC_DIR "${RUSTUTILS_OUTPUT_DIR}/cpp/src")
|
|
|
|
# Ensure the output directories exist
|
|
file(MAKE_DIRECTORY ${RUSTUTILS_INCLUDE_DIR})
|
|
file(MAKE_DIRECTORY ${RUSTUTILS_SRC_DIR})
|
|
|
|
set(RUSTUTILS_RS_FILES
|
|
${CMAKE_CURRENT_LIST_DIR}/src/color.rs
|
|
)
|
|
|
|
# Initialize variables for generated files
|
|
set(RUSTUTILS_GENERATED_SOURCES)
|
|
set(RUSTUTILS_GENERATED_HEADERS)
|
|
|
|
# Transform .rs to .rs.cpp and .hpp
|
|
foreach(rs_file ${RUSTUTILS_RS_FILES})
|
|
get_filename_component(base_name ${rs_file} NAME_WE)
|
|
list(APPEND RUSTUTILS_GENERATED_SOURCES "${RUSTUTILS_SRC_DIR}/${base_name}.rs.cpp")
|
|
list(APPEND RUSTUTILS_GENERATED_HEADERS "${RUSTUTILS_INCLUDE_DIR}/rustutils/${base_name}.hpp")
|
|
endforeach()
|
|
|
|
add_custom_command(
|
|
OUTPUT ${RUSTUTILS_GENERATED_SOURCES} ${RUSTUTILS_GENERATED_HEADERS}
|
|
COMMAND ${CMAKE_COMMAND} -E env
|
|
${CMAKE_CURRENT_LIST_DIR}/generate.sh ${RUSTUTILS_OUTPUT_DIR} ${RUSTUTILS_RS_FILES}
|
|
DEPENDS ${CMAKE_CURRENT_LIST_DIR}/generate.sh ${RUSTUTILS_RS_FILES}
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
|
|
COMMENT "Generating C++ bindings for Rust sources"
|
|
VERBATIM
|
|
)
|
|
|
|
add_custom_target(rustutils_bindings DEPENDS ${RUSTUTILS_GENERATED_SOURCES} ${RUSTUTILS_GENERATED_HEADERS})
|
|
|
|
add_library(mbgl-rustutils STATIC
|
|
${RUSTUTILS_GENERATED_SOURCES}
|
|
)
|
|
|
|
add_dependencies(mbgl-rustutils rustutils_bindings)
|
|
|
|
target_include_directories(mbgl-rustutils PUBLIC
|
|
${RUSTUTILS_INCLUDE_DIR}
|
|
)
|
|
|
|
target_link_libraries(mbgl-rustutils PUBLIC rustutils)
|