Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@ include(Sourcemeta)
# Don't force downstream consumers on this
if(PROJECT_IS_TOP_LEVEL)
sourcemeta_enable_simd()
sourcemeta_clang_tidy_attempt_enable()
endif()

# TODO: Turn this into a re-usable utility CMake function
Expand Down Expand Up @@ -124,7 +123,6 @@ endif()
if(PROJECT_IS_TOP_LEVEL)
# TODO: Try once more to enable this per target,
# so, we don't need to manually disable it here
sourcemeta_clang_tidy_attempt_disable()
sourcemeta_target_clang_format(SOURCES
src/*.h src/*.cc
benchmark/*.h benchmark/*.cc
Expand Down
62 changes: 27 additions & 35 deletions cmake/common/clang-tidy.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -77,48 +77,40 @@ function(sourcemeta_clang_tidy_attempt_install)
endfunction()

function(sourcemeta_clang_tidy_attempt_enable)
cmake_parse_arguments(SOURCEMETA_TARGET_CLANG_TIDY "REQUIRED" "" "" ${ARGN})

if(SOURCEMETA_COMPILER_LLVM)
message(STATUS "Enabling ClangTidy alongside compilation")
else()
message(STATUS "Ignoring ClangTidy setup on a compiler other than LLVM")
return()
cmake_parse_arguments(SOURCEMETA_TARGET_CLANG_TIDY_ATTEMPT_ENABLE "" "TARGET" "" ${ARGN})
if(NOT SOURCEMETA_TARGET_CLANG_TIDY_ATTEMPT_ENABLE_TARGET)
message(FATAL_ERROR "You must pass the target name using the TARGET option")
endif()

sourcemeta_clang_tidy_attempt_install(OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin")

if(SOURCEMETA_TARGET_CLANG_TIDY_REQUIRED)
find_program(CLANG_TIDY_BIN NAMES clang-tidy NO_DEFAULT_PATH
PATHS "${CMAKE_CURRENT_BINARY_DIR}/bin")
if(NOT CLANG_TIDY_BIN)
find_program(CLANG_TIDY_BIN NAMES clang-tidy REQUIRED)
endif()
# TODO: Support other platforms too, like Linux
if(APPLE AND SOURCEMETA_COMPILER_LLVM)
message(STATUS "Enabling ClangTidy alongside compilation for target ${SOURCEMETA_TARGET_CLANG_TIDY_ATTEMPT_ENABLE_TARGET}")
else()
find_program(CLANG_TIDY_BIN NAMES clang-tidy NO_DEFAULT_PATH
PATHS "${CMAKE_CURRENT_BINARY_DIR}/bin")
if(NOT CLANG_TIDY_BIN)
find_program(CLANG_TIDY_BIN NAMES clang-tidy)
endif()
return()
endif()

set(CLANG_TIDY_CONFIG "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/clang-tidy.config")

# TODO: Support other platforms too, like Linux
if(APPLE)
# We rely on this cache variable to not pre-compute the ClangTidy
# setup over and over again for every single target
if(NOT SOURCEMETA_CXX_CLANG_TIDY)
sourcemeta_clang_tidy_attempt_install(
OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/bin")
find_program(CLANG_TIDY_BIN NAMES clang-tidy
NO_DEFAULT_PATH
PATHS "${PROJECT_BINARY_DIR}/bin"
REQUIRED)
set(CLANG_TIDY_CONFIG "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/clang-tidy.config")
execute_process(COMMAND xcrun --show-sdk-path
OUTPUT_VARIABLE MACOSX_SDK_PATH OUTPUT_STRIP_TRAILING_WHITESPACE)
OUTPUT_VARIABLE MACOSX_SDK_PATH OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(COMMAND "${CMAKE_CXX_COMPILER}" -print-resource-dir
OUTPUT_VARIABLE MACOSX_RESOURCE_PATH OUTPUT_STRIP_TRAILING_WHITESPACE)
set(CMAKE_CXX_CLANG_TIDY
"${CLANG_TIDY_BIN};--config-file=${CLANG_TIDY_CONFIG};-header-filter=${PROJECT_SOURCE_DIR}/src/*"
"--extra-arg=-isysroot"
"--extra-arg=${MACOSX_SDK_PATH}"
"--extra-arg=-resource-dir=${MACOSX_RESOURCE_PATH}"
PARENT_SCOPE)
OUTPUT_VARIABLE MACOSX_RESOURCE_PATH OUTPUT_STRIP_TRAILING_WHITESPACE)
set(SOURCEMETA_CXX_CLANG_TIDY
"${CLANG_TIDY_BIN};--config-file=${CLANG_TIDY_CONFIG};-header-filter=${PROJECT_SOURCE_DIR}/src/*"
"--extra-arg=-isysroot"
"--extra-arg=${MACOSX_SDK_PATH}"
"--extra-arg=-resource-dir=${MACOSX_RESOURCE_PATH}"
CACHE STRING "CXX_CLANG_TIDY")
endif()
endfunction()

function(sourcemeta_clang_tidy_attempt_disable)
unset(CMAKE_CXX_CLANG_TIDY PARENT_SCOPE)
set_target_properties("${SOURCEMETA_TARGET_CLANG_TIDY_ATTEMPT_ENABLE_TARGET}"
PROPERTIES CXX_CLANG_TIDY "${SOURCEMETA_CXX_CLANG_TIDY}")
endfunction()
2 changes: 2 additions & 0 deletions cmake/common/targets/library.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,8 @@ function(sourcemeta_library)
target_include_directories(${TARGET_NAME}
PUBLIC "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>")
endif()

sourcemeta_clang_tidy_attempt_enable(TARGET "${TARGET_NAME}")
endfunction()

function(sourcemeta_library_install)
Expand Down
Loading