/
MakeCxxBridge.cmake
39 lines (35 loc) · 1.48 KB
/
MakeCxxBridge.cmake
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
39
macro(add_cxxbridge CXXBRIDGE_LIBRARY_NAME CXXBRIDGES_TXT CRATE_NAME)
if (CMAKE_VS_PLATFORM_NAME)
set (build_dir "${CMAKE_VS_PLATFORM_NAME}/$<CONFIG>")
elseif(CMAKE_CONFIGURATION_TYPES)
set (build_dir "$<CONFIG>")
else()
set (build_dir .)
endif()
# cxxbridge
set(CXXBRIDGE_ROOT "${CMAKE_BINARY_DIR}/${build_dir}/cargo/build/${Rust_CARGO_HOST_TARGET}/cxxbridge")
file(STRINGS ${CXXBRIDGES_TXT} CXX_BRIDGES)
foreach(module ${CXX_BRIDGES})
list(APPEND CXXBRIDGE_SRCS "${CXXBRIDGE_ROOT}/${CRATE_NAME}/${module}.cc" "${CXXBRIDGE_ROOT}/${CRATE_NAME}/${module}.h")
endforeach()
list(APPEND CXXBRIDGE_SRCS "${CXXBRIDGE_ROOT}/rust/cxx.h")
expand_config_genex(SRCS_EXPANDED "${CXXBRIDGE_SRCS}")
message(${SRCS_EXPANDED})
set_source_files_properties(${SRCS_EXPANDED} PROPERTIES GENERATED 1)
add_library(${CXXBRIDGE_LIBRARY_NAME} STATIC ${CXXBRIDGE_SRCS})
set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${CXXBRIDGES_TXT})
set_target_properties(${CXXBRIDGE_LIBRARY_NAME} PROPERTIES LINKER_LANGUAGE CXX)
target_include_directories(${CXXBRIDGE_LIBRARY_NAME} INTERFACE "${CXXBRIDGE_ROOT}")
endmacro()
macro(expand_config_genex EXPANDED_LIST GENEX_LIST)
if(CMAKE_CONFIGURATION_TYPES)
foreach(config ${CMAKE_CONFIGURATION_TYPES})
foreach(src_genex ${GENEX_LIST})
string(REPLACE "$<CONFIG>" "${config}" expanded_src "${src_genex}")
list(APPEND ${EXPANDED_LIST} "${expanded_src}")
endforeach()
endforeach()
else()
set(${EXPANDED_LIST} "${GENEX_LIST}")
endif()
endmacro()