50 lines
2.1 KiB
CMake
50 lines
2.1 KiB
CMake
function(psc_llvm_ps_array out_value)
|
|
set(values)
|
|
foreach(item IN LISTS ARGN)
|
|
string(REPLACE "'" "''" escaped "${item}")
|
|
list(APPEND values "'${escaped}'")
|
|
endforeach()
|
|
string(REPLACE ";" "," value "${values}")
|
|
set(${out_value} "@(${value})" PARENT_SCOPE)
|
|
endfunction()
|
|
function(psc_add_llvm_cognitive_target target_name)
|
|
set(options)
|
|
set(oneValueArgs OUTPUT_DIR COMPILE_COMMANDS CLANG_TIDY_EXECUTABLE TOP_N THRESHOLD)
|
|
set(multiValueArgs INPUT_DIRS EXCLUDE_DIRS)
|
|
cmake_parse_arguments(ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
|
|
if (NOT ARG_OUTPUT_DIR)
|
|
set(ARG_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/metrics/${target_name}/llvm")
|
|
endif ()
|
|
if (NOT ARG_COMPILE_COMMANDS)
|
|
set(ARG_COMPILE_COMMANDS "${CMAKE_BINARY_DIR}/compile_commands.json")
|
|
endif ()
|
|
if (NOT ARG_CLANG_TIDY_EXECUTABLE)
|
|
set(ARG_CLANG_TIDY_EXECUTABLE "C:/Program Files/LLVM/bin/clang-tidy.exe")
|
|
endif ()
|
|
if (NOT ARG_TOP_N)
|
|
set(ARG_TOP_N 50)
|
|
endif ()
|
|
if (NOT DEFINED ARG_THRESHOLD)
|
|
set(ARG_THRESHOLD 0)
|
|
endif ()
|
|
if (NOT ARG_INPUT_DIRS)
|
|
set(ARG_INPUT_DIRS "${CMAKE_SOURCE_DIR}")
|
|
endif ()
|
|
psc_llvm_ps_array(PSC_LLVM_INPUT_DIRS ${ARG_INPUT_DIRS})
|
|
psc_llvm_ps_array(PSC_LLVM_EXCLUDE_DIRS ${ARG_EXCLUDE_DIRS})
|
|
set(PSC_LLVM_OUTPUT_DIR "${ARG_OUTPUT_DIR}")
|
|
set(PSC_LLVM_COMPILE_COMMANDS "${ARG_COMPILE_COMMANDS}")
|
|
set(PSC_LLVM_CLANG_TIDY "${ARG_CLANG_TIDY_EXECUTABLE}")
|
|
set(PSC_LLVM_TOP_N "${ARG_TOP_N}")
|
|
set(PSC_LLVM_THRESHOLD "${ARG_THRESHOLD}")
|
|
set(script_dir "${CMAKE_CURRENT_BINARY_DIR}/psc_metrics_scripts/${target_name}")
|
|
file(MAKE_DIRECTORY "${script_dir}")
|
|
set(script "${script_dir}/${target_name}_llvm_cognitive.ps1")
|
|
configure_file("${CMAKE_CURRENT_FUNCTION_LIST_DIR}/Cognitive_Complexity.ps1.in" "${script}" @ONLY)
|
|
add_custom_target(${target_name}
|
|
COMMAND pwsh -NoProfile -ExecutionPolicy Bypass -File "${script}"
|
|
VERBATIM
|
|
)
|
|
set(${target_name}_OUTPUT_DIR "${ARG_OUTPUT_DIR}" PARENT_SCOPE)
|
|
endfunction()
|