diff --git a/libc/config/linux/aarch64/headers.txt b/libc/config/linux/aarch64/headers.txt index 6d3bc9188583b..0573851fbc20b 100644 --- a/libc/config/linux/aarch64/headers.txt +++ b/libc/config/linux/aarch64/headers.txt @@ -18,6 +18,7 @@ set(TARGET_PUBLIC_HEADERS libc.include.locale libc.include.malloc libc.include.math + libc.include.netinet_in libc.include.poll libc.include.pthread libc.include.sched diff --git a/libc/config/linux/riscv/headers.txt b/libc/config/linux/riscv/headers.txt index 6d3bc9188583b..0573851fbc20b 100644 --- a/libc/config/linux/riscv/headers.txt +++ b/libc/config/linux/riscv/headers.txt @@ -18,6 +18,7 @@ set(TARGET_PUBLIC_HEADERS libc.include.locale libc.include.malloc libc.include.math + libc.include.netinet_in libc.include.poll libc.include.pthread libc.include.sched diff --git a/libc/config/linux/x86_64/headers.txt b/libc/config/linux/x86_64/headers.txt index 6d3bc9188583b..0573851fbc20b 100644 --- a/libc/config/linux/x86_64/headers.txt +++ b/libc/config/linux/x86_64/headers.txt @@ -18,6 +18,7 @@ set(TARGET_PUBLIC_HEADERS libc.include.locale libc.include.malloc libc.include.math + libc.include.netinet_in libc.include.poll libc.include.pthread libc.include.sched diff --git a/libc/include/CMakeLists.txt b/libc/include/CMakeLists.txt index 8fd37b0ee5ad6..afa90e6c8b655 100644 --- a/libc/include/CMakeLists.txt +++ b/libc/include/CMakeLists.txt @@ -191,6 +191,17 @@ add_header_macro( .inttypes ) +file(MAKE_DIRECTORY ${LIBC_INCLUDE_DIR}/netinet) + +add_header_macro( + netinet_in + ../libc/include/netinet/in.yaml + netinet/in.h + DEPENDS + .llvm_libc_common_h + .llvm-libc-macros.netinet_in_macros +) + add_header_macro( assert ../libc/include/assert.yaml diff --git a/libc/include/llvm-libc-macros/CMakeLists.txt b/libc/include/llvm-libc-macros/CMakeLists.txt index f71540313f0b3..76c03d913ee12 100644 --- a/libc/include/llvm-libc-macros/CMakeLists.txt +++ b/libc/include/llvm-libc-macros/CMakeLists.txt @@ -152,6 +152,12 @@ add_macro_header( .math_macros ) +add_macro_header( + netinet_in_macros + HDR + netinet-in-macros.h +) + add_macro_header( offsetof_macro HDR diff --git a/libc/include/llvm-libc-macros/netinet-in-macros.h b/libc/include/llvm-libc-macros/netinet-in-macros.h new file mode 100644 index 0000000000000..c05e5e2aec248 --- /dev/null +++ b/libc/include/llvm-libc-macros/netinet-in-macros.h @@ -0,0 +1,19 @@ +//===-- Definition of macros from netinet/in.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_NETINET_IN_MACROS_H +#define LLVM_LIBC_MACROS_NETINET_IN_MACROS_H + +#define IPPROTO_IP 0 +#define IPPROTO_ICMP 1 +#define IPPROTO_TCP 6 +#define IPPROTO_UDP 17 +#define IPPROTO_IPV6 41 +#define IPPROTO_RAW 255 + +#endif // LLVM_LIBC_MACROS_NETINET_IN_MACROS_H diff --git a/libc/include/netinet/in.h.def b/libc/include/netinet/in.h.def new file mode 100644 index 0000000000000..d9a6a6ebe375d --- /dev/null +++ b/libc/include/netinet/in.h.def @@ -0,0 +1,18 @@ +//===-- C standard library header in.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_NETINET_IN_H +#define LLVM_LIBC_NETINET_IN_H + +#include "__llvm-libc-common.h" + +#include "../llvm-libc-macros/netinet-in-macros.h" + +%%public_api() + +#endif // LLVM_LIBC_NETINET_IN_H diff --git a/libc/include/netinet/in.yaml b/libc/include/netinet/in.yaml new file mode 100644 index 0000000000000..fbd798d60cbf9 --- /dev/null +++ b/libc/include/netinet/in.yaml @@ -0,0 +1,7 @@ +header: netinet/in.h +header_template: in.h.def +macros: [] +types: [] +enums: [] +objects: [] +functions: [] diff --git a/libc/test/include/CMakeLists.txt b/libc/test/include/CMakeLists.txt index 11e4c3a84157f..3ac5615d7e209 100644 --- a/libc/test/include/CMakeLists.txt +++ b/libc/test/include/CMakeLists.txt @@ -207,6 +207,16 @@ add_libc_test( libc.include.llvm-libc-macros.math_function_macros ) +add_libc_test( + netinet_in_test + SUITE + libc_include_tests + SRCS + netinet_in_test.cpp + DEPENDS + libc.include.llvm-libc-macros.netinet_in_macros +) + add_libc_test( signbit_test SUITE diff --git a/libc/test/include/netinet_in_test.cpp b/libc/test/include/netinet_in_test.cpp new file mode 100644 index 0000000000000..a6c47a779ea44 --- /dev/null +++ b/libc/test/include/netinet_in_test.cpp @@ -0,0 +1,19 @@ +//===-- Unittests for netinet/in macro ------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// + +#include "include/llvm-libc-macros/netinet-in-macros.h" +#include "test/UnitTest/Test.h" + +TEST(LlvmLibcNetinetInTest, IPPROTOMacro) { + EXPECT_EQ(IPPROTO_IP, 0); + EXPECT_EQ(IPPROTO_ICMP, 1); + EXPECT_EQ(IPPROTO_TCP, 6); + EXPECT_EQ(IPPROTO_UDP, 17); + EXPECT_EQ(IPPROTO_IPV6, 41); + EXPECT_EQ(IPPROTO_RAW, 255); +}