From 1d6045c95b4ce4c19e2f8f868a1fab5d833ffd9d Mon Sep 17 00:00:00 2001 From: Tue Ly Date: Fri, 19 Jan 2024 10:52:31 -0500 Subject: [PATCH 1/2] [libc] Add float.h header. --- libc/config/baremetal/arm/headers.txt | 1 + libc/config/baremetal/riscv/headers.txt | 1 + libc/config/darwin/arm/headers.txt | 1 + libc/config/darwin/x86_64/headers.txt | 1 + libc/config/gpu/headers.txt | 1 + libc/config/linux/aarch64/headers.txt | 1 + libc/config/linux/arm/headers.txt | 1 + libc/config/linux/riscv/headers.txt | 1 + libc/config/linux/x86_64/headers.txt | 1 + libc/include/CMakeLists.txt | 8 ++++++++ libc/include/float.h.def | 14 +++++++++++++ libc/include/llvm-libc-macros/CMakeLists.txt | 6 ++++++ libc/include/llvm-libc-macros/float-macros.h | 21 ++++++++++++++++++++ libc/spec/stdc.td | 10 ++++++++++ 14 files changed, 68 insertions(+) create mode 100644 libc/include/float.h.def create mode 100644 libc/include/llvm-libc-macros/float-macros.h diff --git a/libc/config/baremetal/arm/headers.txt b/libc/config/baremetal/arm/headers.txt index 6ff51f9786772..38899fabd980c 100644 --- a/libc/config/baremetal/arm/headers.txt +++ b/libc/config/baremetal/arm/headers.txt @@ -2,6 +2,7 @@ set(TARGET_PUBLIC_HEADERS libc.include.ctype libc.include.fenv libc.include.errno + libc.include.float libc.include.inttypes libc.include.math libc.include.stdio diff --git a/libc/config/baremetal/riscv/headers.txt b/libc/config/baremetal/riscv/headers.txt index 6ff51f9786772..38899fabd980c 100644 --- a/libc/config/baremetal/riscv/headers.txt +++ b/libc/config/baremetal/riscv/headers.txt @@ -2,6 +2,7 @@ set(TARGET_PUBLIC_HEADERS libc.include.ctype libc.include.fenv libc.include.errno + libc.include.float libc.include.inttypes libc.include.math libc.include.stdio diff --git a/libc/config/darwin/arm/headers.txt b/libc/config/darwin/arm/headers.txt index 7366c530304d4..2dd54b7c1f505 100644 --- a/libc/config/darwin/arm/headers.txt +++ b/libc/config/darwin/arm/headers.txt @@ -2,6 +2,7 @@ set(TARGET_PUBLIC_HEADERS libc.include.ctype libc.include.errno libc.include.fenv + libc.include.float libc.include.inttypes libc.include.math libc.include.stdlib diff --git a/libc/config/darwin/x86_64/headers.txt b/libc/config/darwin/x86_64/headers.txt index b33fa45e42080..510d62688a45f 100644 --- a/libc/config/darwin/x86_64/headers.txt +++ b/libc/config/darwin/x86_64/headers.txt @@ -3,6 +3,7 @@ set(TARGET_PUBLIC_HEADERS libc.include.errno # Fenv is currently disabled. #libc.include.fenv + libc.include.float libc.include.inttypes libc.include.math libc.include.stdlib diff --git a/libc/config/gpu/headers.txt b/libc/config/gpu/headers.txt index dae01310fe9c3..e68e18b87b10e 100644 --- a/libc/config/gpu/headers.txt +++ b/libc/config/gpu/headers.txt @@ -2,6 +2,7 @@ set(TARGET_PUBLIC_HEADERS libc.include.assert libc.include.ctype libc.include.string + libc.include.float libc.include.inttypes libc.include.math libc.include.fenv diff --git a/libc/config/linux/aarch64/headers.txt b/libc/config/linux/aarch64/headers.txt index cfca5959b5ffa..6a4a4aaeb0a8d 100644 --- a/libc/config/linux/aarch64/headers.txt +++ b/libc/config/linux/aarch64/headers.txt @@ -4,6 +4,7 @@ set(TARGET_PUBLIC_HEADERS libc.include.errno libc.include.features libc.include.fenv + libc.include.float libc.include.inttypes libc.include.math libc.include.pthread diff --git a/libc/config/linux/arm/headers.txt b/libc/config/linux/arm/headers.txt index bd08d8f8fa437..9e6ee51675916 100644 --- a/libc/config/linux/arm/headers.txt +++ b/libc/config/linux/arm/headers.txt @@ -2,6 +2,7 @@ set(TARGET_PUBLIC_HEADERS libc.include.ctype libc.include.fenv libc.include.errno + libc.include.float libc.include.inttypes libc.include.math libc.include.stdlib diff --git a/libc/config/linux/riscv/headers.txt b/libc/config/linux/riscv/headers.txt index 9c70a3bde74f0..dc1daa48f6c87 100644 --- a/libc/config/linux/riscv/headers.txt +++ b/libc/config/linux/riscv/headers.txt @@ -6,6 +6,7 @@ set(TARGET_PUBLIC_HEADERS libc.include.fcntl libc.include.features libc.include.fenv + libc.include.float libc.include.inttypes libc.include.math libc.include.pthread diff --git a/libc/config/linux/x86_64/headers.txt b/libc/config/linux/x86_64/headers.txt index a85f87b2a3ee9..b0e0219a30e67 100644 --- a/libc/config/linux/x86_64/headers.txt +++ b/libc/config/linux/x86_64/headers.txt @@ -6,6 +6,7 @@ set(TARGET_PUBLIC_HEADERS libc.include.fcntl libc.include.features libc.include.fenv + libc.include.float libc.include.inttypes libc.include.math libc.include.pthread diff --git a/libc/include/CMakeLists.txt b/libc/include/CMakeLists.txt index 9a06f829eee18..14aa9ec6d73f3 100644 --- a/libc/include/CMakeLists.txt +++ b/libc/include/CMakeLists.txt @@ -75,6 +75,14 @@ add_gen_header( .llvm-libc-types.imaxdiv_t ) +add_gen_header( + float + DEF_FILE float.h.def + GEN_HDR float.h + DEPENDS + .llvm-libc-macros.float_macros +) + add_gen_header( math DEF_FILE math.h.def diff --git a/libc/include/float.h.def b/libc/include/float.h.def new file mode 100644 index 0000000000000..6d3599d78c69e --- /dev/null +++ b/libc/include/float.h.def @@ -0,0 +1,14 @@ +//===-- C standard library header float.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_FLOAT_H +#define LLVM_LIBC_FLOAT_H + +#include + +#endif // LLVM_LIBC_FLOAT_H diff --git a/libc/include/llvm-libc-macros/CMakeLists.txt b/libc/include/llvm-libc-macros/CMakeLists.txt index 7b2616d4311d9..d965a6a9443ed 100644 --- a/libc/include/llvm-libc-macros/CMakeLists.txt +++ b/libc/include/llvm-libc-macros/CMakeLists.txt @@ -67,6 +67,12 @@ add_macro_header( file-seek-macros.h ) +add_macro_header( + float_macros + HDR + float-macros.h +) + add_macro_header( math_macros HDR diff --git a/libc/include/llvm-libc-macros/float-macros.h b/libc/include/llvm-libc-macros/float-macros.h new file mode 100644 index 0000000000000..0f262c1dd3fdd --- /dev/null +++ b/libc/include/llvm-libc-macros/float-macros.h @@ -0,0 +1,21 @@ +//===-- Definition of macros from float.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_MACROS_FLOAT_MACROS_H +#define __LLVM_LIBC_MACROS_FLOAT_MACROS_H + +#undef FLT_MANT_DIG +#define FLT_MANT_DIG __FLT_MANT_DIG__ + +#undef DBL_MANT_DIG +#define DBL_MANT_DIG __DBL_MANT_DIG__ + +#undef LDBL_MANT_DIG +#define LDBL_MANT_DIG __LDBL_MANT_DIG__ + +#endif // __LLVM_LIBC_MACROS_FLOAT_MACROS_H diff --git a/libc/spec/stdc.td b/libc/spec/stdc.td index 714dc21f95ba5..99e9b3ca65ca5 100644 --- a/libc/spec/stdc.td +++ b/libc/spec/stdc.td @@ -847,6 +847,15 @@ def StdC : StandardSpec<"stdc"> { ] >; + HeaderSpec Float = HeaderSpec< + "float.h", + [ + Macro<"FLT_MANT_DIG">, + Macro<"DBL_MANT_DIG">, + Macro<"LDBL_MANT_DIG">, + ] + >; + NamedType SigAtomicT = NamedType<"sig_atomic_t">; HeaderSpec Signal = HeaderSpec< "signal.h", @@ -1149,6 +1158,7 @@ def StdC : StandardSpec<"stdc"> { CType, Errno, Fenv, + Float, Math, String, StdIO, From 3f011eb725d043658a4f8c6d69020d670e57efc7 Mon Sep 17 00:00:00 2001 From: Tue Ly Date: Fri, 19 Jan 2024 11:02:41 -0500 Subject: [PATCH 2/2] Fix formatting. --- libc/include/llvm-libc-macros/float-macros.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libc/include/llvm-libc-macros/float-macros.h b/libc/include/llvm-libc-macros/float-macros.h index 0f262c1dd3fdd..1db27f117a46f 100644 --- a/libc/include/llvm-libc-macros/float-macros.h +++ b/libc/include/llvm-libc-macros/float-macros.h @@ -1,4 +1,4 @@ -//===-- Definition of macros from float.h ----------------------------------===// +//===-- Definition of macros from float.h ---------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information.