3FS/cmake/AddCrate.cmake
2025-02-27 21:53:53 +08:00

34 lines
1.0 KiB
CMake

if (CMAKE_BUILD_TYPE STREQUAL "Debug")
set(CARGO_CMD cargo build)
set(TARGET_DIR "debug")
else ()
set(CARGO_CMD cargo build --release)
set(TARGET_DIR "release")
endif ()
add_custom_target(
cargo_build_all ALL
COMMAND ${CARGO_CMD}
WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}"
)
macro(add_crate NAME)
set(LIBRARY "${PROJECT_SOURCE_DIR}/target/${TARGET_DIR}/lib${NAME}.a")
set(SOURCES
"${PROJECT_SOURCE_DIR}/target/cxxbridge/${NAME}/src/cxx.rs.h"
"${PROJECT_SOURCE_DIR}/target/cxxbridge/${NAME}/src/cxx.rs.cc"
)
add_custom_command(
OUTPUT ${SOURCES} ${LIBRARY}
COMMAND ${CARGO_CMD}
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/${NAME}"
)
add_library(${NAME} STATIC ${SOURCES} ${LIBRARY})
target_link_libraries(${NAME} pthread dl ${LIBRARY})
target_include_directories(${NAME} PUBLIC "${PROJECT_SOURCE_DIR}/target/cxxbridge")
target_compile_options(${NAME} PUBLIC -Wno-dollar-in-identifier-extension)
add_dependencies(${NAME} cargo_build_all)
endmacro()