diff options
author | Slava Barinov <v.barinov@samsung.com> | 2020-01-28 13:05:03 +0300 |
---|---|---|
committer | Slava Barinov <v.barinov@samsung.com> | 2020-01-28 13:05:03 +0300 |
commit | 2ed89a511a84c595eb24af625bc0bd88f5a3ce21 (patch) | |
tree | 2b382dc518dc3fa4a496529cb87bf6f8d8a0f6ec /Tests/RunCMake/CSharpReferenceImport | |
parent | 5a33b45a98929bb730e6a11818416edd27e8fc00 (diff) | |
download | cmake-sandbox/vbarinov/dotnet_upgrade.tar.gz cmake-sandbox/vbarinov/dotnet_upgrade.tar.bz2 cmake-sandbox/vbarinov/dotnet_upgrade.zip |
configure updatedsandbox/vbarinov/dotnet_upgrade
Signed-off-by: Slava Barinov <v.barinov@samsung.com>
Diffstat (limited to 'Tests/RunCMake/CSharpReferenceImport')
17 files changed, 331 insertions, 0 deletions
diff --git a/Tests/RunCMake/CSharpReferenceImport/CMakeLists.txt b/Tests/RunCMake/CSharpReferenceImport/CMakeLists.txt new file mode 100644 index 000000000..74b3ff8de --- /dev/null +++ b/Tests/RunCMake/CSharpReferenceImport/CMakeLists.txt @@ -0,0 +1,3 @@ +cmake_minimum_required(VERSION 3.3) +project(${RunCMake_TEST} NONE) +include(${RunCMake_TEST}.cmake) diff --git a/Tests/RunCMake/CSharpReferenceImport/ImportLib.cmake b/Tests/RunCMake/CSharpReferenceImport/ImportLib.cmake new file mode 100644 index 000000000..5ad6e76c7 --- /dev/null +++ b/Tests/RunCMake/CSharpReferenceImport/ImportLib.cmake @@ -0,0 +1,45 @@ +enable_language(CXX CSharp) + +if(NOT DEFINED exportFileName OR + NOT DEFINED exportNameSpace OR + NOT DEFINED exportTargetName) + message(FATAL_ERROR "export information missing") +endif() + +add_library(${exportTargetName}CSharp SHARED + ImportLib.cs) + +# native c++ dll +add_library(${exportTargetName}Native SHARED + ImportLibNative.h + ImportLibNative.cxx) + +# mixed c++ dll +add_library(${exportTargetName}Mixed SHARED + ImportLibMixed.cxx + ImportLibMixedNative.h + ImportLibMixedNative.cxx) +set_target_properties(${exportTargetName}Mixed PROPERTIES + COMMON_LANGUAGE_RUNTIME "") + +# pure c++ dll +add_library(${exportTargetName}Pure SHARED + ImportLibPure.cxx) +set_target_properties(${exportTargetName}Pure PROPERTIES + COMMON_LANGUAGE_RUNTIME "pure") + +# safe c++ dll +add_library(${exportTargetName}Safe SHARED + ImportLibSafe.cxx) +set_target_properties(${exportTargetName}Safe PROPERTIES + COMMON_LANGUAGE_RUNTIME "safe") + +# generate export file +export(TARGETS + ${exportTargetName}CSharp + ${exportTargetName}Native + ${exportTargetName}Mixed + ${exportTargetName}Pure + ${exportTargetName}Safe + NAMESPACE "${exportNameSpace}:" + FILE "${exportFileName}") diff --git a/Tests/RunCMake/CSharpReferenceImport/ImportLib.cs b/Tests/RunCMake/CSharpReferenceImport/ImportLib.cs new file mode 100644 index 000000000..4eb28afac --- /dev/null +++ b/Tests/RunCMake/CSharpReferenceImport/ImportLib.cs @@ -0,0 +1,8 @@ +using System; + +public +class ImportLibCSharp +{ +public + static void Message() { Console.WriteLine("ImportLibCSharp"); } +} diff --git a/Tests/RunCMake/CSharpReferenceImport/ImportLibMixed.cxx b/Tests/RunCMake/CSharpReferenceImport/ImportLibMixed.cxx new file mode 100644 index 000000000..d0b810ef8 --- /dev/null +++ b/Tests/RunCMake/CSharpReferenceImport/ImportLibMixed.cxx @@ -0,0 +1,8 @@ +using namespace System; + +public +ref class ImportLibMixed +{ +public: + static void Message() { Console::WriteLine("ImportLibMixed"); } +}; diff --git a/Tests/RunCMake/CSharpReferenceImport/ImportLibMixedNative.cxx b/Tests/RunCMake/CSharpReferenceImport/ImportLibMixedNative.cxx new file mode 100644 index 000000000..c85a77631 --- /dev/null +++ b/Tests/RunCMake/CSharpReferenceImport/ImportLibMixedNative.cxx @@ -0,0 +1,8 @@ +#include "ImportLibMixedNative.h" + +#include <iostream> + +void ImportLibMixedNative::Message() +{ + std::cout << "ImportLibMixedNative" << std::endl; +} diff --git a/Tests/RunCMake/CSharpReferenceImport/ImportLibMixedNative.h b/Tests/RunCMake/CSharpReferenceImport/ImportLibMixedNative.h new file mode 100644 index 000000000..76b97c475 --- /dev/null +++ b/Tests/RunCMake/CSharpReferenceImport/ImportLibMixedNative.h @@ -0,0 +1,13 @@ +#pragma once + +#ifdef ImportLibMixed_EXPORTS +# define mixedAPI __declspec(dllexport) +#else +# define mixedAPI __declspec(dllimport) +#endif + +class mixedAPI ImportLibMixedNative +{ +public: + static void Message(); +}; diff --git a/Tests/RunCMake/CSharpReferenceImport/ImportLibNative.cxx b/Tests/RunCMake/CSharpReferenceImport/ImportLibNative.cxx new file mode 100644 index 000000000..8e08b9a0f --- /dev/null +++ b/Tests/RunCMake/CSharpReferenceImport/ImportLibNative.cxx @@ -0,0 +1,8 @@ +#include "ImportLibNative.h" + +#include <iostream> + +void ImportLibNative::Message() +{ + std::cout << "ImportLibNative" << std::endl; +} diff --git a/Tests/RunCMake/CSharpReferenceImport/ImportLibNative.h b/Tests/RunCMake/CSharpReferenceImport/ImportLibNative.h new file mode 100644 index 000000000..77bcb8222 --- /dev/null +++ b/Tests/RunCMake/CSharpReferenceImport/ImportLibNative.h @@ -0,0 +1,13 @@ +#pragma once + +#ifdef ImportLibNative_EXPORTS +# define nativeAPI __declspec(dllexport) +#else +# define nativeAPI __declspec(dllimport) +#endif + +class nativeAPI ImportLibNative +{ +public: + static void Message(); +}; diff --git a/Tests/RunCMake/CSharpReferenceImport/ImportLibPure.cxx b/Tests/RunCMake/CSharpReferenceImport/ImportLibPure.cxx new file mode 100644 index 000000000..271e37572 --- /dev/null +++ b/Tests/RunCMake/CSharpReferenceImport/ImportLibPure.cxx @@ -0,0 +1,8 @@ +using namespace System; + +public +ref class ImportLibPure +{ +public: + static void Message() { Console::WriteLine("ImportLibPure"); } +}; diff --git a/Tests/RunCMake/CSharpReferenceImport/ImportLibSafe.cxx b/Tests/RunCMake/CSharpReferenceImport/ImportLibSafe.cxx new file mode 100644 index 000000000..13b40da26 --- /dev/null +++ b/Tests/RunCMake/CSharpReferenceImport/ImportLibSafe.cxx @@ -0,0 +1,8 @@ +using namespace System; + +public +ref class ImportLibSafe +{ +public: + static void Message() { Console::WriteLine("ImportLibSafe"); } +}; diff --git a/Tests/RunCMake/CSharpReferenceImport/ReferenceImport.cmake b/Tests/RunCMake/CSharpReferenceImport/ReferenceImport.cmake new file mode 100644 index 000000000..c65f623a0 --- /dev/null +++ b/Tests/RunCMake/CSharpReferenceImport/ReferenceImport.cmake @@ -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") diff --git a/Tests/RunCMake/CSharpReferenceImport/ReferenceImport.cs b/Tests/RunCMake/CSharpReferenceImport/ReferenceImport.cs new file mode 100644 index 000000000..24175f6d7 --- /dev/null +++ b/Tests/RunCMake/CSharpReferenceImport/ReferenceImport.cs @@ -0,0 +1,13 @@ +using System; + +public class ReferenceImport +{ + public static void Main() + { + Console.WriteLine("ReferenceImportCSharp"); + ImportLibMixed.Message(); + ImportLibPure.Message(); + ImportLibSafe.Message(); + ImportLibCSharp.Message(); + } +} diff --git a/Tests/RunCMake/CSharpReferenceImport/ReferenceImportMixed.cxx b/Tests/RunCMake/CSharpReferenceImport/ReferenceImportMixed.cxx new file mode 100644 index 000000000..53ecd422e --- /dev/null +++ b/Tests/RunCMake/CSharpReferenceImport/ReferenceImportMixed.cxx @@ -0,0 +1,20 @@ +// clang-format off + +using namespace System; + +#using <ImportLibMixed.dll> +#using <ImportLibPure.dll> +#using <ImportLibSafe.dll> +#using <ImportLibCSharp.dll> + +#include "ImportLibNative.h" + +int main() +{ + Console::WriteLine("ReferenceImportMixed"); + ImportLibNative::Message(); + ImportLibMixed::Message(); + ImportLibPure::Message(); + ImportLibSafe::Message(); + ImportLibCSharp::Message(); +}; diff --git a/Tests/RunCMake/CSharpReferenceImport/ReferenceImportNative.cxx b/Tests/RunCMake/CSharpReferenceImport/ReferenceImportNative.cxx new file mode 100644 index 000000000..831a2c4a1 --- /dev/null +++ b/Tests/RunCMake/CSharpReferenceImport/ReferenceImportNative.cxx @@ -0,0 +1,13 @@ +// clang-format off + +#include "ImportLibNative.h" +#include "ImportLibMixedNative.h" + +#include <iostream> + +int main() +{ + std::cout << "ReferenceImportNative" << std::endl; + ImportLibNative::Message(); + ImportLibMixedNative::Message(); +}; diff --git a/Tests/RunCMake/CSharpReferenceImport/ReferenceImportPure.cxx b/Tests/RunCMake/CSharpReferenceImport/ReferenceImportPure.cxx new file mode 100644 index 000000000..2c5dd66dd --- /dev/null +++ b/Tests/RunCMake/CSharpReferenceImport/ReferenceImportPure.cxx @@ -0,0 +1,17 @@ +// clang-format off + +using namespace System; + +#using <ImportLibMixed.dll> +#using <ImportLibPure.dll> +#using <ImportLibSafe.dll> +#using <ImportLibCSharp.dll> + +int main() +{ + Console::WriteLine("ReferenceImportPure"); + ImportLibMixed::Message(); + ImportLibPure::Message(); + ImportLibSafe::Message(); + ImportLibCSharp::Message(); +}; diff --git a/Tests/RunCMake/CSharpReferenceImport/ReferenceImportSafe.cxx b/Tests/RunCMake/CSharpReferenceImport/ReferenceImportSafe.cxx new file mode 100644 index 000000000..277c96f20 --- /dev/null +++ b/Tests/RunCMake/CSharpReferenceImport/ReferenceImportSafe.cxx @@ -0,0 +1,17 @@ +// clang-format off + +using namespace System; + +#using <ImportLibMixed.dll> +#using <ImportLibPure.dll> +#using <ImportLibSafe.dll> +#using <ImportLibCSharp.dll> + +int main() +{ + Console::WriteLine("ReferenceImportSafe"); + ImportLibMixed::Message(); + ImportLibPure::Message(); + ImportLibSafe::Message(); + ImportLibCSharp::Message(); +}; diff --git a/Tests/RunCMake/CSharpReferenceImport/RunCMakeTest.cmake b/Tests/RunCMake/CSharpReferenceImport/RunCMakeTest.cmake new file mode 100644 index 000000000..c44e59e0a --- /dev/null +++ b/Tests/RunCMake/CSharpReferenceImport/RunCMakeTest.cmake @@ -0,0 +1,41 @@ +include(RunCMake) + +set(RunCMake_TEST_NO_CLEAN 1) + +set(exportFileName "${RunCMake_BINARY_DIR}/module.cmake") +set(exportNameSpace "ex") +set(exportTargetName "ImportLib") + +set(RunCMake_TEST_OPTIONS_BASE ${RunCMake_TEST_OPTIONS} + "-DexportNameSpace:INTERNAL=${exportNameSpace}" + "-DexportTargetName:INTERNAL=${exportTargetName}") + +file(REMOVE "${exportFileName}") + +# generate C# & C++ assemblies for use as imported target +set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/ImportLib-build) +file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}") +file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}") + +set(RunCMake_TEST_OPTIONS ${RunCMake_TEST_OPTIONS_BASE} + "-DexportFileName:INTERNAL=${exportFileName}" + # make sure we know the RunCMake_TEST if configuring the project again + # with cmake-gui for debugging. + "-DRunCMake_TEST:INTERNAL=ImportLib") + +run_cmake(ImportLib) +run_cmake_command(ImportLib-build ${CMAKE_COMMAND} --build . --config Debug) + +# generate C# & managed C++ programs which reference imported managed assemblies. +set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/ReferenceImport-build) +file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}") +file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}") + +set(RunCMake_TEST_OPTIONS ${RunCMake_TEST_OPTIONS_BASE} + "-DexportFileName:INTERNAL=${exportFileName}" + # make sure we know the RunCMake_TEST if configuring the project again + # with cmake-gui for debugging. + "-DRunCMake_TEST:INTERNAL=ReferenceImport") + +run_cmake(ReferenceImport) +run_cmake_command(ReferenceImport-build ${CMAKE_COMMAND} --build . --config Debug) |