275 lines · plain
1# Helper function that creates an alias if a target specific implementation2# exists, otherwise it uses a generic one.3function(add_stdio_entrypoint_object name)4 if(TARGET libc.src.stdio.${LIBC_TARGET_OS}.${name})5 add_entrypoint_object(6 ${name}7 ALIAS8 DEPENDS9 .${LIBC_TARGET_OS}.${name}10 )11 elseif(TARGET libc.src.stdio.generic.${name})12 add_entrypoint_object(13 ${name}14 ALIAS15 DEPENDS16 .generic.${name}17 )18 endif()19endfunction(add_stdio_entrypoint_object)20 21if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${LIBC_TARGET_OS})22 add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/${LIBC_TARGET_OS})23endif()24add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/generic)25 26if(NOT LLVM_LIBC_FULL_BUILD)27 list(APPEND use_system_file "COMPILE_OPTIONS" "-DLIBC_COPT_STDIO_USE_SYSTEM_FILE")28endif()29 30add_entrypoint_object(31 flockfile32 SRCS33 flockfile.cpp34 HDRS35 flockfile.h36 DEPENDS37 libc.hdr.types.FILE38 libc.src.__support.File.file39 libc.src.__support.File.platform_file40)41 42add_entrypoint_object(43 funlockfile44 SRCS45 funlockfile.cpp46 HDRS47 funlockfile.h48 DEPENDS49 libc.hdr.types.FILE50 libc.src.__support.File.file51 libc.src.__support.File.platform_file52)53 54add_entrypoint_object(55 fopencookie56 SRCS57 fopencookie.cpp58 HDRS59 fopencookie.h60 DEPENDS61 libc.hdr.stdio_macros62 libc.hdr.types.off_t63 libc.hdr.types.cookie_io_functions_t64 libc.hdr.types.FILE65 libc.src.__support.CPP.new66 libc.src.__support.File.file67)68 69add_entrypoint_object(70 setbuf71 SRCS72 setbuf.cpp73 HDRS74 setbuf.h75 DEPENDS76 libc.src.errno.errno77 libc.hdr.types.off_t78 libc.src.__support.File.file79 libc.src.__support.File.platform_file80)81 82add_entrypoint_object(83 setvbuf84 SRCS85 setvbuf.cpp86 HDRS87 setvbuf.h88 DEPENDS89 libc.src.errno.errno90 libc.hdr.types.FILE91 libc.src.__support.File.file92 libc.src.__support.File.platform_file93)94 95add_entrypoint_object(96 sscanf97 SRCS98 sscanf.cpp99 HDRS100 sscanf.h101 DEPENDS102 libc.src.__support.arg_list103 libc.src.stdio.scanf_core.scanf_main104 libc.src.stdio.scanf_core.string_reader105)106 107add_entrypoint_object(108 vsscanf109 SRCS110 vsscanf.cpp111 HDRS112 vsscanf.h113 DEPENDS114 libc.src.__support.arg_list115 libc.src.stdio.scanf_core.scanf_main116 libc.src.stdio.scanf_core.string_reader117)118 119add_entrypoint_object(120 sprintf121 SRCS122 sprintf.cpp123 HDRS124 sprintf.h125 DEPENDS126 libc.src.stdio.printf_core.printf_main127 libc.src.stdio.printf_core.writer128 libc.src.stdio.printf_core.core_structs129 libc.src.stdio.printf_core.error_mapper130 libc.src.__support.libc_errno131 libc.src.__support.CPP.limits132)133 134add_entrypoint_object(135 snprintf136 SRCS137 snprintf.cpp138 HDRS139 snprintf.h140 DEPENDS141 libc.src.stdio.printf_core.printf_main142 libc.src.stdio.printf_core.writer143 libc.src.stdio.printf_core.core_structs144 libc.src.stdio.printf_core.error_mapper145 libc.src.__support.libc_errno146 libc.src.__support.CPP.limits147)148 149add_entrypoint_object(150 asprintf151 SRCS152 asprintf.cpp153 HDRS154 asprintf.h155 DEPENDS156 libc.src.stdio.printf_core.vasprintf_internal157 libc.src.stdio.printf_core.core_structs158 libc.src.stdio.printf_core.error_mapper159 libc.src.__support.libc_errno160 libc.src.__support.CPP.limits161)162 163add_entrypoint_object(164 vsprintf165 SRCS166 vsprintf.cpp167 HDRS168 vsprintf.h169 DEPENDS170 libc.src.stdio.printf_core.printf_main171 libc.src.stdio.printf_core.writer172 libc.src.stdio.printf_core.core_structs173 libc.src.stdio.printf_core.error_mapper174 libc.src.__support.libc_errno175 libc.src.__support.CPP.limits176)177 178add_entrypoint_object(179 vsnprintf180 SRCS181 vsnprintf.cpp182 HDRS183 vsnprintf.h184 DEPENDS185 libc.src.stdio.printf_core.printf_main186 libc.src.stdio.printf_core.writer187 libc.src.stdio.printf_core.core_structs188 libc.src.stdio.printf_core.error_mapper189 libc.src.__support.libc_errno190 libc.src.__support.CPP.limits191)192 193add_entrypoint_object(194 vasprintf195 SRCS196 vasprintf.cpp197 HDRS198 vasprintf.h199 DEPENDS200 libc.src.stdio.printf_core.vasprintf_internal201 libc.src.stdio.printf_core.core_structs202 libc.src.stdio.printf_core.error_mapper203 libc.src.__support.libc_errno204 libc.src.__support.CPP.limits205)206 207add_subdirectory(printf_core)208add_subdirectory(scanf_core)209 210add_entrypoint_object(211 remove212 ALIAS213 DEPENDS214 .${LIBC_TARGET_OS}.remove215)216 217add_entrypoint_object(218 rename219 ALIAS220 DEPENDS221 .${LIBC_TARGET_OS}.rename222)223 224add_entrypoint_object(225 fdopen226 ALIAS227 DEPENDS228 .${LIBC_TARGET_OS}.fdopen229)230 231# These entrypoints have multiple potential implementations.232add_stdio_entrypoint_object(feof)233add_stdio_entrypoint_object(feof_unlocked)234add_stdio_entrypoint_object(ferror)235add_stdio_entrypoint_object(ferror_unlocked)236add_stdio_entrypoint_object(fseek)237add_stdio_entrypoint_object(ftell)238add_stdio_entrypoint_object(fseeko)239add_stdio_entrypoint_object(fileno)240add_stdio_entrypoint_object(ftello)241add_stdio_entrypoint_object(fflush)242add_stdio_entrypoint_object(clearerr)243add_stdio_entrypoint_object(clearerr_unlocked)244add_stdio_entrypoint_object(fopen)245add_stdio_entrypoint_object(fclose)246add_stdio_entrypoint_object(fread_unlocked)247add_stdio_entrypoint_object(fread)248add_stdio_entrypoint_object(perror)249add_stdio_entrypoint_object(puts)250add_stdio_entrypoint_object(fputs)251add_stdio_entrypoint_object(fwrite_unlocked)252add_stdio_entrypoint_object(fwrite)253add_stdio_entrypoint_object(fputc)254add_stdio_entrypoint_object(putc)255add_stdio_entrypoint_object(putchar)256add_stdio_entrypoint_object(printf)257add_stdio_entrypoint_object(fprintf)258add_stdio_entrypoint_object(fgetc)259add_stdio_entrypoint_object(fgetc_unlocked)260add_stdio_entrypoint_object(getc)261add_stdio_entrypoint_object(getc_unlocked)262add_stdio_entrypoint_object(getchar)263add_stdio_entrypoint_object(getchar_unlocked)264add_stdio_entrypoint_object(fgets)265add_stdio_entrypoint_object(ungetc)266add_stdio_entrypoint_object(scanf)267add_stdio_entrypoint_object(fscanf)268add_stdio_entrypoint_object(stdin)269add_stdio_entrypoint_object(stdout)270add_stdio_entrypoint_object(stderr)271add_stdio_entrypoint_object(vprintf)272add_stdio_entrypoint_object(vfprintf)273add_stdio_entrypoint_object(vscanf)274add_stdio_entrypoint_object(vfscanf)275