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
+ if (NOT MSVC )
14
+ file (MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /libva_build)
15
+ file (MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /libva_install)
16
+ ExternalProject_Add(libva
17
+ GIT_REPOSITORY https://github.com/intel/libva.git
18
+ GIT_TAG bef69c5f380a27b6908d6daea0fc18ce50e33bb9
19
+ BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR} /libva_build
20
+ INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR} /libva_install
21
+ CONFIGURE_COMMAND cd ${CMAKE_CURRENT_BINARY_DIR} /libva-prefix /src/libva && ./autogen.sh --prefix =${CMAKE_CURRENT_BINARY_DIR} /libva_install
22
+ BUILD_COMMAND cd ${CMAKE_CURRENT_BINARY_DIR} /libva-prefix /src/libva && make -j
23
+ INSTALL_COMMAND cd ${CMAKE_CURRENT_BINARY_DIR} /libva-prefix /src/libva && make install
24
+ )
25
+ ExternalProject_Add_Step(libva llvminstall
26
+ 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
27
+ COMMENT "Installing libva into the LLVM binary directory"
28
+ DEPENDEES install
29
+ )
30
+ endif ()
31
+
32
+ file (MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /cm-emu_build)
33
+ file (MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /cm-emu_install)
34
+
35
+ if (MSVC )
36
+ set (LIBCM ${LLVM_BINARY_DIR} /pi_esimd_cpu_deps/lib/libcm${CMAKE_STATIC_LIBRARY_SUFFIX} )
37
+ set (LIBIGFXCMRT_EMU ${LLVM_BINARY_DIR} /pi_esimd_cpu_deps/lib/igfxcmrt64_emu${CMAKE_STATIC_LIBRARY_SUFFIX} )
38
+ else ()
39
+ set (LIBCM ${LLVM_BINARY_DIR} /pi_esimd_cpu_deps/lib/libcm${CMAKE_SHARED_LIBRARY_SUFFIX} )
40
+ set (LIBIGFXCMRT_EMU ${LLVM_BINARY_DIR} /pi_esimd_cpu_deps/lib/libigfxcmrt_emu${CMAKE_SHARED_LIBRARY_SUFFIX} )
41
+ endif ()
42
+
43
+ if (DEFINED CM_LOCAL_SOURCE_DIR)
44
+ # Using local CM directory for online building without downloading
45
+ if (MSVC )
46
+ ExternalProject_Add(cm-emu
47
+ DOWNLOAD_COMMAND ""
48
+ SOURCE_DIR ${CM_LOCAL_SOURCE_DIR}
49
+ BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR} /cm-emu_build
50
+ INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR} /cm-emu_install
51
+ CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
52
+ BUILD_BYPRODUCTS ${LIBCM} ${LIBIGFXCMRT_EMU}
53
+ )
54
+ else ()
55
+ ExternalProject_Add(cm-emu
56
+ DOWNLOAD_COMMAND ""
57
+ SOURCE_DIR ${CM_LOCAL_SOURCE_DIR}
58
+ BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR} /cm-emu_build
59
+ INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR} /cm-emu_install
60
+ CMAKE_ARGS -DLIBVA_INSTALL_PATH=${CMAKE_CURRENT_BINARY_DIR} /libva_install
61
+ -D__SYCL_EXPLICIT_SIMD_PLUGIN__=true
62
+ -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
63
+ DEPENDS libva
64
+ BUILD_BYPRODUCTS ${LIBCM} ${LIBIGFXCMRT_EMU}
65
+ )
66
+ endif ()
67
+ else ()
68
+ if (DEFINED CM_PACKAGE_URL)
69
+ # Downloading pre-built CM Package
70
+ file (MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /cm-emu_install)
71
+ ExternalProject_Add(cm-emu
72
+ URL ${CM_PACKAGE_URL}
73
+ CONFIGURE_COMMAND ""
74
+ BUILD_COMMAND ""
75
+ UPDATE_COMMAND ""
76
+ INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR} /cm-emu_install
77
+ INSTALL_COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_BINARY_DIR} /cm-emu-prefix /src/cm-emu/ <INSTALL_DIR>
78
+ BUILD_BYPRODUCTS ${LIBCM} ${LIBIGFXCMRT_EMU}
79
+ )
80
+ else ()
81
+ # Build from CM source tree fetched from github
82
+ if (MSVC )
83
+ message (FATAL_ERROR "Online-building of CM_EMU library is not supported under Windows environment" )
84
+ else ()
85
+ ExternalProject_Add(cm-emu
86
+ GIT_REPOSITORY https://github.com/intel/cm-cpu-emulation.git
87
+ BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR} /cm-emu_build
88
+ INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR} /cm-emu_install
89
+ CMAKE_ARGS -DLIBVA_INSTALL_PATH=${CMAKE_CURRENT_BINARY_DIR} /libva_install
90
+ -D__SYCL_EXPLICIT_SIMD_PLUGIN__=true
91
+ -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
92
+ DEPENDS libva
93
+ BUILD_BYPRODUCTS ${LIBCM} ${LIBIGFXCMRT_EMU}
94
+ )
95
+ endif ()
96
+ endif ()
97
+ endif ()
98
+ ExternalProject_Add_Step(cm-emu llvminstall
99
+ 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
100
+ COMMENT "Installing cm-emu into the LLVM binary directory"
101
+ DEPENDEES install
102
+ )
103
+
104
+ include_directories (${LLVM_BINARY_DIR} /pi_esimd_cpu_deps/include /igfxcmrt_emu)
105
+ include_directories (${LLVM_BINARY_DIR} /pi_esimd_cpu_deps/include /libcm/cm)
106
+
107
+ # Compilation flag to exclude lines in header files imported from CM
108
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__SYCL_EXPLICIT_SIMD_PLUGIN__" )
109
+
110
+ set (CMAKE_CXX_STANDARD 17)
111
+
112
+ # Compilation option modification to prevent build termination caused by
113
+ # warnings from CM-imported files
114
+ if (MSVC )
115
+ string (REPLACE "/W4" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} " )
116
+ else ()
117
+ string (REPLACE "-pedantic" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} " )
118
+ endif ()
8
119
9
120
add_library (pi_esimd_cpu SHARED
10
121
"${sycl_inc_dir} /CL/sycl/detail/pi.h"
@@ -31,16 +142,42 @@ else()
31
142
)
32
143
endif ()
33
144
145
+ add_dependencies (pi_esimd_cpu OpenCL-Headers)
146
+ add_dependencies (pi_esimd_cpu cm-emu)
34
147
add_dependencies (sycl-toolchain pi_esimd_cpu)
35
148
36
- add_dependencies (pi_esimd_cpu
37
- OpenCL-Headers)
38
-
39
- target_link_libraries (pi_esimd_cpu PRIVATE sycl)
149
+ target_link_libraries (pi_esimd_cpu PRIVATE sycl ${LIBCM} ${LIBIGFXCMRT_EMU} )
40
150
set_target_properties (pi_esimd_cpu PROPERTIES LINKER_LANGUAGE CXX)
41
151
42
152
add_common_options(pi_esimd_cpu)
43
153
44
154
install (TARGETS pi_esimd_cpu
45
- LIBRARY DESTINATION "lib${LLVM_LIBDIR_SUFFIX} " COMPONENT pi_esimd_cpu
46
- RUNTIME DESTINATION "bin" COMPONENT pi_esimd_cpu)
155
+ LIBRARY DESTINATION "lib${LLVM_LIBDIR_SUFFIX} " COMPONENT pi_esimd_cpu
156
+ RUNTIME DESTINATION "bin" COMPONENT pi_esimd_cpu)
157
+
158
+ # Copy CM Header files to $(INSTALL)/include/sycl/CL/
159
+ install (DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /cm-emu_install/include /libcm/cm/
160
+ DESTINATION ${SYCL_INCLUDE_DIR} /CL
161
+ COMPONENT libcmrt-headers
162
+ FILES_MATCHING PATTERN "*.h"
163
+ )
164
+
165
+ # Copy '.so' files to '$(INSTALL)/lib'
166
+ if (MSVC )
167
+ install (DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /cm-emu_install/lib/
168
+ DESTINATION ${CMAKE_INSTALL_PREFIX} /lib
169
+ COMPONENT libcmrt-libs
170
+ FILES_MATCHING PATTERN "*.lib"
171
+ )
172
+ install (DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /cm-emu_install/bin/
173
+ DESTINATION ${CMAKE_INSTALL_PREFIX} /bin
174
+ COMPONENT libcmrt-dlls
175
+ FILES_MATCHING PATTERN "*.dll"
176
+ )
177
+ else ()
178
+ install (DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /cm-emu_install/lib/
179
+ DESTINATION ${CMAKE_INSTALL_PREFIX} /lib
180
+ COMPONENT libcmrt-sos
181
+ FILES_MATCHING PATTERN "*.so"
182
+ )
183
+ endif ()
0 commit comments