thakis created this revision.
thakis added a reviewer: bkramer.
Herald added subscribers: llvm-commits, mgorny.
Herald added a project: LLVM.

Based on the discussion on D55415 <https://reviews.llvm.org/D55415>, also make 
the flag default to false.
Having libclang depend on clang-tools-extra means check-clang builds all
of clang-tools-extra, which besides being a layering violation takes
quite some time, since clang-tools-extra has many files that are slow
to compile.

Longer term, we likely will want to remove this flag completely. If
people need this functionality, maybe there could be a
libclang-tools-extra that's libclang + clang-tidy and
clang-includes-fixer linked in.


https://reviews.llvm.org/D79599

Files:
  clang/tools/libclang/CMakeLists.txt
  llvm/utils/gn/secondary/clang/tools/libclang/BUILD.gn


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",
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",
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)
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to