[libc-commits] [libc] [libc] Support for generating proxy headers (PR #175279)

Petr Hosek via libc-commits libc-commits at lists.llvm.org
Fri Jan 9 20:04:42 PST 2026


https://github.com/petrhosek created https://github.com/llvm/llvm-project/pull/175279

This is a follow up to #174823 which adds build system integration.

>From ad4754d5c6dfbca96f107406df16f4ba2975e3fb Mon Sep 17 00:00:00 2001
From: Petr Hosek <phosek at google.com>
Date: Sat, 10 Jan 2026 04:02:34 +0000
Subject: [PATCH] [libc] Support for generating proxy headers

This is a follow up to #174823 which adds build system integration.
---
 libc/cmake/modules/LLVMLibCHeaderRules.cmake | 10 ++++++++--
 libc/cmake/modules/LLVMLibCObjectRules.cmake |  1 +
 libc/cmake/modules/LLVMLibCTestRules.cmake   |  1 +
 libc/utils/hdrgen/hdrgen/header.py           |  1 +
 4 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/libc/cmake/modules/LLVMLibCHeaderRules.cmake b/libc/cmake/modules/LLVMLibCHeaderRules.cmake
index b092b37ffd8da..0704ae1c79e1c 100644
--- a/libc/cmake/modules/LLVMLibCHeaderRules.cmake
+++ b/libc/cmake/modules/LLVMLibCHeaderRules.cmake
@@ -75,7 +75,7 @@ endfunction(add_header)
 function(add_gen_header target_name)
   cmake_parse_arguments(
     "ADD_GEN_HDR"
-    "PUBLIC" # No optional arguments
+    "PROXY;PUBLIC" # No optional arguments
     "YAML_FILE;GEN_HDR" # Single value arguments
     "DEPENDS"     # Multi value arguments
     ${ARGN}
@@ -94,7 +94,12 @@ function(add_gen_header target_name)
 
   set(absolute_path ${CMAKE_CURRENT_SOURCE_DIR}/${ADD_GEN_HDR_GEN_HDR})
   file(RELATIVE_PATH relative_path ${LIBC_INCLUDE_SOURCE_DIR} ${absolute_path})
-  set(out_file ${LIBC_INCLUDE_DIR}/${relative_path})
+  if (ADD_GEN_HDR_PROXY)
+    set(out_file ${LIBC_BUILD_DIR}/hdr/${relative_path})
+    set(proxy_arg "--proxy")
+  else()
+    set(out_file ${LIBC_INCLUDE_DIR}/${relative_path})
+  endif()
   set(dep_file "${out_file}.d")
   set(yaml_file ${CMAKE_SOURCE_DIR}/${ADD_GEN_HDR_YAML_FILE})
   
@@ -113,6 +118,7 @@ function(add_gen_header target_name)
             --output ${out_file}
             --depfile ${dep_file}
             --write-if-changed
+            ${proxy_arg}
             ${entry_points}
             ${yaml_file}
     DEPENDS ${yaml_file}
diff --git a/libc/cmake/modules/LLVMLibCObjectRules.cmake b/libc/cmake/modules/LLVMLibCObjectRules.cmake
index 6c534dfccec10..c90feff035c60 100644
--- a/libc/cmake/modules/LLVMLibCObjectRules.cmake
+++ b/libc/cmake/modules/LLVMLibCObjectRules.cmake
@@ -92,6 +92,7 @@ function(create_object_library fq_target_name)
   )
   target_include_directories(${fq_target_name} SYSTEM PRIVATE ${LIBC_INCLUDE_DIR})
   target_include_directories(${fq_target_name} PRIVATE ${LIBC_SOURCE_DIR})
+  target_include_directories(${fq_target_name} PRIVATE ${LIBC_BUILD_DIR})
   target_compile_options(${fq_target_name} PRIVATE ${compile_options})
 
   #loop through the deps, check if any have the TARGET_TYPE of ENTRYPOINT_OBJ_TARGET_TYPE, and print a warning if they do.
diff --git a/libc/cmake/modules/LLVMLibCTestRules.cmake b/libc/cmake/modules/LLVMLibCTestRules.cmake
index 933b81b9f1d46..ba64933708760 100644
--- a/libc/cmake/modules/LLVMLibCTestRules.cmake
+++ b/libc/cmake/modules/LLVMLibCTestRules.cmake
@@ -290,6 +290,7 @@ function(create_libc_unittest fq_target_name)
   )
   target_include_directories(${fq_build_target_name} SYSTEM PRIVATE ${LIBC_INCLUDE_DIR})
   target_include_directories(${fq_build_target_name} PRIVATE ${LIBC_SOURCE_DIR})
+  target_include_directories(${fq_build_target_name} PRIVATE ${LIBC_BUILD_DIR})
   target_compile_options(${fq_build_target_name} PRIVATE ${compile_options})
   target_link_options(${fq_build_target_name} PRIVATE ${link_options})
 
diff --git a/libc/utils/hdrgen/hdrgen/header.py b/libc/utils/hdrgen/hdrgen/header.py
index 5d2350ab14367..b69d22494a7ac 100644
--- a/libc/utils/hdrgen/hdrgen/header.py
+++ b/libc/utils/hdrgen/hdrgen/header.py
@@ -88,6 +88,7 @@
 #ifdef LIBC_FULL_BUILD
 
 {include_lines}
+{macro_lines}
 
 #else // Overlay mode
 



More information about the libc-commits mailing list