Skip to content

Commit a083318

Browse files
authored
Move SPIR devicelib to top level (#1276)
Signed-off-by: Vyacheslav Zakharin <[email protected]>
1 parent be07751 commit a083318

30 files changed

+1616
-1964
lines changed

buildbot/configure.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,11 @@ def do_configure(args):
1111
sycl_dir = os.path.join(args.src_dir, "sycl")
1212
spirv_dir = os.path.join(args.src_dir, "llvm-spirv")
1313
xpti_dir = os.path.join(args.src_dir, "xpti")
14+
libdevice_dir = os.path.join(args.src_dir, "libdevice")
1415
ocl_header_dir = os.path.join(args.obj_dir, "OpenCL-Headers")
1516
icd_loader_lib = os.path.join(args.obj_dir, "OpenCL-ICD-Loader", "build")
1617
llvm_targets_to_build = 'X86'
17-
llvm_enable_projects = 'clang;llvm-spirv;sycl;opencl-aot;xpti'
18+
llvm_enable_projects = 'clang;llvm-spirv;sycl;opencl-aot;xpti;libdevice'
1819
libclc_targets_to_build = ''
1920
sycl_build_pi_cuda = 'OFF'
2021
llvm_enable_assertions = 'ON'
@@ -49,10 +50,11 @@ def do_configure(args):
4950
"-DCMAKE_BUILD_TYPE={}".format(args.build_type),
5051
"-DLLVM_ENABLE_ASSERTIONS={}".format(llvm_enable_assertions),
5152
"-DLLVM_TARGETS_TO_BUILD={}".format(llvm_targets_to_build),
52-
"-DLLVM_EXTERNAL_PROJECTS=sycl;llvm-spirv;opencl-aot;xpti",
53+
"-DLLVM_EXTERNAL_PROJECTS=sycl;llvm-spirv;opencl-aot;xpti;libdevice",
5354
"-DLLVM_EXTERNAL_SYCL_SOURCE_DIR={}".format(sycl_dir),
5455
"-DLLVM_EXTERNAL_LLVM_SPIRV_SOURCE_DIR={}".format(spirv_dir),
5556
"-DLLVM_EXTERNAL_XPTI_SOURCE_DIR={}".format(xpti_dir),
57+
"-DLLVM_EXTERNAL_LIBDEVICE_SOURCE_DIR={}".format(libdevice_dir),
5658
"-DLLVM_ENABLE_PROJECTS={}".format(llvm_enable_projects),
5759
"-DLIBCLC_TARGETS_TO_BUILD={}".format(libclc_targets_to_build),
5860
"-DSYCL_BUILD_PI_CUDA={}".format(sycl_build_pi_cuda),

libdevice/CMakeLists.txt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
# Utility project providing various functionalities for SPIR-V devices
2+
# without native support of these functionalities.
3+
4+
set(CMAKE_MODULE_PATH
5+
${CMAKE_MODULE_PATH}
6+
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules"
7+
)
8+
9+
# Build libdevice for SYCL.
10+
include(SYCLLibdevice)
Lines changed: 57 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,53 @@
1-
# Place device libraries near the libsycl.so library in a build
2-
# directory
31
if (WIN32)
4-
set(binary_dir "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}")
2+
set(binary_dir "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}")
53
else()
6-
set(binary_dir "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}")
4+
set(binary_dir "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}")
75
endif()
86

97
set(clang $<TARGET_FILE:clang>)
108

119
set(compile_opts
12-
# suppress an error about SYCL_EXTERNAL
13-
-Wno-sycl-strict
14-
# for CL/__spirv/spirv_vars.hpp
15-
-I${sycl_inc_dir})
10+
# suppress an error about SYCL_EXTERNAL being used for
11+
# a function with a raw pointer parameter.
12+
-Wno-sycl-strict
13+
# Disable warnings for the host compilation, where
14+
# we declare all functions as 'static'.
15+
-Wno-undefined-internal
16+
# Force definition of CL_SYCL_LANGUAGE_VERSION, as long as
17+
# SYCL specific code is guarded by it.
18+
-sycl-std=2017
19+
)
1620

