Skip to content

Commit 6fffeb8

Browse files
[SYCL RTC] Add sycl-rtc-experimental-redist-mode option
1 parent 92a006c commit 6fffeb8

File tree

17 files changed

+341
-20
lines changed

17 files changed

+341
-20
lines changed

buildbot/configure.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,11 @@ def do_configure(args, passthrough_args):
179179

180180
install_dir = os.path.join(abs_obj_dir, "install")
181181

182+
llvm_enable_runtimes = "libcxx"
183+
if platform.system() != "Windows":
184+
llvm_enable_runtimes += ";libcxxabi;libunwind"
185+
llvm_enable_runtimes += ";libc"
186+
182187
cmake_cmd = [
183188
"cmake",
184189
"-G",
@@ -195,6 +200,9 @@ def do_configure(args, passthrough_args):
195200
"-DLLVM_EXTERNAL_LIBDEVICE_SOURCE_DIR={}".format(libdevice_dir),
196201
"-DLLVM_EXTERNAL_SYCL_JIT_SOURCE_DIR={}".format(jit_dir),
197202
"-DLLVM_ENABLE_PROJECTS={}".format(llvm_enable_projects),
203+
"-DLLVM_ENABLE_RUNTIMES={}".format(llvm_enable_runtimes),
204+
"-DLLVM_LIBC_FULL_BUILD=ON",
205+
"-DLLVM_LIBC_ALL_HEADERS=1",
198206
"-DSYCL_BUILD_PI_HIP_PLATFORM={}".format(sycl_build_pi_hip_platform),
199207
"-DLLVM_BUILD_TOOLS=ON",
200208
"-DLLVM_ENABLE_ZSTD={}".format(llvm_enable_zstd),

clang/include/clang/Driver/Options.td

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7561,6 +7561,14 @@ let Visibility = [SYCLRTCOnlyOption] in {
75617561
: Joined<["--"], "persistent-auto-pch=">,
75627562
HelpText<"Use Persistent Auto-PCH cache located at <dir> for SYCL "
75637563
"RTC Compilation">;
7564+
def sycl_rtc_exp_redist_mode
7565+
: Flag<["--"], "sycl-rtc-experimental-redist-mode">,
7566+
HelpText<"Use in-memory system includes">;
7567+
def sycl_rtc_in_memory_fs_only
7568+
: Flag<["--"], "sycl-rtc-in-memory-fs-only">,
7569+
HelpText<"Disable real filesystem access for SCYl RTC compilation, "
7570+
"debug/testing only">,
7571+
Flags<[HelpHidden]>;
75647572
} // let Group = sycl_rtc_only_Group
75657573
} // let Visibility = [SYCLRTCOnlyOption]
75667574

clang/lib/Headers/mm_malloc.h

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@
1212

1313
#include <stdlib.h>
1414

