| set(LLVM_LINK_COMPONENTS |
| Option |
| FrontendOpenMP |
| Support |
| ) |
| |
| add_subdirectory(Core) |
| add_subdirectory(Inclusions) |
| add_subdirectory(Refactoring) |
| add_subdirectory(ASTDiff) |
| add_subdirectory(DumpTool) |
| add_subdirectory(Syntax) |
| add_subdirectory(DependencyScanning) |
| add_subdirectory(Transformer) |
| |
| # Replace the last lib component of the current binary directory with include |
| string(FIND ${CMAKE_CURRENT_BINARY_DIR} "/lib/" PATH_LIB_START REVERSE) |
| if(PATH_LIB_START EQUAL -1) |
| message(FATAL_ERROR "Couldn't find lib component in binary directory") |
| endif() |
| math(EXPR PATH_LIB_END "${PATH_LIB_START}+5") |
| string(SUBSTRING ${CMAKE_CURRENT_BINARY_DIR} 0 ${PATH_LIB_START} PATH_HEAD) |
| string(SUBSTRING ${CMAKE_CURRENT_BINARY_DIR} ${PATH_LIB_END} -1 PATH_TAIL) |
| string(CONCAT BINARY_INCLUDE_DIR ${PATH_HEAD} "/include/clang/" ${PATH_TAIL}) |
| |
| if (NOT Python3_EXECUTABLE |
| OR APPLE |
| OR CMAKE_CROSSCOMPILING |
| OR GENERATOR_IS_MULTI_CONFIG |
| OR NOT LLVM_NATIVE_ARCH IN_LIST LLVM_TARGETS_TO_BUILD |
| ) |
| configure_file( |
| EmptyNodeIntrospection.inc.in |
| ${BINARY_INCLUDE_DIR}/NodeIntrospection.inc |
| COPYONLY |
| ) |
| set(CLANG_TOOLING_BUILD_AST_INTROSPECTION "OFF" CACHE BOOL "") |
| else() |
| # The generation of ASTNodeAPI.json takes a long time in a |
| # Debug build due to parsing AST.h. Disable the processing |
| # but setting CLANG_TOOLING_BUILD_AST_INTROSPECTION as an |
| # internal hidden setting to override. |
| # When the processing is disabled, a trivial/empty JSON |
| # file is generated by clang-ast-dump and generate_cxx_src_locs.py |
| # generates the same API, but with a trivial implementation. |
| option(CLANG_TOOLING_BUILD_AST_INTROSPECTION "Enable AST introspection" TRUE) |
| |
| set(skip_expensive_processing $<OR:$<CONFIG:Debug>,$<NOT:$<BOOL:${CLANG_TOOLING_BUILD_AST_INTROSPECTION}>>>) |
| |
| set(implicitDirs) |
| foreach(implicitDir ${CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES}) |
| list(APPEND implicitDirs -I ${implicitDir}) |
| endforeach() |
| |
| add_custom_command( |
| COMMENT Generate ASTNodeAPI.json |
| OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/ASTNodeAPI.json |
| DEPENDS clang-ast-dump clang-resource-headers |
| COMMAND |
| $<TARGET_FILE:clang-ast-dump> |
| # Skip this in debug mode because parsing AST.h is too slow |
| --skip-processing=${skip_expensive_processing} |
| -I ${LLVM_BINARY_DIR}/lib/clang/${CLANG_VERSION}/include |
| -I ${CLANG_SOURCE_DIR}/include |
| -I ${LLVM_BINARY_DIR}/tools/clang/include |
| -I ${LLVM_BINARY_DIR}/include |
| -I ${LLVM_SOURCE_DIR}/include |
| ${implicitDirs} |
| --json-output-path ${CMAKE_CURRENT_BINARY_DIR}/ASTNodeAPI.json |
| ) |
| |
| add_custom_target(run-ast-api-dump-tool |
| DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/ASTNodeAPI.json |
| ) |
| |
| add_custom_command( |
| COMMENT Generate NodeIntrospection.inc |
| OUTPUT ${BINARY_INCLUDE_DIR}/NodeIntrospection.inc |
| DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/ASTNodeAPI.json |
| ${CMAKE_CURRENT_SOURCE_DIR}/DumpTool/generate_cxx_src_locs.py |
| ${CMAKE_CURRENT_SOURCE_DIR}/EmptyNodeIntrospection.inc.in |
| COMMAND |
| ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/DumpTool/generate_cxx_src_locs.py |
| --json-input-path ${CMAKE_CURRENT_BINARY_DIR}/ASTNodeAPI.json |
| --output-file NodeIntrospection.inc |
| --use-empty-implementation ${skip_expensive_processing} |
| --empty-implementation |
| "${CMAKE_CURRENT_SOURCE_DIR}/EmptyNodeIntrospection.inc.in" |
| COMMAND |
| ${CMAKE_COMMAND} -E copy_if_different |
| ${CMAKE_CURRENT_BINARY_DIR}/NodeIntrospection.inc |
| ${BINARY_INCLUDE_DIR}/NodeIntrospection.inc |
| ) |
| |
| add_custom_target(run-ast-api-generate-tool |
| DEPENDS |
| ${BINARY_INCLUDE_DIR}/NodeIntrospection.inc |
| ) |
| endif() |
| |
| add_clang_library(clangTooling |
| AllTUsExecution.cpp |
| ArgumentsAdjusters.cpp |
| CommonOptionsParser.cpp |
| CompilationDatabase.cpp |
| Execution.cpp |
| ExpandResponseFilesCompilationDatabase.cpp |
| FileMatchTrie.cpp |
| FixIt.cpp |
| GuessTargetAndModeCompilationDatabase.cpp |
| InterpolatingCompilationDatabase.cpp |
| JSONCompilationDatabase.cpp |
| Refactoring.cpp |
| RefactoringCallbacks.cpp |
| StandaloneExecution.cpp |
| NodeIntrospection.cpp |
| ${BINARY_INCLUDE_DIR}/NodeIntrospection.inc |
| Tooling.cpp |
| |
| DEPENDS |
| ClangDriverOptions |
| omp_gen |
| |
| LINK_LIBS |
| clangAST |
| clangASTMatchers |
| clangBasic |
| clangDriver |
| clangFormat |
| clangFrontend |
| clangLex |
| clangRewrite |
| clangSerialization |
| clangToolingCore |
| ) |