1721
if (WIN32)
18-
set(devicelib-obj-file ${binary_dir}/libsycl-msvc.o)
19-
add_custom_command(OUTPUT ${devicelib-obj-file}
20-
COMMAND ${clang} -fsycl -c
21-
${compile_opts}
22-
${CMAKE_CURRENT_SOURCE_DIR}/msvc_wrapper.cpp
23-
-o ${devicelib-obj-file}
24-
MAIN_DEPENDENCY msvc_wrapper.cpp
25-
DEPENDS wrapper.h clang
26-
VERBATIM)
22+
set(devicelib-obj-file ${binary_dir}/libsycl-msvc.o)
23+
add_custom_command(OUTPUT ${devicelib-obj-file}
24+
COMMAND ${clang} -fsycl -c
25+
${compile_opts}
26+
${CMAKE_CURRENT_SOURCE_DIR}/msvc_wrapper.cpp
27+
-o ${devicelib-obj-file}
28+
MAIN_DEPENDENCY msvc_wrapper.cpp
29+
DEPENDS wrapper.h device.h clang
30+
VERBATIM)
2731
else()
28-
set(devicelib-obj-file ${binary_dir}/libsycl-glibc.o)
29-
add_custom_command(OUTPUT ${devicelib-obj-file}
30-
COMMAND ${clang} -fsycl -c
31-
${compile_opts}
32-
${CMAKE_CURRENT_SOURCE_DIR}/glibc_wrapper.cpp
33-
-o ${devicelib-obj-file}
34-
MAIN_DEPENDENCY glibc_wrapper.cpp
35-
DEPENDS wrapper.h clang
36-
VERBATIM)
32+
set(devicelib-obj-file ${binary_dir}/libsycl-glibc.o)
33+
add_custom_command(OUTPUT ${devicelib-obj-file}
34+
COMMAND ${clang} -fsycl -c
35+
${compile_opts}
36+
${CMAKE_CURRENT_SOURCE_DIR}/glibc_wrapper.cpp
37+
-o ${devicelib-obj-file}
38+
MAIN_DEPENDENCY glibc_wrapper.cpp
39+
DEPENDS wrapper.h device.h clang
40+
VERBATIM)
3741
endif()
3842

39-
4043
set(devicelib-obj-complex ${binary_dir}/libsycl-complex.o)
4144
add_custom_command(OUTPUT ${devicelib-obj-complex}
4245
COMMAND ${clang} -fsycl -c
4346
${compile_opts}
4447
${CMAKE_CURRENT_SOURCE_DIR}/complex_wrapper.cpp
4548
-o ${devicelib-obj-complex}
4649
MAIN_DEPENDENCY complex_wrapper.cpp
47-
DEPENDS device_complex.h clang
50+
DEPENDS device_complex.h device.h clang
4851
VERBATIM)
4952

5053
set(devicelib-obj-complex-fp64 ${binary_dir}/libsycl-complex-fp64.o)
@@ -54,7 +57,7 @@ add_custom_command(OUTPUT ${devicelib-obj-complex-fp64}
5457
${CMAKE_CURRENT_SOURCE_DIR}/complex_wrapper_fp64.cpp
5558
-o ${devicelib-obj-complex-fp64}
5659
MAIN_DEPENDENCY complex_wrapper_fp64.cpp
57-
DEPENDS device_complex.h clang
60+
DEPENDS device_complex.h device.h clang
5861
VERBATIM)
5962

6063
set(devicelib-obj-cmath ${binary_dir}/libsycl-cmath.o)
@@ -64,7 +67,7 @@ add_custom_command(OUTPUT ${devicelib-obj-cmath}
6467
${CMAKE_CURRENT_SOURCE_DIR}/cmath_wrapper.cpp
6568
-o ${devicelib-obj-cmath}
6669
MAIN_DEPENDENCY cmath_wrapper.cpp
67-
DEPENDS device_complex.h clang
70+
DEPENDS device_math.h device.h clang
6871
VERBATIM)
6972

