Summary: When building llvm-libc with linting enabled, clang-tidy would use the resource dir of the monorepo rather then the host compiler's resource dir. This presented issues when including headers from the host compiler e.g. for sanitizers. Therefore this patch explicitly tells clang-tidy to use the host compiler's resource dir. Reviewers: sivachandra Reviewed By: sivachandra Subscribers: mgorny, tschuett, ecnelises, libc-commits Tags: #libc-project Differential Revision: https://reviews.llvm.org/D80265
107 lines
3.1 KiB
CMake
107 lines
3.1 KiB
CMake
# A rule for self contained header file targets.
|
|
# This rule merely copies the header file from the current source directory to
|
|
# the current binary directory.
|
|
# Usage:
|
|
# add_header(
|
|
# <target name>
|
|
# HDR <header file>
|
|
# )
|
|
function(add_header target_name)
|
|
cmake_parse_arguments(
|
|
"ADD_HEADER"
|
|
"" # No optional arguments
|
|
"HDR" # Single value arguments
|
|
"DEPENDS"
|
|
${ARGN}
|
|
)
|
|
if(NOT ADD_HEADER_HDR)
|
|
message(FATAL_ERROR "'add_header' rules requires the HDR argument specifying a headef file.")
|
|
endif()
|
|
|
|
set(dest_file ${CMAKE_CURRENT_BINARY_DIR}/${ADD_HEADER_HDR})
|
|
set(src_file ${CMAKE_CURRENT_SOURCE_DIR}/${ADD_HEADER_HDR})
|
|
|
|
add_custom_command(
|
|
OUTPUT ${dest_file}
|
|
COMMAND cp ${src_file} ${dest_file}
|
|
DEPENDS ${src_file}
|
|
)
|
|
|
|
get_fq_target_name(${target_name} fq_target_name)
|
|
add_custom_target(
|
|
${fq_target_name}
|
|
DEPENDS ${dest_file}
|
|
)
|
|
|
|
if(ADD_HEADER_DEPENDS)
|
|
get_fq_deps_list(fq_deps_list ${ADD_HEADER_DEPENDS})
|
|
add_dependencies(
|
|
${fq_target_name} ${fq_deps_list}
|
|
)
|
|
endif()
|
|
endfunction(add_header)
|
|
|
|
# A rule for generated header file targets.
|
|
# Usage:
|
|
# add_gen_header(
|
|
# <target name>
|
|
# DEF_FILE <.h.def file>
|
|
# GEN_HDR <generated header file name>
|
|
# PARAMS <list of name=value pairs>
|
|
# DATA_FILES <list input data files>
|
|
# )
|
|
function(add_gen_header target_name)
|
|
cmake_parse_arguments(
|
|
"ADD_GEN_HDR"
|
|
"" # No optional arguments
|
|
"DEF_FILE;GEN_HDR" # Single value arguments
|
|
"PARAMS;DATA_FILES;DEPENDS" # Multi value arguments
|
|
${ARGN}
|
|
)
|
|
if(NOT ADD_GEN_HDR_DEF_FILE)
|
|
message(FATAL_ERROR "`add_gen_hdr` rule requires DEF_FILE to be specified.")
|
|
endif()
|
|
if(NOT ADD_GEN_HDR_GEN_HDR)
|
|
message(FATAL_ERROR "`add_gen_hdr` rule requires GEN_HDR to be specified.")
|
|
endif()
|
|
|
|
set(out_file ${CMAKE_CURRENT_BINARY_DIR}/${ADD_GEN_HDR_GEN_HDR})
|
|
set(in_file ${CMAKE_CURRENT_SOURCE_DIR}/${ADD_GEN_HDR_DEF_FILE})
|
|
|
|
set(fq_data_files "")
|
|
if(ADD_GEN_HDR_DATA_FILES)
|
|
foreach(data_file IN LISTS ADD_GEN_HDR_DATA_FILES)
|
|
list(APPEND fq_data_files "${CMAKE_CURRENT_SOURCE_DIR}/${data_file}")
|
|
endforeach(data_file)
|
|
endif()
|
|
|
|
set(replacement_params "")
|
|
if(ADD_GEN_HDR_PARAMS)
|
|
list(APPEND replacement_params "--args" ${ADD_GEN_HDR_PARAMS})
|
|
endif()
|
|
|
|
set(gen_hdr_script "${LIBC_BUILD_SCRIPTS_DIR}/gen_hdr.py")
|
|
|
|
file(GLOB td_includes ${LIBC_SOURCE_DIR}/spec/*.td)
|
|
|
|
add_custom_command(
|
|
OUTPUT ${out_file}
|
|
COMMAND $<TARGET_FILE:libc-hdrgen> -o ${out_file} --header ${ADD_GEN_HDR_GEN_HDR}
|
|
--def ${in_file} ${replacement_params} -I ${LIBC_SOURCE_DIR}
|
|
${LIBC_SOURCE_DIR}/config/${LIBC_TARGET_OS}/api.td
|
|
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
|
DEPENDS ${in_file} ${fq_data_files} ${td_includes}
|
|
${LIBC_SOURCE_DIR}/config/${LIBC_TARGET_OS}/api.td libc-hdrgen
|
|
)
|
|
|
|
get_fq_target_name(${target_name} fq_target_name)
|
|
if(ADD_GEN_HDR_DEPENDS)
|
|
get_fq_deps_list(fq_deps_list ${ADD_GEN_HDR_DEPENDS})
|
|
endif()
|
|
add_custom_target(
|
|
${fq_target_name}
|
|
DEPENDS ${out_file} ${fq_deps_list}
|
|
)
|
|
endfunction(add_gen_header)
|