diff --git a/libc/config/linux/x86_64/headers.txt b/libc/config/linux/x86_64/headers.txt --- a/libc/config/linux/x86_64/headers.txt +++ b/libc/config/linux/x86_64/headers.txt @@ -6,6 +6,7 @@ libc.include.fcntl libc.include.fenv libc.include.inttypes + libc.include.limits libc.include.math libc.include.pthread libc.include.sched diff --git a/libc/include/CMakeLists.txt b/libc/include/CMakeLists.txt --- a/libc/include/CMakeLists.txt +++ b/libc/include/CMakeLists.txt @@ -66,6 +66,15 @@ .llvm-libc-types.imaxdiv_t ) +add_gen_header( + limits + DEF_FILE limits.h.def + GEN_HDR limits.h + DEPENDS + .llvm_libc_common_h + .llvm-libc-macros.limits_macros +) + add_gen_header( math DEF_FILE math.h.def diff --git a/libc/include/limits.h.def b/libc/include/limits.h.def new file mode 100644 --- /dev/null +++ b/libc/include/limits.h.def @@ -0,0 +1,17 @@ +//===-- C standard library header limits.h ---------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_LIBC_LIMITS_H +#define LLVM_LIBC_LIMITS_H + +#include <__llvm-libc-common.h> +#include + +%%public_api() + +#endif // LLVM_LIBC_LIMITS_H diff --git a/libc/include/llvm-libc-macros/CMakeLists.txt b/libc/include/llvm-libc-macros/CMakeLists.txt --- a/libc/include/llvm-libc-macros/CMakeLists.txt +++ b/libc/include/llvm-libc-macros/CMakeLists.txt @@ -172,3 +172,9 @@ HDR wchar-macros.h ) + +add_header( + limits_macros + HDR + limits-macros.h +) diff --git a/libc/include/llvm-libc-macros/limits-macros.h b/libc/include/llvm-libc-macros/limits-macros.h new file mode 100644 --- /dev/null +++ b/libc/include/llvm-libc-macros/limits-macros.h @@ -0,0 +1,12 @@ +#ifndef __LLVM_LIBC_MACROS_LIMITS_MACROS_H +#define __LLVM_LIBC_MACROS_LIMITS_MACROS_H + +#ifdef __linux__ +#include +#endif + +#ifndef SSIZE_MAX +#define SSIZE_MAX __LONG_MAX__ +#endif + +#endif // __LLVM_LIBC_MACROS_LIMITS_MACROS_H diff --git a/libc/spec/posix.td b/libc/spec/posix.td --- a/libc/spec/posix.td +++ b/libc/spec/posix.td @@ -225,6 +225,16 @@ ] >; + HeaderSpec Limits = HeaderSpec< + "limits.h", + [ + Macro<"SSIZE_MAX">, + ], + [], // Types + [], // Enumerations + [] // Functions + >; + HeaderSpec SysMMan = HeaderSpec< "sys/mman.h", [ @@ -1395,6 +1405,7 @@ Dirent, Errno, FCntl, + Limits, PThread, Sched, Signal, diff --git a/libc/spec/stdc.td b/libc/spec/stdc.td --- a/libc/spec/stdc.td +++ b/libc/spec/stdc.td @@ -821,6 +821,16 @@ ] >; + HeaderSpec Limits = HeaderSpec< + "limits.h", + [ + Macro<"LONG_MAX">, + ], + [], // Types + [], // Enumerations + [] // Functions + >; + HeaderSpec Errno = HeaderSpec< "errno.h", [ @@ -1138,6 +1148,7 @@ StdIO, StdLib, IntTypes, + Limits, SetJmp, Signal, Threads,