[libc-commits] [libc] [libc] Add float.h header. (PR #78737)

via libc-commits libc-commits at lists.llvm.org
Fri Jan 19 07:54:33 PST 2024


https://github.com/lntue created https://github.com/llvm/llvm-project/pull/78737

None

>From 1d6045c95b4ce4c19e2f8f868a1fab5d833ffd9d Mon Sep 17 00:00:00 2001
From: Tue Ly <lntue at google.com>
Date: Fri, 19 Jan 2024 10:52:31 -0500
Subject: [PATCH] [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 6ff51f9786772b..38899fabd980c9 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 6ff51f9786772b..38899fabd980c9 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 7366c530304d47..2dd54b7c1f5053 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 b33fa45e420802..510d62688a45fa 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 dae01310fe9c31..e68e18b87b10e2 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 cfca5959b5ffa5..6a4a4aaeb0a8d4 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 bd08d8f8fa437f..9e6ee51675916e 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 9c70a3bde74f05..dc1daa48f6c875 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 a85f87b2a3ee98..b0e0219a30e673 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 9a06f829eee18a..14aa9ec6d73f3e 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 00000000000000..6d3599d78c69e3
--- /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 <llvm-libc-macros/float-macros.h>
+
+#endif // LLVM_LIBC_FLOAT_H
diff --git a/libc/include/llvm-libc-macros/CMakeLists.txt b/libc/include/llvm-libc-macros/CMakeLists.txt
index 7b2616d4311d94..d965a6a9443ed2 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 00000000000000..0f262c1dd3fdda
--- /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 714dc21f95ba54..99e9b3ca65ca59 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,



More information about the libc-commits mailing list