15-
#ifdef _WIN32
15+
#if defined(_WIN32) && \
16+
!(defined(__SYCL_DEVICE_ONLY__) && defined(__LLVM_LIBC__))
1617
#include <malloc.h>
1718
#else
1819
#ifndef __cplusplus
@@ -41,7 +42,8 @@ _mm_malloc(size_t __size, size_t __align) {
4142
void *__mallocedMemory;
4243
#if defined(__MINGW32__)
4344
__mallocedMemory = __mingw_aligned_malloc(__size, __align);
44-
#elif defined(_WIN32)
45+
#elif defined(_WIN32) && \
46+
!(defined(__SYCL_DEVICE_ONLY__) && defined(__LLVM_LIBC__))
4547
__mallocedMemory = _aligned_malloc(__size, __align);
4648
#else
4749
if (posix_memalign(&__mallocedMemory, __align, __size))
@@ -56,7 +58,8 @@ _mm_free(void *__p)
5658
{
5759
#if defined(__MINGW32__)
5860
__mingw_aligned_free(__p);
59-
#elif defined(_WIN32)
61+
#elif defined(_WIN32) && \
62+
!(defined(__SYCL_DEVICE_ONLY__) && defined(__LLVM_LIBC__))
6063
_aligned_free(__p);
6164
#else
6265
free(__p);

libc/config/windows/headers.txt

Lines changed: 53 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,61 @@
11
set(TARGET_PUBLIC_HEADERS
2+
libc.include.arpa_inet
3+
libc.include.assert
4+
libc.include.complex
25
libc.include.ctype
3-
libc.include.string
4-
libc.include.inttypes
5-
libc.include.stdlib
6+
libc.include.dirent
7+
libc.include.dlfcn
8+
libc.include.elf
9+
libc.include.endian
610
libc.include.errno
11+
libc.include.fcntl
12+
libc.include.features
713
libc.include.fenv
14+
libc.include.float
15+
libc.include.inttypes
16+
libc.include.limits
17+
libc.include.link
18+
libc.include.locale
19+
libc.include.malloc
820
libc.include.math
21+
libc.include.poll
22+
libc.include.pthread
23+
libc.include.sched
24+
libc.include.search
25+
libc.include.setjmp
26+
libc.include.signal
27+
libc.include.spawn
28+
libc.include.stdbit
29+
libc.include.stdckdint
30+
libc.include.stdfix
31+
libc.include.stdint
32+
libc.include.stdio
33+
libc.include.stdlib
34+
libc.include.string
35+
libc.include.strings
36+
libc.include.sys_auxv
37+
libc.include.sys_epoll
38+
libc.include.sys_ioctl
39+
libc.include.sys_mman
40+
libc.include.sys_prctl
41+
libc.include.sys_queue
42+
libc.include.sys_random
43+
libc.include.sys_resource
44+
libc.include.sys_select
45+
libc.include.sys_socket
46+
libc.include.sys_stat
47+
libc.include.sys_statvfs
48+
libc.include.sys_syscall
49+
libc.include.sys_time
50+
libc.include.sys_types
51+
libc.include.sys_utsname
52+
libc.include.sys_wait
53+
libc.include.sysexits
54+
libc.include.termios
55+
libc.include.threads
56+
libc.include.time
57+
libc.include.uchar
958
libc.include.unistd
59+
libc.include.wchar
1060
libc.include.wctype
1161
)

libc/include/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -825,6 +825,8 @@ foreach(target IN LISTS all_install_header_targets)
825825
endforeach()
826826

827827
if(LLVM_LIBC_FULL_BUILD)
828+
add_custom_target(generate-libc-headers
829+
DEPENDS libc-headers)
828830
add_custom_target(install-libc-headers
829831
DEPENDS libc-headers
830832
COMMAND "${CMAKE_COMMAND}"

libc/include/wchar.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,7 @@ functions:
246246
- type: const wchar_t **__restrict
247247
- type: size_t
248248
- type: size_t
249-
- type: mbstate_t
249+
- type: mbstate_t *__restrict
250250
- name: wcsrtombs
251251
standards:
252252
- stdc
@@ -255,7 +255,7 @@ functions:
255255
- type: char *__restrict
256256
- type: const wchar_t **__restrict
257257
- type: size_t
258-
- type: mbstate_t
258+
- type: mbstate_t *__restrict
259259
- name: wcrtomb
260260
standards:
261261
- stdc

libcxx/include/__config

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,7 @@ _LIBCPP_HARDENING_MODE_DEBUG
274274
# define _LIBCPP_MSVCRT_LIKE
275275
// If mingw not explicitly detected, assume using MS C runtime only if
276276
// a MS compatibility version is specified.
277-
# if defined(_MSC_VER) && !defined(__MINGW32__)
277+
# if defined(_MSC_VER) && !defined(__MINGW32__) && !defined(_LIBCPP_NO_VCRUNTIME)
278278
# define _LIBCPP_MSVCRT // Using Microsoft's C Runtime library
279279
# endif
280280
# if (defined(_M_AMD64) || defined(__x86_64__)) || (defined(_M_ARM) || defined(__arm__))
@@ -911,7 +911,7 @@ typedef __char32_t char32_t;
911911
# endif
912912

913913
# if defined(__BIONIC__) || defined(__NuttX__) || defined(__Fuchsia__) || defined(__wasi__) || \
914-
_LIBCPP_HAS_MUSL_LIBC || defined(__OpenBSD__) || defined(__LLVM_LIBC__)
914+
_LIBCPP_HAS_MUSL_LIBC || defined(__OpenBSD__) || defined(__LLVM_LIBC__) || defined(__SYCL_DEVICE_ONLY__)
915915
# define _LIBCPP_PROVIDES_DEFAULT_RUNE_TABLE
916916
# endif
917917

libcxx/include/__locale_dir/locale_base_api.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,8 +110,9 @@
110110
// }
111111

112112
#if _LIBCPP_HAS_LOCALIZATION
113-
114-
# if defined(__APPLE__)
113+
# if defined(__SYCL_DEVICE_ONLY__)
114+
# include <__locale_dir/support/fuchsia.h> // no_locale
115+
# elif defined(__APPLE__)
115116
# include <__locale_dir/support/apple.h>
116117
# elif defined(__FreeBSD__)
117118
# include <__locale_dir/support/freebsd.h>

sycl-jit/jit-compiler/CMakeLists.txt

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,13 +45,50 @@ add_custom_target(rtc-prepare-resources
4545
${SYCL_JIT_RESOURCE_FILES}
4646
)
4747

48+
set(SYCL_JIT_RUNTIME_RESOURCE_DEPS)
49+
set(SYCL_JIT_PREPARE_RUNTIME_RESOURCE_COMMANDS)
50+
51+
if ("libcxx" IN_LIST LLVM_ENABLE_RUNTIMES)
52+
list(APPEND SYCL_JIT_RUNTIME_RESOURCE_DEPS runtimes-configure)
53+
54+
if (WIN32)
55+
set(SYCL_JIT_CXX_CONFIG_SITE ${CMAKE_CURRENT_BINARY_DIR}/rtc-resources-install/include/c++/v1/__config_site)
56+
else()
57+
set(SYCL_JIT_CXX_CONFIG_SITE ${CMAKE_CURRENT_BINARY_DIR}/rtc-resources-install/include/x86_64-unknown-linux-gnu/c++/v1/__config_site)
58+
endif()
59+
60+
list(APPEND SYCL_JIT_PREPARE_RUNTIME_RESOURCE_COMMANDS
61+
COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR}/runtimes/runtimes-bins --target generate-cxx-headers
62+
COMMAND ${CMAKE_COMMAND} --install ${CMAKE_BINARY_DIR}/runtimes/runtimes-bins --prefix ${CMAKE_CURRENT_BINARY_DIR}/rtc-resources-install --component cxx-headers
63+
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/rtc-resources-install/include/sycl-rtc-standalone
64+
COMMAND sed 's/_LIBCPP_HAS_THREAD_API_EXTERNAL 0/_LIBCPP_HAS_THREAD_API_EXTERNAL 1/' ${SYCL_JIT_CXX_CONFIG_SITE} > ${CMAKE_CURRENT_BINARY_DIR}/rtc-resources-install/include/sycl-rtc-standalone/__config_site
65+
)
66+
endif()
67+
68+
if ("libc" IN_LIST LLVM_ENABLE_RUNTIMES)
69+
list(APPEND SYCL_JIT_RUNTIME_RESOURCE_DEPS runtimes-configure)
70+
# list(APPEND SYCL_JIT_RUNTIME_RESOURCE_DEPS libc)
71+
72+
list(APPEND SYCL_JIT_PREPARE_RUNTIME_RESOURCE_COMMANDS
73+
COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR}/runtimes/runtimes-bins --target generate-libc-headers
74+
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_BINARY_DIR}/runtimes/runtimes-bins/libc/include ${SYCL_JIT_RESOURCE_INSTALL_DIR}/include/libc
75+
)
76+
endif()
77+
78+
add_custom_target(rtc-prepare-runtime-resources
79+
DEPENDS ${SYCL_JIT_RUNTIME_RESOURCE_DEPS}
80+
${SYCL_JIT_PREPARE_RUNTIME_RESOURCE_COMMANDS}
81+
)
82+
4883
add_custom_command(
4984
OUTPUT ${SYCL_JIT_RESOURCE_CPP}
5085
COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/utils/generate.py --toolchain-dir ${SYCL_JIT_RESOURCE_INSTALL_DIR} --output ${SYCL_JIT_RESOURCE_CPP} --prefix ${SYCL_JIT_VIRTUAL_TOOLCHAIN_ROOT}
5186
DEPENDS
5287
rtc-prepare-resources
5388
${SYCL_JIT_RESOURCE_DEPS}
5489
${SYCL_JIT_RESOURCE_FILES}
90+
rtc-prepare-runtime-resources
91+
${SYCL_JIT_RUNTIME_RESOURCE_DEPS}
5592
${CMAKE_CURRENT_SOURCE_DIR}/utils/generate.py
5693
)
5794

