diff --git a/libc/config/linux/aarch64/headers.txt b/libc/config/linux/aarch64/headers.txt --- a/libc/config/linux/aarch64/headers.txt +++ b/libc/config/linux/aarch64/headers.txt @@ -11,6 +11,7 @@ libc.include.stdlib libc.include.string libc.include.sys_mman + libc.include.sys_socket libc.include.sys_syscall libc.include.threads libc.include.time diff --git a/libc/config/linux/x86_64/headers.txt b/libc/config/linux/x86_64/headers.txt --- a/libc/config/linux/x86_64/headers.txt +++ b/libc/config/linux/x86_64/headers.txt @@ -29,6 +29,7 @@ libc.include.sys_random libc.include.sys_resource libc.include.sys_select + libc.include.sys_socket libc.include.sys_stat libc.include.sys_syscall libc.include.sys_time diff --git a/libc/include/CMakeLists.txt b/libc/include/CMakeLists.txt --- a/libc/include/CMakeLists.txt +++ b/libc/include/CMakeLists.txt @@ -361,6 +361,15 @@ .llvm-libc-types.ssize_t ) +add_gen_header( + sys_socket + DEF_FILE sys/socket.h.def + GEN_HDR sys/socket.h + DEPENDS + .llvm_libc_common_h + .llvm-libc-macros.sys_socket_macros +) + add_gen_header( sys_syscall DEF_FILE sys/syscall.h.def diff --git a/libc/include/llvm-libc-macros/CMakeLists.txt b/libc/include/llvm-libc-macros/CMakeLists.txt --- a/libc/include/llvm-libc-macros/CMakeLists.txt +++ b/libc/include/llvm-libc-macros/CMakeLists.txt @@ -107,6 +107,14 @@ sys-select-macros.h ) +add_header( + sys_socket_macros + HDR + sys-socket-macros.h + DEPENDS + .linux.sys_socket_macros +) + add_header( sys_time_macros HDR diff --git a/libc/include/llvm-libc-macros/linux/CMakeLists.txt b/libc/include/llvm-libc-macros/linux/CMakeLists.txt --- a/libc/include/llvm-libc-macros/linux/CMakeLists.txt +++ b/libc/include/llvm-libc-macros/linux/CMakeLists.txt @@ -28,6 +28,12 @@ sys-random-macros.h ) +add_header( + sys_socket_macros + HDR + sys-socket-macros.h +) + add_header( sys_wait_macros HDR diff --git a/libc/include/llvm-libc-macros/linux/sys-socket-macros.h b/libc/include/llvm-libc-macros/linux/sys-socket-macros.h new file mode 100644 --- /dev/null +++ b/libc/include/llvm-libc-macros/linux/sys-socket-macros.h @@ -0,0 +1,21 @@ +//===-- Definition of macros from sys/socket.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_LINUX_SYS_SOCKET_MACROS_H +#define __LLVM_LIBC_MACROS_LINUX_SYS_SOCKET_MACROS_H + +// IEEE Std 1003.1-2017 - basedefs/sys_socket.h.html +// Macro values come from the Linux syscall interface. + +#define AF_UNSPEC 0 // Unspecified +#define AF_UNIX 1 // Unix domain sockets +#define AF_LOCAL 1 // POSIX name for AF_UNIX +#define AF_INET 2 // Internet IPv4 Protocol +#define AF_INET6 10 // IP version 6 + +#endif // __LLVM_LIBC_MACROS_LINUX_SYS_SOCKET_MACROS_H diff --git a/libc/include/llvm-libc-macros/sys-socket-macros.h b/libc/include/llvm-libc-macros/sys-socket-macros.h new file mode 100644 --- /dev/null +++ b/libc/include/llvm-libc-macros/sys-socket-macros.h @@ -0,0 +1,16 @@ +//===-- Macros defined in sys/socket.h header file ------------------------===// +// +// 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_SYS_SOCKET_MACROS_H +#define __LLVM_LIBC_MACROS_SYS_SOCKET_MACROS_H + +#ifdef __unix__ +#include "linux/sys-socket-macros.h" +#endif + +#endif // __LLVM_LIBC_MACROS_SYS_SOCKET_MACROS_H diff --git a/libc/include/sys/socket.h.def b/libc/include/sys/socket.h.def new file mode 100644 --- /dev/null +++ b/libc/include/sys/socket.h.def @@ -0,0 +1,18 @@ +//===-- POSIX header sys/socket.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_SYS_SOCKET_H +#define LLVM_LIBC_SYS_SOCKET_H + +#include <__llvm-libc-common.h> + +#include + +%%public_api() + +#endif // LLVM_LIBC_SYS_SOCKET_H diff --git a/libc/spec/linux.td b/libc/spec/linux.td --- a/libc/spec/linux.td +++ b/libc/spec/linux.td @@ -94,6 +94,19 @@ ] >; + HeaderSpec SysSocket = HeaderSpec< + "sys/socket.h", + [ + Macro<"AF_UNSPEC">, + Macro<"AF_LOCAL">, + Macro<"AF_INET">, + Macro<"AF_INET6">, + ], + [], // Types + [], // Enumerations + [] // Functions + >; + HeaderSpec SysTime = HeaderSpec< "sys/time.h", [ @@ -155,6 +168,7 @@ SysMMan, SysPrctl, SysRandom, + SysSocket, SysTime, Signal, ];