You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
89 lines
2.6 KiB
89 lines
2.6 KiB
6 years ago
|
enable_language(CXX CSharp)
|
||
|
|
||
|
if(NOT DEFINED exportFileName OR
|
||
|
NOT DEFINED exportNameSpace OR
|
||
|
NOT DEFINED exportTargetName)
|
||
|
message(FATAL_ERROR "export information missing")
|
||
|
endif()
|
||
|
|
||
|
# Include generated export file.
|
||
|
if(NOT EXISTS "${exportFileName}")
|
||
|
message(FATAL_ERROR "exportFileNameCSharp does not exist: ${exportFileName}")
|
||
|
endif()
|
||
|
include(${exportFileName})
|
||
|
|
||
|
# Verify expected targets are imported
|
||
|
set(linkNames linkNameCSharp linkNameNative linkNameMixed
|
||
|
linkNamePure linkNameSafe)
|
||
|
set(linkNameCSharp "${exportNameSpace}:${exportTargetName}CSharp")
|
||
|
set(linkNameNative "${exportNameSpace}:${exportTargetName}Native")
|
||
|
set(linkNameMixed "${exportNameSpace}:${exportTargetName}Mixed")
|
||
|
set(linkNamePure "${exportNameSpace}:${exportTargetName}Pure")
|
||
|
set(linkNameSafe "${exportNameSpace}:${exportTargetName}Safe")
|
||
|
foreach(l ${linkNames})
|
||
|
if(NOT TARGET ${${l}})
|
||
|
message(FATAL_ERROR "imported target not found (${${l}})")
|
||
|
endif()
|
||
|
endforeach()
|
||
|
|
||
|
# Test referencing managed assemblies from C# executable.
|
||
|
add_executable(ReferenceImportCSharp ReferenceImport.cs)
|
||
|
target_link_libraries(ReferenceImportCSharp
|
||
|
${linkNameCSharp}
|
||
|
${linkNameNative} # ignored
|
||
|
${linkNameMixed}
|
||
|
${linkNamePure}
|
||
|
${linkNameSafe}
|
||
|
)
|
||
|
|
||
|
# native C++ executable.
|
||
|
add_executable(ReferenceImportNative ReferenceImportNative.cxx)
|
||
|
target_link_libraries(ReferenceImportNative
|
||
|
${linkNameCSharp} # ignored
|
||
|
${linkNameNative}
|
||
|
${linkNameMixed}
|
||
|
${linkNamePure} # ignored
|
||
|
${linkNameSafe} # ignored
|
||
|
)
|
||
|
add_custom_command(TARGET ReferenceImportNative POST_BUILD
|
||
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
||
|
"$<TARGET_FILE:${linkNameNative}>"
|
||
|
"${CMAKE_BINARY_DIR}/$<CONFIG>"
|
||
|
)
|
||
|
|
||
|
# mixed C++ executable.
|
||
|
add_executable(ReferenceImportMixed ReferenceImportMixed.cxx)
|
||
|
target_link_libraries(ReferenceImportMixed
|
||
|
${linkNameCSharp}
|
||
|
${linkNameNative}
|
||
|
${linkNameMixed}
|
||
|
${linkNamePure}
|
||
|
${linkNameSafe}
|
||
|
)
|
||
|
set_target_properties(ReferenceImportMixed PROPERTIES
|
||
|
COMMON_LANGUAGE_RUNTIME "")
|
||
|
|
||
|
# pure C++ executable.
|
||
|
add_executable(ReferenceImportPure ReferenceImportPure.cxx)
|
||
|
target_link_libraries(ReferenceImportPure
|
||
|
${linkNameCSharp}
|
||
|
${linkNameNative} # ignored
|
||
|
${linkNameMixed}
|
||
|
${linkNamePure}
|
||
|
${linkNameSafe}
|
||
|
)
|
||
|
set_target_properties(ReferenceImportPure PROPERTIES
|
||
|
COMMON_LANGUAGE_RUNTIME "pure")
|
||
|
|
||
|
# native C++ executable.
|
||
|
add_executable(ReferenceImportSafe ReferenceImportSafe.cxx)
|
||
|
target_link_libraries(ReferenceImportSafe
|
||
|
${linkNameCSharp}
|
||
|
${linkNameNative} # ignored
|
||
|
${linkNameMixed}
|
||
|
${linkNamePure}
|
||
|
${linkNameSafe}
|
||
|
)
|
||
|
set_target_properties(ReferenceImportSafe PROPERTIES
|
||
|
COMMON_LANGUAGE_RUNTIME "safe")
|