@@ -94,6 +131,7 @@ add_custom_command(
94131
${SYCL_JIT_RESOURCE_CPP}
95132
${SYCL_JIT_RESOURCE_DEPS}
96133
${SYCL_JIT_RESOURCE_FILES}
134+
${SYCL_JIT_RUNTIME_RESOURCE_DEPS}
97135
${CMAKE_CURRENT_SOURCE_DIR}/include/Resource.h
98136
)
99137

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
_LIBCPP_BEGIN_NAMESPACE_STD
2+
3+
using __libcpp_timespec_t = int;
4+
5+
//
6+
// Mutex
7+
//
8+
using __libcpp_mutex_t = int;
9+
#define _LIBCPP_MUTEX_INITIALIZER 0
10+
11+
using __libcpp_recursive_mutex_t = int;
12+
13+
int __libcpp_recursive_mutex_init(__libcpp_recursive_mutex_t*);
14+
_LIBCPP_NO_THREAD_SAFETY_ANALYSIS int __libcpp_recursive_mutex_lock(__libcpp_recursive_mutex_t*);
15+
_LIBCPP_NO_THREAD_SAFETY_ANALYSIS bool __libcpp_recursive_mutex_trylock(__libcpp_recursive_mutex_t*);
16+
_LIBCPP_NO_THREAD_SAFETY_ANALYSIS int __libcpp_recursive_mutex_unlock(__libcpp_recursive_mutex_t*);
17+
int __libcpp_recursive_mutex_destroy(__libcpp_recursive_mutex_t*);
18+
19+
_LIBCPP_NO_THREAD_SAFETY_ANALYSIS int __libcpp_mutex_lock(__libcpp_mutex_t*);
20+
_LIBCPP_NO_THREAD_SAFETY_ANALYSIS bool __libcpp_mutex_trylock(__libcpp_mutex_t*);
21+
_LIBCPP_NO_THREAD_SAFETY_ANALYSIS int __libcpp_mutex_unlock(__libcpp_mutex_t*);
22+
int __libcpp_mutex_destroy(__libcpp_mutex_t*);
23+
24+
//
25+
// Condition Variable
26+
//
27+
using __libcpp_condvar_t = int;
28+
#define _LIBCPP_CONDVAR_INITIALIZER 0
29+
30+
int __libcpp_condvar_signal(__libcpp_condvar_t*);
31+
int __libcpp_condvar_broadcast(__libcpp_condvar_t*);
32+
_LIBCPP_NO_THREAD_SAFETY_ANALYSIS int __libcpp_condvar_wait(__libcpp_condvar_t*, __libcpp_mutex_t*);
33+
_LIBCPP_NO_THREAD_SAFETY_ANALYSIS
34+
int __libcpp_condvar_timedwait(__libcpp_condvar_t*, __libcpp_mutex_t*, __libcpp_timespec_t*);
35+
int __libcpp_condvar_destroy(__libcpp_condvar_t*);
36+
37+
//
38+
// Execute once
39+
//
40+
using __libcpp_exec_once_flag = int;
41+
#define _LIBCPP_EXEC_ONCE_INITIALIZER 0
42+
43+
int __libcpp_execute_once(__libcpp_exec_once_flag*, void (*__init_routine)());
44+
45+
//
46+
// Thread id
47+
//
48+
using __libcpp_thread_id = int;
49+
50+
bool __libcpp_thread_id_equal(__libcpp_thread_id, __libcpp_thread_id);
51+
bool __libcpp_thread_id_less(__libcpp_thread_id, __libcpp_thread_id);
52+
53+
//
54+
// Thread
55+
//
56+
#define _LIBCPP_NULL_THREAD 0
57+
using __libcpp_thread_t = int;
58+
59+
bool __libcpp_thread_isnull(const __libcpp_thread_t*);
60+
int __libcpp_thread_create(__libcpp_thread_t*, void* (*__func)(void*), void* __arg);
61+
__libcpp_thread_id __libcpp_thread_get_current_id();
62+
__libcpp_thread_id __libcpp_thread_get_id(const __libcpp_thread_t*);
63+
int __libcpp_thread_join(__libcpp_thread_t*);
64+
int __libcpp_thread_detach(__libcpp_thread_t*);
65+
void __libcpp_thread_yield();
66+
void __libcpp_thread_sleep_for(const chrono::nanoseconds&);
67+
68+
//
69+
// Thread local storage
70+
//
71+
#define _LIBCPP_TLS_DESTRUCTOR_CC 0
72+
using __libcpp_tls_key = int;
73+
74+
int __libcpp_tls_create(__libcpp_tls_key*, void (*__at_exit)(void*));
75+
void* __libcpp_tls_get(__libcpp_tls_key);
76+
int __libcpp_tls_set(__libcpp_tls_key, void*);
77+
78+
_LIBCPP_END_NAMESPACE_STD

0 commit comments

Comments
 (0)