2
2
# PI Esimd CPU library
3
3
# Create Shared library for libpi_esimd_cpu.so.
4
4
5
+ include (ExternalProject)
6
+
5
7
include_directories ("${sycl_inc_dir} " )
8
+ # FIXME/TODO: 'pi.h' is included in 'pi_esimd_cpu.cpp', and CL_*_INTEL
9
+ # and CL_*_KHR definitions in 'pi.h' are from
10
+ # ${OPENCL_INCLUDE}. Remove build dependency on OpenCL
6
11
include_directories (${OpenCL_INCLUDE_DIR} )
7
- include_directories (${LIBCMRT_INCLUDE} )
12
+
13
+ file (MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /cm-emu_build)
14
+ file (MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /cm-emu_install)
15
+
16
+ if (MSVC )
17
+ set (LIBCM ${LLVM_BINARY_DIR} /pi_esimd_cpu_deps/lib/libcm${CMAKE_STATIC_LIBRARY_SUFFIX} )
18
+ set (LIBIGFXCMRT_EMU ${LLVM_BINARY_DIR} /pi_esimd_cpu_deps/lib/igfxcmrt64_emu${CMAKE_STATIC_LIBRARY_SUFFIX} )
19
+ else ()
20
+ set (LIBCM ${LLVM_BINARY_DIR} /pi_esimd_cpu_deps/lib/libcm${CMAKE_SHARED_LIBRARY_SUFFIX} )
21
+ set (LIBIGFXCMRT_EMU ${LLVM_BINARY_DIR} /pi_esimd_cpu_deps/lib/libigfxcmrt_emu${CMAKE_SHARED_LIBRARY_SUFFIX} )
22
+ endif ()
23
+
24
+ if (DEFINED CM_LOCAL_SOURCE_DIR)
25
+ # Using local CM directory for online building without downloading
26
+ if (MSVC )
27
+ ExternalProject_Add(cm-emu
28
+ DOWNLOAD_COMMAND ""
29
+ SOURCE_DIR ${CM_LOCAL_SOURCE_DIR}
30
+ BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR} /cm-emu_build
31
+ INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR} /cm-emu_install
32
+ CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
33
+ BUILD_BYPRODUCTS ${LIBCM} ${LIBIGFXCMRT_EMU}
34
+ )
35
+ else ()
36
+ ExternalProject_Add(cm-emu
37
+ DOWNLOAD_COMMAND ""
38
+ SOURCE_DIR ${CM_LOCAL_SOURCE_DIR}
39
+ BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR} /cm-emu_build
40
+ INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR} /cm-emu_install
41
+ CMAKE_ARGS -DLIBVA_INSTALL_PATH=/usr
42
+ -D__SYCL_EXPLICIT_SIMD_PLUGIN__=true
43
+ -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
44
+ BUILD_BYPRODUCTS ${LIBCM} ${LIBIGFXCMRT_EMU}
45
+ )
46
+ endif ()
47
+ else ()
48
+ # Downloading pre-built CM Package
49
+ if (NOT DEFINED CM_PACKAGE_URL)
50
+ if (MSVC )
51
+ message (FATAL_ERROR "ESIMD_CPU is not supported under Windows environment yet" )
52
+ else ()
53
+ # FIXME/TODO : Use 'generic' package instead of 'u18.04'
54
+ set (CM_PACKAGE_URL "https://github.com/intel/cm-cpu-emulation/releases/download/v2021-07-21/intel-cmemu-1.0.1.u18.04-release.x86_64.tar.xz" )
55
+ endif ()
56
+ endif ()
57
+ file (MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /cm-emu_install)
58
+ ExternalProject_Add(cm-emu
59
+ URL ${CM_PACKAGE_URL}
60
+ CONFIGURE_COMMAND ""
61
+ BUILD_COMMAND ""
62
+ UPDATE_COMMAND ""
63
+ INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR} /cm-emu_install
64
+ INSTALL_COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_BINARY_DIR} /cm-emu-prefix /src/cm-emu/ <INSTALL_DIR>
65
+ BUILD_BYPRODUCTS ${LIBCM} ${LIBIGFXCMRT_EMU}
66
+ )
67
+ endif ()
68
+ ExternalProject_Add_Step(cm-emu llvminstall
69
+ COMMAND ${CMAKE_COMMAND} -E make_directory ${LLVM_BINARY_DIR} /pi_esimd_cpu_deps && ${CMAKE_COMMAND} -E copy_directory <INSTALL_DIR>/ ${LLVM_BINARY_DIR} /pi_esimd_cpu_deps
70
+ COMMENT "Installing cm-emu into the LLVM binary directory"
71
+ DEPENDEES install
72
+ )
73
+
74
+ include_directories (${LLVM_BINARY_DIR} /pi_esimd_cpu_deps/include /igfxcmrt_emu)
75
+ include_directories (${LLVM_BINARY_DIR} /pi_esimd_cpu_deps/include /libcm/cm)
76
+
77
+ # Compilation flag to exclude lines in header files imported from CM
78
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__SYCL_EXPLICIT_SIMD_PLUGIN__" )
79
+
80
+ set (CMAKE_CXX_STANDARD 17)
81
+
82
+ # Compilation option modification to prevent build termination caused by
83
+ # warnings from CM-imported files
84
+ if (MSVC )
85
+ string (REPLACE "/W4" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} " )
86
+ else ()
87
+ string (REPLACE "-pedantic" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} " )
88
+ endif ()
8
89
9
90
add_library (pi_esimd_cpu SHARED
10
91
"${sycl_inc_dir} /CL/sycl/detail/pi.h"
@@ -31,16 +112,42 @@ else()
31
112
)
32
113
endif ()
33
114
115
+ add_dependencies (pi_esimd_cpu OpenCL-Headers)
116
+ add_dependencies (pi_esimd_cpu cm-emu)
34
117
add_dependencies (sycl-toolchain pi_esimd_cpu)
35
118
36
- add_dependencies (pi_esimd_cpu
37
- OpenCL-Headers)
38
-
39
- target_link_libraries (pi_esimd_cpu PRIVATE sycl)
119
+ target_link_libraries (pi_esimd_cpu PRIVATE sycl ${LIBCM} ${LIBIGFXCMRT_EMU} )
40
120
set_target_properties (pi_esimd_cpu PROPERTIES LINKER_LANGUAGE CXX)
41
121
42
122
add_common_options(pi_esimd_cpu)
43
123
44
124
install (TARGETS pi_esimd_cpu
45
- LIBRARY DESTINATION "lib${LLVM_LIBDIR_SUFFIX} " COMPONENT pi_esimd_cpu
46
- RUNTIME DESTINATION "bin" COMPONENT pi_esimd_cpu)
125
+ LIBRARY DESTINATION "lib${LLVM_LIBDIR_SUFFIX} " COMPONENT pi_esimd_cpu
126
+ RUNTIME DESTINATION "bin" COMPONENT pi_esimd_cpu)
127
+
128
+ # Copy CM Header files to $(INSTALL)/include/sycl/CL/
129
+ install (DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /cm-emu_install/include /libcm/cm/
130
+ DESTINATION ${SYCL_INCLUDE_DIR} /CL
131
+ COMPONENT libcmrt-headers
132
+ FILES_MATCHING PATTERN "*.h"
133
+ )
134
+
135
+ # Copy '.so' files to '$(INSTALL)/lib'
136
+ if (MSVC )
137
+ install (DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /cm-emu_install/lib/
138
+ DESTINATION ${CMAKE_INSTALL_PREFIX} /lib
139
+ COMPONENT libcmrt-libs
140
+ FILES_MATCHING PATTERN "*.lib"
141
+ )
142
+ install (DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /cm-emu_install/bin/
143
+ DESTINATION ${CMAKE_INSTALL_PREFIX} /bin
144
+ COMPONENT libcmrt-dlls
145
+ FILES_MATCHING PATTERN "*.dll"
146
+ )
147
+ else ()
148
+ install (DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /cm-emu_install/lib/
149
+ DESTINATION ${CMAKE_INSTALL_PREFIX} /lib
150
+ COMPONENT libcmrt-sos
151
+ FILES_MATCHING PATTERN "*.so"
152
+ )
153
+ endif ()
0 commit comments