Setup iwyu
This commit is contained in:
parent
42f0b00828
commit
86c8674be0
@ -1,8 +1,6 @@
|
|||||||
cmake_minimum_required(VERSION 3.0 FATAL_ERROR)
|
cmake_minimum_required(VERSION 3.0 FATAL_ERROR)
|
||||||
cmake_policy(SET CMP0054 NEW)
|
cmake_policy(SET CMP0054 NEW)
|
||||||
|
|
||||||
# note: for clang-tidy, we need cmake 3.6, or (if the return code should be handled correctly, e.g. on CI), we need 3.8.
|
|
||||||
|
|
||||||
# TODO Perf test:
|
# TODO Perf test:
|
||||||
# - try if setting CRYPTOPP_NATIVE_ARCH=ON and adding -march=native to the compile commands for cryfs source files makes a difference
|
# - try if setting CRYPTOPP_NATIVE_ARCH=ON and adding -march=native to the compile commands for cryfs source files makes a difference
|
||||||
# -> if yes, offer a cmake option to enable both of these
|
# -> if yes, offer a cmake option to enable both of these
|
||||||
@ -22,8 +20,18 @@ option(DISABLE_OPENMP "allow building without OpenMP libraries. This will cause
|
|||||||
# The following options are helpful for development and/or CI
|
# The following options are helpful for development and/or CI
|
||||||
option(USE_WERROR "build with -Werror flag")
|
option(USE_WERROR "build with -Werror flag")
|
||||||
option(USE_CLANG_TIDY "build with clang-tidy checks enabled" OFF)
|
option(USE_CLANG_TIDY "build with clang-tidy checks enabled" OFF)
|
||||||
|
option(USE_IWYU "build with iwyu checks enabled" OFF)
|
||||||
option(CLANG_TIDY_WARNINGS_AS_ERRORS "treat clang-tidy warnings as errors" OFF)
|
option(CLANG_TIDY_WARNINGS_AS_ERRORS "treat clang-tidy warnings as errors" OFF)
|
||||||
|
|
||||||
|
if(USE_IWYU)
|
||||||
|
# note: for iwyu, we need cmake 3.3
|
||||||
|
cmake_minimum_required(VERSION 3.3 FATAL_ERROR)
|
||||||
|
endif()
|
||||||
|
if(USE_CLANG_TIDY)
|
||||||
|
# note: for clang-tidy, we need cmake 3.6, or (if the return code should be handled correctly, e.g. on CI), we need 3.8.
|
||||||
|
cmake_minimum_required(VERSION 3.8 FATAL_ERROR)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
|
||||||
if (MSVC)
|
if (MSVC)
|
||||||
option(DOKAN_PATH "Location of the Dokan library, e.g. C:\\Program Files\\Dokan\\DokanLibrary-1.1.0" "")
|
option(DOKAN_PATH "Location of the Dokan library, e.g. C:\\Program Files\\Dokan\\DokanLibrary-1.1.0" "")
|
||||||
|
@ -50,6 +50,21 @@ if (USE_CLANG_TIDY)
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# Find iwyu (for use in target_enable_style_warnings)
|
||||||
|
if (USE_IWYU)
|
||||||
|
find_program(
|
||||||
|
IWYU_EXE NAMES
|
||||||
|
include-what-you-use
|
||||||
|
iwyu
|
||||||
|
)
|
||||||
|
if(NOT IWYU_EXE)
|
||||||
|
message(FATAL_ERROR "include-what-you-use not found. Please install iwyu or run without -DUSE_IWYU=on.")
|
||||||
|
else()
|
||||||
|
message(STATUS "iwyu found: ${IWYU_EXE}")
|
||||||
|
set(DO_IWYU "${IWYU_EXE}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
#################################################
|
#################################################
|
||||||
# Enable style compiler warnings
|
# Enable style compiler warnings
|
||||||
#
|
#
|
||||||
@ -75,6 +90,12 @@ function(target_enable_style_warnings TARGET)
|
|||||||
CXX_CLANG_TIDY "${CLANG_TIDY_CLI}"
|
CXX_CLANG_TIDY "${CLANG_TIDY_CLI}"
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
if(USE_IWYU)
|
||||||
|
set_target_properties(
|
||||||
|
${TARGET} PROPERTIES
|
||||||
|
CXX_INCLUDE_WHAT_YOU_USE "${DO_IWYU}"
|
||||||
|
)
|
||||||
|
endif()
|
||||||
endfunction(target_enable_style_warnings)
|
endfunction(target_enable_style_warnings)
|
||||||
|
|
||||||
##################################################
|
##################################################
|
||||||
|
33
run-iwyu.sh
Executable file
33
run-iwyu.sh
Executable file
@ -0,0 +1,33 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Note: Call this from a cmake build directory (e.g. cmake/) for out-of-source builds
|
||||||
|
# Examples:
|
||||||
|
# mkdir cmake && cd cmake && ../run-iwqu.sh
|
||||||
|
# mkdir cmake && cd cmake && ../run-iwqu.sh -fix
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
export NUMCORES=`nproc` && if [ ! -n "$NUMCORES" ]; then export NUMCORES=`sysctl -n hw.ncpu`; fi
|
||||||
|
echo Using ${NUMCORES} cores
|
||||||
|
|
||||||
|
# Run cmake in current working directory, but on source that is in the same directory as this script file
|
||||||
|
cmake -DBUILD_TESTING=on -DCMAKE_EXPORT_COMPILE_COMMANDS=ON "${0%/*}"
|
||||||
|
|
||||||
|
# Filter all third party code from the compilation database
|
||||||
|
cat compile_commands.json|jq "map(select(.file | test(\"^$(realpath ${0%/*})/(src|test)/.*$\")))" > compile_commands2.json
|
||||||
|
rm compile_commands.json
|
||||||
|
mv compile_commands2.json compile_commands.json
|
||||||
|
|
||||||
|
if [ "$1" = "-fix" ]; then
|
||||||
|
TMPFILE=/tmp/iwyu.`cat /dev/urandom | tr -cd 'a-f0-9' | head -c 8`.out
|
||||||
|
|
||||||
|
function cleanup {
|
||||||
|
rm ${TMPFILE}
|
||||||
|
}
|
||||||
|
trap cleanup EXIT
|
||||||
|
|
||||||
|
iwyu_tool -j${NUMCORES} -p. ${@:2} | tee ${TMPFILE}
|
||||||
|
fix_include < ${TMPFILE}
|
||||||
|
else
|
||||||
|
iwyu_tool -j${NUMCORES} -p. $@
|
||||||
|
fi
|
Loading…
Reference in New Issue
Block a user