diff --git a/libc/docs/headers/arpa/inet.rst b/libc/docs/headers/arpa/inet.rst new file mode 100644 index 0000000000000..c82ca5427fbbb --- /dev/null +++ b/libc/docs/headers/arpa/inet.rst @@ -0,0 +1,50 @@ +.. include:: ../../check.rst + +=========== +arpa/inet.h +=========== + +Functions +========= + +.. list-table:: + :widths: auto + :align: center + :header-rows: 1 + + * - Function + - Implemented + - C23 Standard Section + - POSIX.1-2024 Standard Section + * - htonl + - |check| + - + - + * - htons + - |check| + - + - + * - inet_addr + - + - + - + * - inet_ntoa + - + - + - + * - inet_ntop + - + - + - + * - inet_pton + - + - + - + * - ntohl + - |check| + - + - + * - ntohs + - |check| + - + - diff --git a/libc/docs/headers/index.rst b/libc/docs/headers/index.rst index 9bd6396843e78..07ab6dd9b2674 100644 --- a/libc/docs/headers/index.rst +++ b/libc/docs/headers/index.rst @@ -4,6 +4,7 @@ Implementation Status .. toctree:: :maxdepth: 1 + arpa/inet assert complex ctype @@ -21,6 +22,7 @@ Implementation Status stdlib string strings + sys/mman threads time uchar diff --git a/libc/docs/headers/sys/mman.rst b/libc/docs/headers/sys/mman.rst new file mode 100644 index 0000000000000..e3404205c07ac --- /dev/null +++ b/libc/docs/headers/sys/mman.rst @@ -0,0 +1,179 @@ +.. include:: ../../check.rst + +========== +sys/mman.h +========== + +Macros +====== + +.. list-table:: + :widths: auto + :align: center + :header-rows: 1 + + * - Macro + - Implemented + - C23 Standard Section + - POSIX.1-2024 Standard Section + * - MAP_ANON + - + - + - + * - MAP_ANONYMOUS + - + - + - + * - MAP_FAILED + - |check| + - + - + * - MAP_FIXED + - + - + - + * - MAP_PRIVATE + - + - + - + * - MAP_SHARED + - + - + - + * - MCL_CURRENT + - + - + - + * - MCL_FUTURE + - + - + - + * - MS_ASYNC + - + - + - + * - MS_INVALIDATE + - + - + - + * - MS_SYNC + - + - + - + * - POSIX_MADV_DONTNEED + - |check| + - + - + * - POSIX_MADV_NORMAL + - |check| + - + - + * - POSIX_MADV_RANDOM + - |check| + - + - + * - POSIX_MADV_SEQUENTIAL + - |check| + - + - + * - POSIX_MADV_WILLNEED + - |check| + - + - + * - POSIX_TYPED_MEM_ALLOCATE + - + - + - + * - POSIX_TYPED_MEM_ALLOCATE_CONTIG + - + - + - + * - POSIX_TYPED_MEM_MAP_ALLOCATABLE + - + - + - + * - PROT_EXEC + - + - + - + * - PROT_NONE + - + - + - + * - PROT_READ + - + - + - + * - PROT_WRITE + - + - + - + +Functions +========= + +.. list-table:: + :widths: auto + :align: center + :header-rows: 1 + + * - Function + - Implemented + - C23 Standard Section + - POSIX.1-2024 Standard Section + * - mlock + - |check| + - + - + * - mlockall + - |check| + - + - + * - mmap + - |check| + - + - + * - mprotect + - |check| + - + - + * - msync + - |check| + - + - + * - munlock + - |check| + - + - + * - munlockall + - |check| + - + - + * - munmap + - |check| + - + - + * - posix_madvise + - |check| + - + - + * - posix_mem_offset + - + - + - + * - posix_typed_mem_get_info + - + - + - + * - posix_typed_mem_open + - + - + - + * - shm_open + - |check| + - + - + * - shm_unlink + - |check| + - + - diff --git a/libc/utils/docgen/arpa/inet.json b/libc/utils/docgen/arpa/inet.json new file mode 100644 index 0000000000000..0e788c57d5f7a --- /dev/null +++ b/libc/utils/docgen/arpa/inet.json @@ -0,0 +1,28 @@ +{ + "functions": { + "htonl" : { + "posix-definition": "" + }, + "htons": { + "posix-definition": "" + }, + "ntohl": { + "posix-definition": "" + }, + "ntohs": { + "posix-definition": "" + }, + "inet_addr": { + "posix-definition": "" + }, + "inet_ntoa": { + "posix-definition": "" + }, + "inet_ntop": { + "posix-definition": "" + }, + "inet_pton": { + "posix-definition": "" + } + } +} diff --git a/libc/utils/docgen/docgen.py b/libc/utils/docgen/docgen.py index aa30a6e51ef87..3c8b33a9b8fb2 100755 --- a/libc/utils/docgen/docgen.py +++ b/libc/utils/docgen/docgen.py @@ -10,8 +10,9 @@ from argparse import ArgumentParser, Namespace from pathlib import Path from typing import Dict -import sys import json +import os +import sys from header import Header @@ -161,7 +162,10 @@ def print_macros_rst(header: Header, macros: Dict): def print_impl_status_rst(header: Header, api: Dict): - print(".. include:: ../check.rst\n") + if os.sep in header.name: + print(".. include:: ../../check.rst\n") + else: + print(".. include:: ../check.rst\n") print("=" * len(header.name)) print(header.name) @@ -176,10 +180,22 @@ def print_impl_status_rst(header: Header, api: Dict): print_functions_rst(header, api["functions"]) +# This code implicitly relies on docgen.py being in the same dir as the json +# files and is likely to need to be fixed when re-integrating docgen into +# hdrgen. +def get_choices() -> List: + choices = [] + for path in Path(__file__).parent.rglob("*.json"): + fname = path.with_suffix(".h").name + if path.parent != Path(__file__).parent: + fname = path.parent.name + os.sep + fname + choices.append(fname) + return choices + + def parse_args() -> Namespace: parser = ArgumentParser() - choices = [p.with_suffix(".h").name for p in Path(__file__).parent.glob("*.json")] - parser.add_argument("header_name", choices=choices) + parser.add_argument("header_name", choices=get_choices()) return parser.parse_args() diff --git a/libc/utils/docgen/header.py b/libc/utils/docgen/header.py index dde210078db27..7728a0f1d5b44 100644 --- a/libc/utils/docgen/header.py +++ b/libc/utils/docgen/header.py @@ -83,5 +83,10 @@ def __get_macro_files(self) -> Generator[Path, None, None]: macro file might be located in a subdirectory: libc/include/llvm-libc-macros/fcntl-macros.h libc/include/llvm-libc-macros/linux/fcntl-macros.h + + When a header would be nested in a dir (such as arpa/, sys/, etc) we + instead use a hyphen in the name. + libc/include/llvm-libc-macros/sys-mman-macros.h """ - return self.macros_dir.glob(f"**/{self.stem}-macros.h") + stem = self.stem.replace("/", "-") + return self.macros_dir.glob(f"**/{stem}-macros.h") diff --git a/libc/utils/docgen/sys/mman.json b/libc/utils/docgen/sys/mman.json new file mode 100644 index 0000000000000..59f904fcfea97 --- /dev/null +++ b/libc/utils/docgen/sys/mman.json @@ -0,0 +1,43 @@ +{ + "macros": { + "PROT_EXEC": { "posix-definition": "" }, + "PROT_NONE": { "posix-definition": "" }, + "PROT_READ": { "posix-definition": "" }, + "PROT_WRITE": { "posix-definition": "" }, + "MAP_ANON": { "posix-definition": "" }, + "MAP_ANONYMOUS": { "posix-definition": "" }, + "MAP_FIXED": { "posix-definition": "" }, + "MAP_PRIVATE": { "posix-definition": "" }, + "MAP_SHARED": { "posix-definition": "" }, + "MS_ASYNC": { "posix-definition": "" }, + "MS_INVALIDATE": { "posix-definition": "" }, + "MS_SYNC": { "posix-definition": "" }, + "MCL_CURRENT": { "posix-definition": "" }, + "MCL_FUTURE": { "posix-definition": "" }, + "MAP_FAILED": { "posix-definition": "" }, + "POSIX_MADV_DONTNEED": { "posix-definition": "" }, + "POSIX_MADV_NORMAL": { "posix-definition": "" }, + "POSIX_MADV_RANDOM": { "posix-definition": "" }, + "POSIX_MADV_SEQUENTIAL": { "posix-definition": "" }, + "POSIX_MADV_WILLNEED": { "posix-definition": "" }, + "POSIX_TYPED_MEM_ALLOCATE": { "posix-definition": "" }, + "POSIX_TYPED_MEM_ALLOCATE_CONTIG": { "posix-definition": "" }, + "POSIX_TYPED_MEM_MAP_ALLOCATABLE": { "posix-definition": "" } + }, + "functions": { + "mlock": { "posix-definition": "" }, + "mlockall": { "posix-definition": "" }, + "mmap": { "posix-definition": "" }, + "mprotect": { "posix-definition": "" }, + "msync": { "posix-definition": "" }, + "munlock": { "posix-definition": "" }, + "munlockall": { "posix-definition": "" }, + "munmap": { "posix-definition": "" }, + "posix_madvise": { "posix-definition": "" }, + "posix_mem_offset": { "posix-definition": "" }, + "posix_typed_mem_get_info": { "posix-definition": "" }, + "posix_typed_mem_open": { "posix-definition": "" }, + "shm_open": { "posix-definition": "" }, + "shm_unlink": { "posix-definition": "" } + } +}