Summary: This patch adds a temporary implementation that uses a struct-based interface in lieu of varargs support. Once varargs support exists we will move this implementation to the "real" printf implementation. Conceptually, this patch has the client copy over its format string and arguments to the server. The server will then scan the format string searching for any specifiers that are actually a string. If it is a string then we will send the pointer back to the server to tell it to copy it back. This copied value will then replace the pointer when the final formatting is done. This will require a built-in extension to the varargs support to get access to the underlying struct. The varargs used on the GPU will simply be a struct wrapped in a varargs ABI.
33 lines
1.4 KiB
CMake
33 lines
1.4 KiB
CMake
add_library(llvmlibc_rpc_server STATIC
|
|
${LIBC_SOURCE_DIR}/src/stdio/printf_core/writer.cpp
|
|
${LIBC_SOURCE_DIR}/src/stdio/printf_core/converter.cpp
|
|
rpc_server.cpp
|
|
)
|
|
|
|
# Include the RPC implemenation from libc.
|
|
target_include_directories(llvmlibc_rpc_server PRIVATE ${LIBC_SOURCE_DIR})
|
|
target_include_directories(llvmlibc_rpc_server PUBLIC ${LIBC_SOURCE_DIR}/include)
|
|
target_include_directories(llvmlibc_rpc_server PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
|
|
|
|
# Ignore unsupported clang attributes if we're using GCC.
|
|
target_compile_options(llvmlibc_rpc_server PUBLIC
|
|
$<$<CXX_COMPILER_ID:GNU>:-Wno-attributes>)
|
|
target_compile_definitions(llvmlibc_rpc_server PUBLIC
|
|
LIBC_COPT_USE_C_ASSERT
|
|
LIBC_COPT_ARRAY_ARG_LIST
|
|
LIBC_COPT_PRINTF_DISABLE_WRITE_INT
|
|
LIBC_COPT_PRINTF_DISABLE_INDEX_MODE
|
|
LIBC_NAMESPACE=${LIBC_NAMESPACE})
|
|
|
|
# Install the server and associated header.
|
|
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/llvmlibc_rpc_server.h
|
|
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
|
|
COMPONENT libc-headers)
|
|
install(FILES ${LIBC_SOURCE_DIR}/include/llvm-libc-types/rpc_opcodes_t.h
|
|
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
|
|
RENAME llvmlibc_rpc_opcodes.h
|
|
COMPONENT libc-headers)
|
|
install(TARGETS llvmlibc_rpc_server
|
|
ARCHIVE DESTINATION "lib${LLVM_LIBDIR_SUFFIX}"
|
|
COMPONENT libc)
|