From 9a02a3c7f4cc0a5fa807556abc862f1c4121663d Mon Sep 17 00:00:00 2001 From: Petr Hosek Date: Fri, 9 Jan 2026 23:21:16 -0800 Subject: [PATCH] [libc] Support for generating proxy headers (#175279) 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 b092b37ffd8d..0704ae1c79e1 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 6c534dfccec1..c90feff035c6 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 933b81b9f1d4..ba6493370876 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 5d2350ab1436..b69d22494a7a 100644 --- a/libc/utils/hdrgen/hdrgen/header.py +++ b/libc/utils/hdrgen/hdrgen/header.py @@ -88,6 +88,7 @@ PROXY_TEMPLATE = """\ #ifdef LIBC_FULL_BUILD {include_lines} +{macro_lines} #else // Overlay mode