diff options
Diffstat (limited to 'clang/tools/clang-check')
| -rw-r--r-- | clang/tools/clang-check/CMakeLists.txt | 5 | ||||
| -rw-r--r-- | clang/tools/clang-check/ClangCheck.cpp | 66 | ||||
| -rw-r--r-- | clang/tools/clang-check/Makefile | 24 | 
3 files changed, 95 insertions, 0 deletions
diff --git a/clang/tools/clang-check/CMakeLists.txt b/clang/tools/clang-check/CMakeLists.txt new file mode 100644 index 0000000..851d6cd --- /dev/null +++ b/clang/tools/clang-check/CMakeLists.txt @@ -0,0 +1,5 @@ +set(LLVM_USED_LIBS clangTooling clangBasic) + +add_clang_executable(clang-check +  ClangCheck.cpp +  ) diff --git a/clang/tools/clang-check/ClangCheck.cpp b/clang/tools/clang-check/ClangCheck.cpp new file mode 100644 index 0000000..d68e282 --- /dev/null +++ b/clang/tools/clang-check/ClangCheck.cpp @@ -0,0 +1,66 @@ +//===- examples/Tooling/ClangCheck.cpp - Clang check tool -----------------===// +// +//                     The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +//  This file implements a clang-check tool that runs the +//  clang::SyntaxOnlyAction over a number of translation units. +// +//  Usage: +//  clang-check <cmake-output-dir> <file1> <file2> ... +// +//  Where <cmake-output-dir> is a CMake build directory in which a file named +//  compile_commands.json exists (enable -DCMAKE_EXPORT_COMPILE_COMMANDS in +//  CMake to get this output). +// +//  <file1> ... specify the paths of files in the CMake source tree. This  path +//  is looked up in the compile command database. If the path of a file is +//  absolute, it needs to point into CMake's source tree. If the path is +//  relative, the current working directory needs to be in the CMake source +//  tree and the file must be in a subdirectory of the current working +//  directory. "./" prefixes in the relative files will be automatically +//  removed, but the rest of a relative path must be a suffix of a path in +//  the compile command line database. +// +//  For example, to use clang-check on all files in a subtree of the source +//  tree, use: +// +//    /path/in/subtree $ find . -name '*.cpp'| xargs clang-check /path/to/source +// +//===----------------------------------------------------------------------===// + +#include "llvm/Support/CommandLine.h" +#include "clang/Frontend/FrontendActions.h" +#include "clang/Tooling/CompilationDatabase.h" +#include "clang/Tooling/Tooling.h" + +using namespace clang::tooling; +using namespace llvm; + +cl::opt<std::string> BuildPath( +  cl::Positional, +  cl::desc("<build-path>")); + +cl::list<std::string> SourcePaths( +  cl::Positional, +  cl::desc("<source0> [... <sourceN>]"), +  cl::OneOrMore); + +int main(int argc, const char **argv) { +  llvm::OwningPtr<CompilationDatabase> Compilations( +    FixedCompilationDatabase::loadFromCommandLine(argc, argv)); +  cl::ParseCommandLineOptions(argc, argv); +  if (!Compilations) { +    std::string ErrorMessage; +    Compilations.reset(CompilationDatabase::loadFromDirectory(BuildPath, +                                                              ErrorMessage)); +    if (!Compilations) +      llvm::report_fatal_error(ErrorMessage); +  } +  ClangTool Tool(*Compilations, SourcePaths); +  return Tool.run(newFrontendActionFactory<clang::SyntaxOnlyAction>()); +} diff --git a/clang/tools/clang-check/Makefile b/clang/tools/clang-check/Makefile new file mode 100644 index 0000000..49b1ada --- /dev/null +++ b/clang/tools/clang-check/Makefile @@ -0,0 +1,24 @@ +##===- tools/clang-check/Makefile --------------------------*- Makefile -*-===## +# +#                     The LLVM Compiler Infrastructure +# +# This file is distributed under the University of Illinois Open Source +# License. See LICENSE.TXT for details. +# +##===----------------------------------------------------------------------===## + +CLANG_LEVEL := ../.. + +TOOLNAME = clang-check +NO_INSTALL = 1 + +# No plugins, optimize startup time. +TOOL_NO_EXPORTS = 1 + +LINK_COMPONENTS := support mc +USEDLIBS = clangFrontend.a clangSerialization.a clangDriver.a \ +           clangTooling.a clangParse.a clangSema.a clangAnalysis.a \ +           clangEdit.a clangAST.a clangLex.a clangBasic.a + +include $(CLANG_LEVEL)/Makefile +  | 