7073
set(devicelib-obj-cmath-fp64 ${binary_dir}/libsycl-cmath-fp64.o)
@@ -74,7 +77,7 @@ add_custom_command(OUTPUT ${devicelib-obj-cmath-fp64}
7477
${CMAKE_CURRENT_SOURCE_DIR}/cmath_wrapper_fp64.cpp
7578
-o ${devicelib-obj-cmath-fp64}
7679
MAIN_DEPENDENCY cmath_wrapper_fp64.cpp
77-
DEPENDS device_math.h clang
80+
DEPENDS device_math.h device.h clang
7881
VERBATIM)
7982

8083
add_custom_command(OUTPUT ${binary_dir}/libsycl-fallback-cassert.spv
@@ -83,7 +86,7 @@ add_custom_command(OUTPUT ${binary_dir}/libsycl-fallback-cassert.spv
8386
${CMAKE_CURRENT_SOURCE_DIR}/fallback-cassert.cpp
8487
-o ${binary_dir}/libsycl-fallback-cassert.spv
8588
MAIN_DEPENDENCY fallback-cassert.cpp
86-
DEPENDS wrapper.h clang llvm-spirv
89+
DEPENDS wrapper.h device.h clang llvm-spirv
8790
VERBATIM)
8891

8992
add_custom_command(OUTPUT ${binary_dir}/libsycl-fallback-complex.spv
@@ -92,7 +95,7 @@ add_custom_command(OUTPUT ${binary_dir}/libsycl-fallback-complex.spv
9295
${CMAKE_CURRENT_SOURCE_DIR}/fallback-complex.cpp
9396
-o ${binary_dir}/libsycl-fallback-complex.spv
9497
MAIN_DEPENDENCY fallback-complex.cpp
95-
DEPENDS device_math.h device_complex.h clang llvm-spirv
98+
DEPENDS device_math.h device_complex.h device.h clang llvm-spirv
9699
VERBATIM)
97100

98101
add_custom_command(OUTPUT ${binary_dir}/libsycl-fallback-complex-fp64.spv
@@ -101,7 +104,7 @@ add_custom_command(OUTPUT ${binary_dir}/libsycl-fallback-complex-fp64.spv
101104
${CMAKE_CURRENT_SOURCE_DIR}/fallback-complex-fp64.cpp
102105
-o ${binary_dir}/libsycl-fallback-complex-fp64.spv
103106
MAIN_DEPENDENCY fallback-complex-fp64.cpp
104-
DEPENDS device_math.h device_complex.h clang llvm-spirv
107+
DEPENDS device_math.h device_complex.h device.h clang llvm-spirv
105108
VERBATIM)
106109

107110
add_custom_command(OUTPUT ${binary_dir}/libsycl-fallback-cmath.spv
@@ -110,7 +113,7 @@ add_custom_command(OUTPUT ${binary_dir}/libsycl-fallback-cmath.spv
110113
${CMAKE_CURRENT_SOURCE_DIR}/fallback-cmath.cpp
111114
-o ${binary_dir}/libsycl-fallback-cmath.spv
112115
MAIN_DEPENDENCY fallback-cmath.cpp
113-
DEPENDS device_math.h clang llvm-spirv
116+
DEPENDS device_math.h device.h clang llvm-spirv
114117
VERBATIM)
115118

116119
add_custom_command(OUTPUT ${binary_dir}/libsycl-fallback-cmath-fp64.spv
@@ -119,30 +122,31 @@ add_custom_command(OUTPUT ${binary_dir}/libsycl-fallback-cmath-fp64.spv
119122
${CMAKE_CURRENT_SOURCE_DIR}/fallback-cmath-fp64.cpp
120123
-o ${binary_dir}/libsycl-fallback-cmath-fp64.spv
121124
MAIN_DEPENDENCY fallback-cmath-fp64.cpp
122-
DEPENDS device_math.h clang llvm-spirv
125+
DEPENDS device_math.h device.h clang llvm-spirv
123126
VERBATIM)
124127

125-
add_custom_target(devicelib-obj DEPENDS ${devicelib-obj-file}
126-
${devicelib-obj-complex}
127-
${devicelib-obj-complex-fp64}
128-
${devicelib-obj-cmath}
129-
${devicelib-obj-cmath-fp64})
130-
add_custom_target(devicelib-spv DEPENDS ${binary_dir}/libsycl-fallback-cassert.spv
131-
${binary_dir}/libsycl-fallback-complex.spv
132-
${binary_dir}/libsycl-fallback-complex-fp64.spv
133-
${binary_dir}/libsycl-fallback-cmath.spv
134-
${binary_dir}/libsycl-fallback-cmath-fp64.spv)
135-
add_dependencies(sycl devicelib-obj devicelib-spv)
136-
if (MSVC)
137-
add_dependencies(sycld devicelib-obj devicelib-spv)
138-
endif()
128+
add_custom_target(libsycldevice-obj DEPENDS
129+
${devicelib-obj-file}
130+
${devicelib-obj-complex}
131+
${devicelib-obj-complex-fp64}
132+
${devicelib-obj-cmath}
133+
${devicelib-obj-cmath-fp64}
134+
)
135+
add_custom_target(libsycldevice-spv DEPENDS
136+
${binary_dir}/libsycl-fallback-cassert.spv
137+
${binary_dir}/libsycl-fallback-complex.spv
138+
${binary_dir}/libsycl-fallback-complex-fp64.spv
139+
${binary_dir}/libsycl-fallback-cmath.spv
140+
${binary_dir}/libsycl-fallback-cmath-fp64.spv
141+
)
142+
add_custom_target(libsycldevice DEPENDS libsycldevice-obj libsycldevice-spv)
139143

140144
# Place device libraries near the libsycl.so library in an install
141145
# directory as well
142146
if (WIN32)
143-
set(install_dest bin)
147+
set(install_dest bin)
144148
else()
145-
set(install_dest lib${LLVM_LIBDIR_SUFFIX})
149+
set(install_dest lib${LLVM_LIBDIR_SUFFIX})
146150
endif()
147151

148152
install(FILES ${devicelib-obj-file}
@@ -156,4 +160,4 @@ install(FILES ${devicelib-obj-file}
156160
${devicelib-obj-cmath-fp64}
157161
${binary_dir}/libsycl-fallback-cmath-fp64.spv
158162
DESTINATION ${install_dest}
159-
COMPONENT sycl)
163+
COMPONENT libsycldevice)

libdevice/cmath_wrapper.cpp

Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
//==--- cmath_wrapper.cpp - wrappers for C math library functions ----------==//
2+
//
3+
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4+
// See https://llvm.org/LICENSE.txt for license information.
5+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
//
7+
//===----------------------------------------------------------------------===//
8+
9+
#include "device.h"
10+
#include "device_math.h"
11+
12+
DEVICE_EXTERN_C
13+
float scalbnf(float x, int n) { return __devicelib_scalbnf(x, n); }
14+
15+
DEVICE_EXTERN_C
16+
float logf(float x) { return __devicelib_logf(x); }
17+
18+
DEVICE_EXTERN_C
19+
float expf(float x) { return __devicelib_expf(x); }
20+
21+
DEVICE_EXTERN_C
22+
float frexpf(float x, int *exp) { return __devicelib_frexpf(x, exp); }
23+
24+
DEVICE_EXTERN_C
25+
float ldexpf(float x, int exp) { return __devicelib_ldexpf(x, exp); }
26+
27+
DEVICE_EXTERN_C
28+
float log10f(float x) { return __devicelib_log10f(x); }
29+
30+
DEVICE_EXTERN_C
31+
float modff(float x, float *intpart) { return __devicelib_modff(x, intpart); }
32+
33+
DEVICE_EXTERN_C
34+
float exp2f(float x) { return __devicelib_exp2f(x); }
35+
36+
DEVICE_EXTERN_C
37+
float expm1f(float x) { return __devicelib_expm1f(x); }
38+
39+
DEVICE_EXTERN_C
40+
int ilogbf(float x) { return __devicelib_ilogbf(x); }
41+
42+
DEVICE_EXTERN_C
43+
float log1pf(float x) { return __devicelib_log1pf(x); }
44+
45+
DEVICE_EXTERN_C
46+
float log2f(float x) { return __devicelib_log2f(x); }
47+
48+
DEVICE_EXTERN_C
49+
float logbf(float x) { return __devicelib_logbf(x); }
50+
51+
DEVICE_EXTERN_C
52+
float sqrtf(float x) { return __devicelib_sqrtf(x); }
53+
54+
DEVICE_EXTERN_C
55+
float cbrtf(float x) { return __devicelib_cbrtf(x); }
56+
57+
DEVICE_EXTERN_C
58+
float hypotf(float x, float y) { return __devicelib_hypotf(x, y); }
59+
60+
DEVICE_EXTERN_C
61+
float erff(float x) { return __devicelib_erff(x); }
62+
63+
DEVICE_EXTERN_C
64+
float erfcf(float x) { return __devicelib_erfcf(x); }
65+
66+
DEVICE_EXTERN_C
67+
float tgammaf(float x) { return __devicelib_tgammaf(x); }
68+
69+
DEVICE_EXTERN_C
70+
float lgammaf(float x) { return __devicelib_lgammaf(x); }
71+
72+
DEVICE_EXTERN_C
73+
float fmodf(float x, float y) { return __devicelib_fmodf(x, y); }
74+
75+
DEVICE_EXTERN_C
76+
float remainderf(float x, float y) { return __devicelib_remainderf(x, y); }
77+
78+
DEVICE_EXTERN_C
79+
float remquof(float x, float y, int *q) { return __devicelib_remquof(x, y, q); }
80+
81+
DEVICE_EXTERN_C
82+
float nextafterf(float x, float y) { return __devicelib_nextafterf(x, y); }
83+
84+
DEVICE_EXTERN_C
85+
float fdimf(float x, float y) { return __devicelib_fdimf(x, y); }
86+
87+
DEVICE_EXTERN_C
88+
float fmaf(float x, float y, float z) { return __devicelib_fmaf(x, y, z); }
89+
90+
DEVICE_EXTERN_C
91+
float sinf(float x) { return __devicelib_sinf(x); }
92+
93+
DEVICE_EXTERN_C
94+
float cosf(float x) { return __devicelib_cosf(x); }
95+
96+
DEVICE_EXTERN_C
97+
float tanf(float x) { return __devicelib_tanf(x); }
98+
99+
DEVICE_EXTERN_C
100+
float powf(float x, float y) { return __devicelib_powf(x, y); }
101+
102+
DEVICE_EXTERN_C
103+
float acosf(float x) { return __devicelib_acosf(x); }
104+
105+
DEVICE_EXTERN_C
106+
float asinf(float x) { return __devicelib_asinf(x); }
107+
108+
DEVICE_EXTERN_C
109+
float atanf(float x) { return __devicelib_atanf(x); }
110+
111+
DEVICE_EXTERN_C
112+
float atan2f(float x, float y) { return __devicelib_atan2f(x, y); }
113+
114+
DEVICE_EXTERN_C
115+
float coshf(float x) { return __devicelib_coshf(x); }
116+
117+
DEVICE_EXTERN_C
118+
float sinhf(float x) { return __devicelib_sinhf(x); }
119+
120+
DEVICE_EXTERN_C
121+
float tanhf(float x) { return __devicelib_tanhf(x); }
122+
123+
DEVICE_EXTERN_C
124+
float acoshf(float x) { return __devicelib_acoshf(x); }
125+
126+
DEVICE_EXTERN_C
127+
float asinhf(float x) { return __devicelib_asinhf(x); }
128+
129+
DEVICE_EXTERN_C
130+
float atanhf(float x) { return __devicelib_atanhf(x); }

0 commit comments

Comments
 (0)