mirror of
https://github.com/intel/llvm.git
synced 2026-01-23 07:58:23 +08:00
[libc] Add a baremetal config.
The config currently includes ctype, math, stdlib, inttypes and string functions. Reviewed By: lntue Differential Revision: https://reviews.llvm.org/D140378
This commit is contained in:
@@ -121,6 +121,20 @@ else()
|
||||
"Unsupported libc target architecture ${LIBC_TARGET_ARCHITECTURE}")
|
||||
endif()
|
||||
|
||||
if(LIBC_TARGET_OS STREQUAL "baremetal")
|
||||
set(LIBC_TARGET_OS_IS_BAREMETAL TRUE)
|
||||
elseif(LIBC_TARGET_OS STREQUAL "linux")
|
||||
set(LIBC_TARGET_OS_IS_LINUX TRUE)
|
||||
elseif(LIBC_TARGET_OS STREQUAL "darwin")
|
||||
set(LIBC_TARGET_OS_IS_DARWIN TRUE)
|
||||
elseif(LIBC_TARGET_OS STREQUAL "windows")
|
||||
set(LIBC_TARGET_OS_IS_WINDOWS TRUE)
|
||||
else()
|
||||
message(FATAL_ERROR
|
||||
"Unsupported libc target operating system ${LIBC_TARGET_OS}")
|
||||
endif()
|
||||
|
||||
|
||||
# If the compiler target triple is not the same as the triple specified by
|
||||
# LIBC_TARGET_TRIPLE, we will add a --target option if the compiler is clang.
|
||||
# If the compiler is GCC we just error out as there is no equivalent of an
|
||||
|
||||
26
libc/config/baremetal/api.td
Normal file
26
libc/config/baremetal/api.td
Normal file
@@ -0,0 +1,26 @@
|
||||
include "config/public_api.td"
|
||||
|
||||
include "spec/stdc.td"
|
||||
|
||||
def CTypeAPI : PublicAPI<"ctype.h"> {
|
||||
}
|
||||
|
||||
def IntTypesAPI : PublicAPI<"inttypes.h"> {
|
||||
let Types = ["imaxdiv_t"];
|
||||
}
|
||||
|
||||
def StdlibAPI : PublicAPI<"stdlib.h"> {
|
||||
let Types = [
|
||||
"div_t",
|
||||
"ldiv_t",
|
||||
"lldiv_t",
|
||||
"size_t",
|
||||
"__bsearchcompare_t",
|
||||
"__qsortcompare_t",
|
||||
"__atexithandler_t",
|
||||
];
|
||||
}
|
||||
|
||||
def StringAPI : PublicAPI<"string.h"> {
|
||||
let Types = ["size_t"];
|
||||
}
|
||||
100
libc/config/baremetal/entrypoints.txt
Normal file
100
libc/config/baremetal/entrypoints.txt
Normal file
@@ -0,0 +1,100 @@
|
||||
set(TARGET_LIBC_ENTRYPOINTS
|
||||
# ctype.h entrypoints
|
||||
libc.src.ctype.isalnum
|
||||
libc.src.ctype.isalpha
|
||||
libc.src.ctype.isascii
|
||||
libc.src.ctype.isblank
|
||||
libc.src.ctype.iscntrl
|
||||
libc.src.ctype.isdigit
|
||||
libc.src.ctype.isgraph
|
||||
libc.src.ctype.islower
|
||||
libc.src.ctype.isprint
|
||||
libc.src.ctype.ispunct
|
||||
libc.src.ctype.isspace
|
||||
libc.src.ctype.isupper
|
||||
libc.src.ctype.isxdigit
|
||||
libc.src.ctype.toascii
|
||||
libc.src.ctype.tolower
|
||||
libc.src.ctype.toupper
|
||||
|
||||
# string.h entrypoints
|
||||
libc.src.string.bcmp
|
||||
libc.src.string.bcopy
|
||||
libc.src.string.bzero
|
||||
libc.src.string.memccpy
|
||||
libc.src.string.memchr
|
||||
libc.src.string.memcmp
|
||||
libc.src.string.memcpy
|
||||
libc.src.string.memmove
|
||||
libc.src.string.mempcpy
|
||||
libc.src.string.memrchr
|
||||
libc.src.string.memset
|
||||
libc.src.string.stpcpy
|
||||
libc.src.string.stpncpy
|
||||
libc.src.string.strcat
|
||||
libc.src.string.strchr
|
||||
libc.src.string.strcmp
|
||||
libc.src.string.strcpy
|
||||
libc.src.string.strcspn
|
||||
libc.src.string.strlcat
|
||||
libc.src.string.strlcpy
|
||||
libc.src.string.strlen
|
||||
libc.src.string.strncat
|
||||
libc.src.string.strncmp
|
||||
libc.src.string.strncpy
|
||||
libc.src.string.strnlen
|
||||
libc.src.string.strpbrk
|
||||
libc.src.string.strrchr
|
||||
libc.src.string.strspn
|
||||
libc.src.string.strstr
|
||||
libc.src.string.strtok
|
||||
libc.src.string.strtok_r
|
||||
|
||||
# inttypes.h entrypoints
|
||||
libc.src.inttypes.imaxabs
|
||||
libc.src.inttypes.imaxdiv
|
||||
libc.src.inttypes.strtoimax
|
||||
libc.src.inttypes.strtoumax
|
||||
|
||||
# stdlib.h entrypoints
|
||||
libc.src.stdlib.abs
|
||||
libc.src.stdlib.atoi
|
||||
libc.src.stdlib.atof
|
||||
libc.src.stdlib.atol
|
||||
libc.src.stdlib.atoll
|
||||
libc.src.stdlib.bsearch
|
||||
libc.src.stdlib.div
|
||||
libc.src.stdlib.labs
|
||||
libc.src.stdlib.ldiv
|
||||
libc.src.stdlib.llabs
|
||||
libc.src.stdlib.lldiv
|
||||
libc.src.stdlib.qsort
|
||||
libc.src.stdlib.strtod
|
||||
libc.src.stdlib.strtof
|
||||
libc.src.stdlib.strtol
|
||||
libc.src.stdlib.strtold
|
||||
libc.src.stdlib.strtoll
|
||||
libc.src.stdlib.strtoul
|
||||
libc.src.stdlib.strtoull
|
||||
)
|
||||
|
||||
set(TARGET_LIBM_ENTRYPOINTS
|
||||
# math.h entrypoints
|
||||
libc.src.math.fabs
|
||||
libc.src.math.fabsf
|
||||
libc.src.math.fabsl
|
||||
libc.src.math.fdim
|
||||
libc.src.math.fdimf
|
||||
libc.src.math.fdiml
|
||||
libc.src.math.fmax
|
||||
libc.src.math.fmaxf
|
||||
libc.src.math.fmaxl
|
||||
libc.src.math.fmin
|
||||
libc.src.math.fminf
|
||||
libc.src.math.fminl
|
||||
)
|
||||
|
||||
set(TARGET_LLVMLIBC_ENTRYPOINTS
|
||||
${TARGET_LIBC_ENTRYPOINTS}
|
||||
${TARGET_LIBM_ENTRYPOINTS}
|
||||
)
|
||||
8
libc/config/baremetal/headers.txt
Normal file
8
libc/config/baremetal/headers.txt
Normal file
@@ -0,0 +1,8 @@
|
||||
set(TARGET_PUBLIC_HEADERS
|
||||
libc.include.ctype
|
||||
libc.include.errno
|
||||
libc.include.inttypes
|
||||
libc.include.math
|
||||
libc.include.stdlib
|
||||
libc.include.string
|
||||
)
|
||||
@@ -1,3 +1,7 @@
|
||||
if(LIBC_TARGET_OS_IS_BAREMETAL)
|
||||
return()
|
||||
endif()
|
||||
|
||||
add_libc_tool_unittest(
|
||||
wrappergen_test
|
||||
SRCS
|
||||
|
||||
@@ -2,7 +2,8 @@ add_subdirectory(MPFRWrapper)
|
||||
add_subdirectory(testutils)
|
||||
add_subdirectory(UnitTest)
|
||||
|
||||
if(LLVM_LIBC_FULL_BUILD AND NOT LIBC_TARGET_ARCHITECTURE_IS_GPU)
|
||||
if(LLVM_LIBC_FULL_BUILD AND NOT
|
||||
(LIBC_TARGET_ARCHITECTURE_IS_GPU OR LIBC_TARGET_OS_IS_BAREMETAL))
|
||||
add_subdirectory(IntegrationTest)
|
||||
add_subdirectory(tools)
|
||||
endif()
|
||||
|
||||
Reference in New Issue
Block a user