Index: clang/tools/libclang/CMakeLists.txt =================================================================== --- clang/tools/libclang/CMakeLists.txt +++ clang/tools/libclang/CMakeLists.txt @@ -50,13 +50,20 @@ list(APPEND LIBS clangARCMigrate) endif () -if (TARGET clangTidyPlugin) - add_definitions(-DCLANG_TOOL_EXTRA_BUILD) - list(APPEND LIBS clangTidyPlugin) - list(APPEND LIBS clangIncludeFixerPlugin) - if(LLVM_ENABLE_MODULES) - list(APPEND LLVM_COMPILE_FLAGS "-fmodules-ignore-macro=CLANG_TOOL_EXTRA_BUILD") - endif() +option(LIBCLANG_INCLUDE_CLANG_TOOLS_EXTRA + "Include code from clang-tools-extra in libclang." OFF) + +if (LIBCLANG_INCLUDE_CLANG_TOOLS_EXTRA) + if (TARGET clangTidyPlugin) + add_definitions(-DCLANG_TOOL_EXTRA_BUILD) + list(APPEND LIBS clangTidyPlugin) + list(APPEND LIBS clangIncludeFixerPlugin) + if(LLVM_ENABLE_MODULES) + list(APPEND LLVM_COMPILE_FLAGS "-fmodules-ignore-macro=CLANG_TOOL_EXTRA_BUILD") + endif() + else () + message(FATAL_ERROR "LIBCLANG_INCLUDE_CLANG_TOOLS_EXTRA needs clang-tools-extra in LLVM_BUILD_PROJECTS") + endif () endif () find_library(DL_LIBRARY_PATH dl) Index: llvm/utils/gn/secondary/clang/tools/libclang/BUILD.gn =================================================================== --- llvm/utils/gn/secondary/clang/tools/libclang/BUILD.gn +++ llvm/utils/gn/secondary/clang/tools/libclang/BUILD.gn @@ -9,6 +9,11 @@ # in the CMake build), so libclang is always a static library on linux # - the GN build doesn't have LIBCLANG_BUILD_STATIC +declare_args() { + # Whether to include code from clang-tools-extra in libclang. + libclang_include_clang_tools_extra = false +} + libclang_target_type = "shared_library" if (host_os != "win" && host_os != "mac") { # ELF targets need -fPIC to build shared libs but they aren't on by default. @@ -41,9 +46,7 @@ # FIXME: Once the GN build has a way to select which bits to build, # only include this dependency if clang-tools-extra is part of the build. - # FIXME: libclang depending on anything in clang-tools-extra seems like - # a layering violation. - if (true) { + if (libclang_include_clang_tools_extra) { defines += [ "CLANG_TOOL_EXTRA_BUILD" ] deps += [ "//clang-tools-extra/clang-include-fixer/plugin",