forked from intel/llvm
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
200 lines (174 loc) · 6.23 KB
/
Copy pathCMakeLists.txt
File metadata and controls
200 lines (174 loc) · 6.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
#To-Do:
#1. Figure out why CMP0057 has to be set. Should have been taken care of earlier in the build
#2. Use AddLLVM to modify the build and access config options
#cmake_policy(SET CMP0057 NEW)
#include(AddLLVM)
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/version.rc.in
${CMAKE_CURRENT_BINARY_DIR}/version.rc
@ONLY)
if (SYCL_ENABLE_XPTI_TRACING)
if (NOT EXISTS ${LLVM_EXTERNAL_XPTI_SOURCE_DIR})
message (FATAL_ERROR "Undefined LLVM_EXTERNAL_XPTI_SOURCE_DIR variable: Must be set when XPTI tracing is set to ON")
endif()
include_directories(${LLVM_EXTERNAL_XPTI_SOURCE_DIR}/include)
endif()
function(add_sycl_rt_library LIB_NAME)
# Add an optional argument so we can get the library name to
# link with for Windows Debug version
cmake_parse_arguments(ARG "" "XPTI_LIB" "COMPILE_OPTIONS;SOURCES" ${ARGN})
set(LIB_OBJ_NAME ${LIB_NAME}_object)
add_library(${LIB_OBJ_NAME} OBJECT ${ARG_SOURCES})
add_library(${LIB_NAME} SHARED
$<TARGET_OBJECTS:${LIB_OBJ_NAME}>
${CMAKE_CURRENT_BINARY_DIR}/version.rc)
if (ARG_COMPILE_OPTIONS)
target_compile_options(${LIB_OBJ_NAME} PRIVATE ${ARG_COMPILE_OPTIONS})
endif()
#To-Do: Remove dependency on icd loader and opencl headers.
add_dependencies(${LIB_OBJ_NAME}
ocl-icd
ocl-headers
sycl-headers
)
set_target_properties(${LIB_NAME} PROPERTIES LINKER_LANGUAGE CXX)
if (SYCL_ENABLE_XPTI_TRACING)
target_compile_definitions(${LIB_OBJ_NAME} PRIVATE XPTI_ENABLE_INSTRUMENTATION XPTI_STATIC_LIBRARY)
target_link_libraries(${LIB_NAME} PRIVATE ${ARG_XPTI_LIB})
endif()
if (MSVC)
target_compile_definitions(${LIB_OBJ_NAME} PRIVATE __SYCL_BUILD_SYCL_DLL )
target_link_libraries(${LIB_NAME} PRIVATE shlwapi)
else()
target_compile_options(${LIB_OBJ_NAME} PUBLIC
-fvisibility=hidden -fvisibility-inlines-hidden)
set(linker_script "${CMAKE_CURRENT_SOURCE_DIR}/ld-version-script.txt")
target_link_libraries(
${LIB_NAME} PRIVATE "-Wl,--version-script=${linker_script}")
set_target_properties(${LIB_NAME} PROPERTIES LINK_DEPENDS ${linker_script})
if (SYCL_ENABLE_XPTI_TRACING)
target_link_libraries(${LIB_NAME} PRIVATE dl)
endif()
endif()
target_include_directories(
${LIB_OBJ_NAME}
PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}
"${sycl_inc_dir}"
${OpenCL_INCLUDE_DIRS}
)
find_package(Threads REQUIRED)
target_link_libraries(${LIB_NAME}
PRIVATE
${OpenCL_LIBRARIES}
${CMAKE_DL_LIBS}
${CMAKE_THREAD_LIBS_INIT}
PUBLIC
$<$<BOOL:${SYCL_BUILD_PI_CUDA}>:pi_cuda>
)
target_compile_definitions(${LIB_OBJ_NAME}
PUBLIC
$<$<BOOL:${SYCL_BUILD_PI_CUDA}>:USE_PI_CUDA>)
add_common_options(${LIB_NAME})
set_target_properties(${LIB_NAME} PROPERTIES
VERSION ${SYCL_VERSION_STRING}
SOVERSION ${SYCL_MAJOR_VERSION})
endfunction(add_sycl_rt_library)
set(SYCL_SOURCES
"${sycl_inc_dir}/CL/sycl.hpp"
"backend/opencl.cpp"
"backend/level_zero.cpp"
"detail/accessor_impl.cpp"
"detail/buffer_impl.cpp"
"detail/builtins_common.cpp"
"detail/builtins_geometric.cpp"
"detail/builtins_integer.cpp"
"detail/builtins_math.cpp"
"detail/builtins_relational.cpp"
"detail/pi.cpp"
"detail/common.cpp"
"detail/config.cpp"
"detail/context_impl.cpp"
"detail/device_binary_image.cpp"
"detail/device_impl.cpp"
"detail/error_handling/enqueue_kernel.cpp"
"detail/event_impl.cpp"
"detail/force_device.cpp"
"detail/helpers.cpp"
"detail/handler_proxy.cpp"
"detail/image_accessor_util.cpp"
"detail/image_impl.cpp"
"detail/kernel_impl.cpp"
"detail/kernel_program_cache.cpp"
"detail/memory_manager.cpp"
"detail/platform_impl.cpp"
"detail/program_impl.cpp"
"detail/program_manager/program_manager.cpp"
"detail/queue_impl.cpp"
"detail/os_util.cpp"
"detail/platform_util.cpp"
"detail/sampler_impl.cpp"
"detail/stream_impl.cpp"
"detail/scheduler/commands.cpp"
"detail/scheduler/scheduler.cpp"
"detail/scheduler/graph_processor.cpp"
"detail/scheduler/graph_builder.cpp"
"detail/spec_constant_impl.cpp"
"detail/sycl_mem_obj_t.cpp"
"detail/usm/usm_impl.cpp"
"detail/util.cpp"
"accessor.cpp"
"context.cpp"
"device.cpp"
"device_selector.cpp"
"event.cpp"
"exception.cpp"
"exception_list.cpp"
"function_pointer.cpp"
"half_type.cpp"
"handler.cpp"
"interop_handle.cpp"
"interop_handler.cpp"
"kernel.cpp"
"platform.cpp"
"program.cpp"
"queue.cpp"
"sampler.cpp"
"stream.cpp"
"spirv_ops.cpp"
"$<$<PLATFORM_ID:Windows>:detail/windows_pi.cpp>"
"$<$<OR:$<PLATFORM_ID:Linux>,$<PLATFORM_ID:Darwin>>:detail/posix_pi.cpp>"
)
if (MSVC)
# MSVC provides two incompatible build variants for its CRT: release and debug
# To avoid potential issues in user code we also need to provide two kinds
# of SYCL Runtime Library for release and debug configurations.
foreach(flag_var
CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)
string(REGEX REPLACE "/MDd" "" ${flag_var} "${${flag_var}}")
string(REGEX REPLACE "/MTd" "" ${flag_var} "${${flag_var}}")
string(REGEX REPLACE "/MD" "" ${flag_var} "${${flag_var}}")
string(REGEX REPLACE "/MT" "" ${flag_var} "${${flag_var}}")
endforeach()
if (SYCL_ENABLE_XPTI_TRACING)
add_sycl_rt_library(sycld XPTI_LIB xptid COMPILE_OPTIONS "/MDd" SOURCES ${SYCL_SOURCES})
else()
add_sycl_rt_library(sycld COMPILE_OPTIONS "/MDd" SOURCES ${SYCL_SOURCES})
endif()
set(SYCL_EXTRA_OPTS "/MD")
endif()
if (SYCL_ENABLE_XPTI_TRACING)
add_sycl_rt_library(sycl XPTI_LIB xpti COMPILE_OPTIONS ${SYCL_EXTRA_OPTS} SOURCES ${SYCL_SOURCES})
else()
add_sycl_rt_library(sycl COMPILE_OPTIONS ${SYCL_EXTRA_OPTS} SOURCES ${SYCL_SOURCES})
endif()
# Enable new IN_LIST operator.
cmake_policy(SET CMP0057 NEW)
if (libdevice IN_LIST LLVM_ENABLE_PROJECTS)
add_dependencies(sycl libsycldevice)
endif()
install(TARGETS ${SYCL_RT_LIBS}
ARCHIVE DESTINATION "lib${LLVM_LIBDIR_SUFFIX}" COMPONENT sycl
LIBRARY DESTINATION "lib${LLVM_LIBDIR_SUFFIX}" COMPONENT sycl
RUNTIME DESTINATION "bin" COMPONENT sycl)