[libc] Add the <endian.h> header. (#125168)

Closes [#124631](https://github.com/llvm/llvm-project/issues/124631).
ref:
https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/endian.h.html

This patch adds the implementation of `endian.h`, which includes the
header itself and three related macros. These macros in the header rely
on the compiler preprocessor, similar to how
https://github.com/llvm/llvm-project/blob/main/libc/src/__support/endian_internal.h
does. Hopefully this will meet the requirements for compiling llvm with
llvm-libc.
This commit is contained in:
c8ef 2025-02-07 09:20:18 +08:00 committed by GitHub
parent f5b41318b0
commit 6807164500
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
10 changed files with 93 additions and 0 deletions

View File

@ -4,6 +4,7 @@ set(TARGET_PUBLIC_HEADERS
libc.include.ctype
libc.include.dlfcn
libc.include.elf
libc.include.endian
libc.include.errno
libc.include.features
libc.include.fenv

View File

@ -6,6 +6,7 @@ set(TARGET_PUBLIC_HEADERS
libc.include.dirent
libc.include.dlfcn
libc.include.elf
libc.include.endian
libc.include.errno
libc.include.fcntl
libc.include.features

View File

@ -39,6 +39,7 @@ if (SPHINX_FOUND)
assert
cpio
ctype
endian
errno
fenv
float

View File

@ -10,6 +10,7 @@ Implementation Status
complex
cpio
ctype
endian
errno
fenv
float

View File

@ -73,6 +73,15 @@ add_header_macro(
.llvm_libc_common_h
)
add_header_macro(
endian
../libc/include/endian.yaml
endian.h
DEPENDS
.llvm-libc-macros.endian_macros
.llvm_libc_common_h
)
add_header_macro(
features
../libc/include/features.yaml

17
libc/include/endian.h.def Normal file
View File

@ -0,0 +1,17 @@
//===-- POSIX header endian.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_ENDIAN_H
#define LLVM_LIBC_ENDIAN_H
#include "__llvm-libc-common.h"
#include "llvm-libc-macros/endian-macros.h"
%%public_api()
#endif // LLVM_LIBC_ENDIAN_H

9
libc/include/endian.yaml Normal file
View File

@ -0,0 +1,9 @@
header: endian.h
header_template: endian.h.def
standards:
- POSIX
macros: []
types: []
enums: []
objects: []
functions: []

View File

@ -310,6 +310,12 @@ add_macro_header(
elf-macros.h
)
add_macro_header(
endian_macros
HDR
endian-macros.h
)
add_macro_header(
locale_macros
HDR

View File

@ -0,0 +1,16 @@
//===-- Definition of macros from endian.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_ENDIAN_MACROS_H
#define LLVM_LIBC_MACROS_ENDIAN_MACROS_H
#define LITTLE_ENDIAN __ORDER_LITTLE_ENDIAN__
#define BIG_ENDIAN __ORDER_BIG_ENDIAN__
#define BYTE_ORDER __BYTE_ORDER__
#endif // LLVM_LIBC_MACROS_ENDIAN_MACROS_H

View File

@ -0,0 +1,32 @@
macros:
LITTLE_ENDIAN:
in-latest-posix: ''
BIG_ENDIAN:
in-latest-posix: ''
BYTE_ORDER:
in-latest-posix: ''
be16toh:
in-latest-posix: ''
be32toh:
in-latest-posix: ''
be64toh:
in-latest-posix: ''
htobe16:
in-latest-posix: ''
htobe32:
in-latest-posix: ''
htobe64:
in-latest-posix: ''
htole16:
in-latest-posix: ''
htole32:
in-latest-posix: ''
htole64:
in-latest-posix: ''
le16toh:
in-latest-posix: ''
le32toh:
in-latest-posix: ''
le64toh:
in-latest-posix: ''