summaryrefslogtreecommitdiffstats
path: root/Tests/ISPC
diff options
context:
space:
mode:
authorRobert Maynard <robert.maynard@kitware.com>2020-09-10 17:21:07 (GMT)
committerBrad King <brad.king@kitware.com>2020-09-10 20:15:55 (GMT)
commit8de145cae18a8c368ffce60c511d6f6424c55aa2 (patch)
tree8dc8edb70a2e53e7f1096f28e8fcbe66e7cd2ce9 /Tests/ISPC
parenta83521e082f11fd08027e0f440408914bd83a5eb (diff)
downloadCMake-8de145cae18a8c368ffce60c511d6f6424c55aa2.zip
CMake-8de145cae18a8c368ffce60c511d6f6424c55aa2.tar.gz
CMake-8de145cae18a8c368ffce60c511d6f6424c55aa2.tar.bz2
ISPC: DynamicLibrary test now passes on windows.
The MSVC linker needs to know what MSVC runtime a shared library needs. ISPC objects don't have a '/DIRECTIVE' entry for the MSVC runtime as they have no dependency on it. Therefore we need to add a C or C++ source to each shared library so the MSVC linker knows what runtime to embed
Diffstat (limited to 'Tests/ISPC')
-rw-r--r--Tests/ISPC/DynamicLibrary/CMakeLists.txt4
-rw-r--r--Tests/ISPC/DynamicLibrary/extra.cxx8
-rw-r--r--Tests/ISPC/DynamicLibrary/main.cxx22
-rw-r--r--Tests/ISPC/DynamicLibrary/shim.cxx0
-rw-r--r--Tests/ISPC/DynamicLibrary/simple.cxx23
5 files changed, 45 insertions, 12 deletions
diff --git a/Tests/ISPC/DynamicLibrary/CMakeLists.txt b/Tests/ISPC/DynamicLibrary/CMakeLists.txt
index cbfbb3e..4655090 100644
--- a/Tests/ISPC/DynamicLibrary/CMakeLists.txt
+++ b/Tests/ISPC/DynamicLibrary/CMakeLists.txt
@@ -9,12 +9,14 @@ endif()
add_library(ispc_objects1 STATIC extra.ispc extra.cxx)
add_library(ispc_objects2 SHARED simple.ispc)
+target_sources(ispc_objects2 PRIVATE simple.cxx)
set_target_properties(ispc_objects1 PROPERTIES POSITION_INDEPENDENT_CODE ON)
+
set_target_properties(ispc_objects1 PROPERTIES ISPC_INSTRUCTION_SETS "sse2-i32x4;avx1-i32x16;avx2-i32x4")
set_target_properties(ispc_objects2 PROPERTIES ISPC_INSTRUCTION_SETS "sse2-i32x4")
-target_link_libraries(ispc_objects2 PRIVATE ispc_objects1)
+target_link_libraries(ispc_objects2 PUBLIC ispc_objects1)
add_executable(ISPCDynamicLibrary main.cxx)
target_link_libraries(ISPCDynamicLibrary PUBLIC ispc_objects2)
diff --git a/Tests/ISPC/DynamicLibrary/extra.cxx b/Tests/ISPC/DynamicLibrary/extra.cxx
index 88ef3a7..b3623d1 100644
--- a/Tests/ISPC/DynamicLibrary/extra.cxx
+++ b/Tests/ISPC/DynamicLibrary/extra.cxx
@@ -2,7 +2,13 @@
#include "extra.ispc.h"
-int extra()
+#ifdef _WIN32
+# define EXPORT __declspec(dllexport)
+#else
+# define EXPORT
+#endif
+
+EXPORT int extra()
{
float vin[16], vout[16];
for (int i = 0; i < 16; ++i)
diff --git a/Tests/ISPC/DynamicLibrary/main.cxx b/Tests/ISPC/DynamicLibrary/main.cxx
index 4f1c9be..f9072c7 100644
--- a/Tests/ISPC/DynamicLibrary/main.cxx
+++ b/Tests/ISPC/DynamicLibrary/main.cxx
@@ -1,15 +1,17 @@
-#include <stdio.h>
-#include "simple.ispc.h"
-int main()
-{
- float vin[16], vout[16];
- for (int i = 0; i < 16; ++i)
- vin[i] = i;
+#ifdef _WIN32
+# define IMPORT __declspec(dllimport)
+#else
+# define IMPORT
+#endif
- ispc::simple(vin, vout, 16);
+IMPORT int simple();
+int extra();
- for (int i = 0; i < 16; ++i)
- printf("%d: simple(%f) = %f\n", i, vin[i], vout[i]);
+int main()
+{
+ extra();
+ simple();
+ return 0;
}
diff --git a/Tests/ISPC/DynamicLibrary/shim.cxx b/Tests/ISPC/DynamicLibrary/shim.cxx
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Tests/ISPC/DynamicLibrary/shim.cxx
diff --git a/Tests/ISPC/DynamicLibrary/simple.cxx b/Tests/ISPC/DynamicLibrary/simple.cxx
new file mode 100644
index 0000000..cb5a779
--- /dev/null
+++ b/Tests/ISPC/DynamicLibrary/simple.cxx
@@ -0,0 +1,23 @@
+#include <stdio.h>
+
+#include "simple.ispc.h"
+
+#ifdef _WIN32
+# define EXPORT __declspec(dllexport)
+#else
+# define EXPORT
+#endif
+
+EXPORT int simple()
+{
+ float vin[16], vout[16];
+ for (int i = 0; i < 16; ++i)
+ vin[i] = i;
+
+ ispc::simple(vin, vout, 16);
+
+ for (int i = 0; i < 16; ++i)
+ printf("%d: extra(%f) = %f\n", i, vin[i], vout[i]);
+
+ return 0;
+}