blob: 380474ce271180448debc38d5c077f86f38e9f93 [file] [log] [blame]
# Helper function that creates an alias if a target specific implementation
# exists, otherwise it uses a generic one.
function(add_stdio_entrypoint_object name)
if(TARGET libc.src.stdio.${LIBC_TARGET_OS}.${name})
add_entrypoint_object(
${name}
ALIAS
DEPENDS
.${LIBC_TARGET_OS}.${name}
)
elseif(TARGET libc.src.stdio.generic.${name})
add_entrypoint_object(
${name}
ALIAS
DEPENDS
.generic.${name}
)
endif()
endfunction(add_stdio_entrypoint_object)
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${LIBC_TARGET_OS})
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/${LIBC_TARGET_OS})
endif()
if(NOT LIBC_TARGET_ARCHITECTURE_IS_GPU)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/generic)
endif()
if(NOT LLVM_LIBC_FULL_BUILD)
list(APPEND use_system_file "COMPILE_OPTIONS" "-DLIBC_COPT_STDIO_USE_SYSTEM_FILE")
endif()
add_entrypoint_object(
flockfile
SRCS
flockfile.cpp
HDRS
flockfile.h
DEPENDS
libc.include.stdio
libc.src.__support.File.file
libc.src.__support.File.platform_file
)
add_entrypoint_object(
funlockfile
SRCS
funlockfile.cpp
HDRS
funlockfile.h
DEPENDS
libc.include.stdio
libc.src.__support.File.file
libc.src.__support.File.platform_file
)
add_entrypoint_object(
fopencookie
SRCS
fopencookie.cpp
HDRS
fopencookie.h
DEPENDS
libc.include.stdio
libc.src.__support.CPP.new
libc.src.__support.File.file
)
add_entrypoint_object(
setbuf
SRCS
setbuf.cpp
HDRS
setbuf.h
DEPENDS
libc.src.errno.errno
libc.include.stdio
libc.src.__support.File.file
libc.src.__support.File.platform_file
)
add_entrypoint_object(
setvbuf
SRCS
setvbuf.cpp
HDRS
setvbuf.h
DEPENDS
libc.src.errno.errno
libc.include.stdio
libc.src.__support.File.file
libc.src.__support.File.platform_file
)
list(APPEND scanf_deps
libc.src.__support.arg_list
libc.src.stdio.scanf_core.vfscanf_internal
)
if(LLVM_LIBC_FULL_BUILD)
list(APPEND scanf_deps
libc.src.__support.File.file
libc.src.__support.File.platform_file
libc.src.__support.File.platform_stdin
)
endif()
add_entrypoint_object(
sscanf
SRCS
sscanf.cpp
HDRS
sscanf.h
DEPENDS
libc.src.__support.arg_list
libc.src.stdio.scanf_core.reader
libc.src.stdio.scanf_core.scanf_main
)
add_entrypoint_object(
fscanf
SRCS
fscanf.cpp
HDRS
fscanf.h
DEPENDS
${scanf_deps}
)
add_entrypoint_object(
scanf
SRCS
scanf.cpp
HDRS
scanf.h
DEPENDS
${scanf_deps}
)
add_entrypoint_object(
sprintf
SRCS
sprintf.cpp
HDRS
sprintf.h
DEPENDS
libc.src.stdio.printf_core.printf_main
libc.src.stdio.printf_core.writer
)
add_entrypoint_object(
snprintf
SRCS
snprintf.cpp
HDRS
snprintf.h
DEPENDS
libc.src.stdio.printf_core.printf_main
libc.src.stdio.printf_core.writer
)
list(APPEND printf_deps
libc.src.__support.arg_list
libc.src.stdio.printf_core.vfprintf_internal
)
if(LLVM_LIBC_FULL_BUILD)
list(APPEND printf_deps
libc.src.__support.File.file
libc.src.__support.File.platform_file
libc.src.__support.File.platform_stdout
)
endif()
add_entrypoint_object(
printf
SRCS
printf.cpp
HDRS
printf.h
DEPENDS
${printf_deps}
)
add_entrypoint_object(
fprintf
SRCS
fprintf.cpp
HDRS
fprintf.h
DEPENDS
libc.src.__support.arg_list
libc.src.stdio.printf_core.vfprintf_internal
)
add_entrypoint_object(
vsprintf
SRCS
vsprintf.cpp
HDRS
vsprintf.h
DEPENDS
libc.src.stdio.printf_core.printf_main
libc.src.stdio.printf_core.writer
)
add_entrypoint_object(
vsnprintf
SRCS
vsnprintf.cpp
HDRS
vsnprintf.h
DEPENDS
libc.src.stdio.printf_core.printf_main
libc.src.stdio.printf_core.writer
)
add_entrypoint_object(
vprintf
SRCS
vprintf.cpp
HDRS
vprintf.h
DEPENDS
${printf_deps}
)
add_entrypoint_object(
vfprintf
SRCS
vfprintf.cpp
HDRS
vfprintf.h
DEPENDS
libc.src.__support.arg_list
libc.src.stdio.printf_core.vfprintf_internal
)
add_subdirectory(printf_core)
add_subdirectory(scanf_core)
add_entrypoint_object(
remove
ALIAS
DEPENDS
.${LIBC_TARGET_OS}.remove
)
# These entrypoints have multiple potential implementations.
add_stdio_entrypoint_object(feof)
add_stdio_entrypoint_object(feof_unlocked)
add_stdio_entrypoint_object(ferror)
add_stdio_entrypoint_object(ferror_unlocked)
add_stdio_entrypoint_object(fseek)
add_stdio_entrypoint_object(ftell)
add_stdio_entrypoint_object(fflush)
add_stdio_entrypoint_object(clearerr)
add_stdio_entrypoint_object(clearerr_unlocked)
add_stdio_entrypoint_object(fopen)
add_stdio_entrypoint_object(fclose)
add_stdio_entrypoint_object(fread_unlocked)
add_stdio_entrypoint_object(fread)
add_stdio_entrypoint_object(puts)
add_stdio_entrypoint_object(fputs)
add_stdio_entrypoint_object(fwrite_unlocked)
add_stdio_entrypoint_object(fwrite)
add_stdio_entrypoint_object(fputc)
add_stdio_entrypoint_object(putc)
add_stdio_entrypoint_object(putchar)
add_stdio_entrypoint_object(fgetc)
add_stdio_entrypoint_object(fgetc_unlocked)
add_stdio_entrypoint_object(getc)
add_stdio_entrypoint_object(getc_unlocked)
add_stdio_entrypoint_object(getchar)
add_stdio_entrypoint_object(getchar_unlocked)
add_stdio_entrypoint_object(fgets)
add_stdio_entrypoint_object(ungetc)
add_stdio_entrypoint_object(stdin)
add_stdio_entrypoint_object(stdout)
add_stdio_entrypoint_object(stderr)