diff --git a/libcxx/CMakeLists.txt b/libcxx/CMakeLists.txt index e565c47c7668..043d5a8295c1 100644 --- a/libcxx/CMakeLists.txt +++ b/libcxx/CMakeLists.txt @@ -123,7 +123,6 @@ option(LIBCXX_ENABLE_VENDOR_AVAILABILITY_ANNOTATIONS to provide compile-time errors when using features unavailable on some version of the shared library they shipped should turn this on and see `include/__availability` for more details." OFF) -option(LIBCXX_ENABLE_CLANG_TIDY "Whether to compile and run clang-tidy checks" OFF) if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") set(LIBCXX_DEFAULT_TEST_CONFIG "llvm-libc++-shared-gcc.cfg.in") @@ -863,10 +862,6 @@ add_subdirectory(modules) set(LIBCXX_TEST_DEPS "cxx_experimental") -if (LIBCXX_ENABLE_CLANG_TIDY) - list(APPEND LIBCXX_TEST_DEPS cxx-tidy) -endif() - list(APPEND LIBCXX_TEST_DEPS generate-cxx-modules) if (LIBCXX_INCLUDE_BENCHMARKS) diff --git a/libcxx/docs/ReleaseNotes/19.rst b/libcxx/docs/ReleaseNotes/19.rst index 7bc0148c9ff0..390de789ddb6 100644 --- a/libcxx/docs/ReleaseNotes/19.rst +++ b/libcxx/docs/ReleaseNotes/19.rst @@ -132,3 +132,6 @@ Build System Changes - The ``LIBCXX_EXECUTOR`` and ``LIBCXXABI_EXECUTOR`` CMake variables have been removed. Please set ``LIBCXX_TEST_PARAMS`` to ``executor=<...>`` instead. + +- The Cmake variable ``LIBCXX_ENABLE_CLANG_TIDY`` has been removed. The build system has been changed + to automatically detect the presence of ``clang-tidy`` and the required ``Clang`` libraries. diff --git a/libcxx/test/tools/CMakeLists.txt b/libcxx/test/tools/CMakeLists.txt index e30ad6cdd820..6d99c53ad46d 100644 --- a/libcxx/test/tools/CMakeLists.txt +++ b/libcxx/test/tools/CMakeLists.txt @@ -1,12 +1,8 @@ set(LIBCXX_TEST_TOOLS_PATH ${CMAKE_CURRENT_BINARY_DIR} PARENT_SCOPE) -# TODO: Remove LIBCXX_ENABLE_CLANG_TIDY -if(LIBCXX_ENABLE_CLANG_TIDY) - if(NOT CMAKE_CXX_COMPILER_ID STREQUAL "Clang") - message(STATUS "Clang-tidy can only be used when building libc++ with " - "a clang compiler.") - return() - endif() - add_subdirectory(clang_tidy_checks) +if(NOT CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + message(STATUS "Clang-tidy tests are disabled due to non-clang based compiler.") + return() endif() +add_subdirectory(clang_tidy_checks) diff --git a/libcxx/test/tools/clang_tidy_checks/CMakeLists.txt b/libcxx/test/tools/clang_tidy_checks/CMakeLists.txt index 74905a0c3ed1..28eed6144583 100644 --- a/libcxx/test/tools/clang_tidy_checks/CMakeLists.txt +++ b/libcxx/test/tools/clang_tidy_checks/CMakeLists.txt @@ -9,22 +9,14 @@ set(Clang_DIR_SAVE ${Clang_DIR}) # versions must match. Otherwise there likely will be ODR-violations. This had # led to crashes and incorrect output of the clang-tidy based checks. find_package(Clang ${CMAKE_CXX_COMPILER_VERSION}) - -set(SOURCES - abi_tag_on_virtual.cpp - header_exportable_declarations.cpp - hide_from_abi.cpp - proper_version_checks.cpp - qualify_declval.cpp - robust_against_adl.cpp - uglify_attributes.cpp - - libcpp_module.cpp - ) - if(NOT Clang_FOUND) - message(STATUS "Could not find a suitable version of the Clang development package; - custom libc++ clang-tidy checks will not be available.") + message(STATUS "Clang-tidy tests are disabled since the " + "Clang development package is unavailable.") + return() +endif() +if(NOT TARGET clangTidy) + message(STATUS "Clang-tidy tests are disabled since the " + "Clang development package has no clangTidy target.") return() endif() @@ -54,6 +46,38 @@ if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") ) endif() +# In some cases even with the clangTidy target present the headers appear not to +# be on the system. Run a short test to see whether the header is present. +file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/test.cpp" " +#if !__has_include(\"clang-tidy/ClangTidyCheck.h\") + # error No clang-tidy headers +#endif +int main(){} +") +try_compile(HAS_CLANG_TIDY_HEADERS + "${CMAKE_CURRENT_BINARY_DIR}" + "${CMAKE_CURRENT_BINARY_DIR}/test.cpp" + LINK_LIBRARIES clangTidy) + +if(NOT HAS_CLANG_TIDY_HEADERS) + message(STATUS "Clang-tidy tests are disabled since the " + "clang-tidy headers are not present.") + return() +endif() +message(STATUS "Clang-tidy tests are enabled.") + +set(SOURCES + abi_tag_on_virtual.cpp + header_exportable_declarations.cpp + hide_from_abi.cpp + proper_version_checks.cpp + qualify_declval.cpp + robust_against_adl.cpp + uglify_attributes.cpp + + libcpp_module.cpp + ) + add_library(cxx-tidy MODULE ${SOURCES}) target_link_libraries(cxx-tidy clangTidy) @@ -64,3 +88,5 @@ set_target_properties(cxx-tidy PROPERTIES set_target_properties(cxx-tidy PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) set(CMAKE_SHARED_MODULE_SUFFIX_CXX .plugin) # Use a portable suffix to simplify how we can find it from Lit + +list(APPEND LIBCXX_TEST_DEPS cxx-tidy) diff --git a/libcxx/utils/ci/buildkite-pipeline.yml b/libcxx/utils/ci/buildkite-pipeline.yml index c43e41441872..4bacdec8f8d6 100644 --- a/libcxx/utils/ci/buildkite-pipeline.yml +++ b/libcxx/utils/ci/buildkite-pipeline.yml @@ -43,7 +43,6 @@ definitions: environment_definitions: _common_env: &common_env - ENABLE_CLANG_TIDY: "On" LLVM_SYMBOLIZER_PATH: "/usr/bin/llvm-symbolizer-${LLVM_HEAD_VERSION}" CLANG_CRASH_DIAGNOSTICS_DIR: "crash_diagnostics" CC: clang-${LLVM_HEAD_VERSION} diff --git a/libcxx/utils/ci/run-buildbot b/libcxx/utils/ci/run-buildbot index a6f3eb174308..cc72f4639b1a 100755 --- a/libcxx/utils/ci/run-buildbot +++ b/libcxx/utils/ci/run-buildbot @@ -44,9 +44,6 @@ CMAKE The CMake binary to use. This variable is optional. CLANG_FORMAT The clang-format binary to use when generating the format ignore list. -ENABLE_CLANG_TIDY Whether to compile and run clang-tidy checks. This variable - is optional. - EOF } @@ -111,10 +108,6 @@ function clean() { rm -rf "${BUILD_DIR}" } -if [ -z "${ENABLE_CLANG_TIDY}" ]; then - ENABLE_CLANG_TIDY=Off -fi - function generate-cmake-base() { echo "--- Generating CMake" ${CMAKE} \ @@ -126,7 +119,6 @@ function generate-cmake-base() { -DLIBCXX_ENABLE_WERROR=YES \ -DLIBCXXABI_ENABLE_WERROR=YES \ -DLIBUNWIND_ENABLE_WERROR=YES \ - -DLIBCXX_ENABLE_CLANG_TIDY=${ENABLE_CLANG_TIDY} \ -DLLVM_LIT_ARGS="-sv --xunit-xml-output test-results.xml --timeout=1500 --time-tests" \ "${@}" }