|
|
@@ -0,0 +1,88 @@
|
|
|
+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")
|