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