On Jul 17, 2012, at 9:11 AM, Alexander Kornienko <[email protected]> wrote:
> Author: alexfh > Date: Tue Jul 17 11:11:17 2012 > New Revision: 160369 > > URL: http://llvm.org/viewvc/llvm-project?rev=160369&view=rev > Log: > Add a custom initialize hook for clang tools + minor fixes in > CustomCompilationDatabase.h This kind of #define-based hack doesn't have a lot of precedent in Clang or LLVM. What is the point of this custom initialization hook? Why does it have to be a #define hacked into the build of Clang itself (which is supposed to be a reusable *library*) rather than being introduced via a plugin or by setting some function pointer/callback somewhere? This feels very much like the wrong solution for the problem you're trying to solve, but it's not at all clear what problem you're solving. - Doug > Added: > cfe/trunk/lib/Tooling/CustomToolInit.h > Modified: > cfe/trunk/lib/Tooling/CommandLineClangTool.cpp > cfe/trunk/lib/Tooling/CompilationDatabase.cpp > cfe/trunk/lib/Tooling/CustomCompilationDatabase.h > > Modified: cfe/trunk/lib/Tooling/CommandLineClangTool.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Tooling/CommandLineClangTool.cpp?rev=160369&r1=160368&r2=160369&view=diff > ============================================================================== > --- cfe/trunk/lib/Tooling/CommandLineClangTool.cpp (original) > +++ cfe/trunk/lib/Tooling/CommandLineClangTool.cpp Tue Jul 17 11:11:17 2012 > @@ -25,6 +25,10 @@ > #include "clang/Tooling/CommandLineClangTool.h" > #include "clang/Tooling/Tooling.h" > > +#ifdef USE_CUSTOM_TOOL_INIT > +#include "CustomToolInit.h" > +#endif > + > using namespace clang::tooling; > using namespace llvm; > > @@ -58,6 +62,9 @@ > } > > void CommandLineClangTool::initialize(int argc, const char **argv) { > +#ifdef USE_CUSTOM_TOOL_INIT > + customToolInit(argc, argv); > +#endif > Compilations.reset(FixedCompilationDatabase::loadFromCommandLine(argc, > argv)); > cl::ParseCommandLineOptions(argc, argv); > if (!Compilations) { > > Modified: cfe/trunk/lib/Tooling/CompilationDatabase.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Tooling/CompilationDatabase.cpp?rev=160369&r1=160368&r2=160369&view=diff > ============================================================================== > --- cfe/trunk/lib/Tooling/CompilationDatabase.cpp (original) > +++ cfe/trunk/lib/Tooling/CompilationDatabase.cpp Tue Jul 17 11:11:17 2012 > @@ -130,7 +130,7 @@ > findCompilationDatabaseFromDirectory(StringRef Directory) { > #ifdef USE_CUSTOM_COMPILATION_DATABASE > if (CompilationDatabase *DB = > - ::findCompilationDatabaseForDirectory(Directory)) > + ::clang::tooling::findCompilationDatabaseForDirectory(Directory)) > return DB; > #endif > while (!Directory.empty()) { > > Modified: cfe/trunk/lib/Tooling/CustomCompilationDatabase.h > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Tooling/CustomCompilationDatabase.h?rev=160369&r1=160368&r2=160369&view=diff > ============================================================================== > --- cfe/trunk/lib/Tooling/CustomCompilationDatabase.h (original) > +++ cfe/trunk/lib/Tooling/CustomCompilationDatabase.h Tue Jul 17 11:11:17 2012 > @@ -19,14 +19,14 @@ > // custom compilation databases and make enabling that a build option. > // > //===----------------------------------------------------------------------===// > +#ifndef LLVM_CLANG_TOOLING_CUSTOM_COMPILATION_DATABASE_H > +#define LLVM_CLANG_TOOLING_CUSTOM_COMPILATION_DATABASE_H > > #include "llvm/ADT/StringRef.h" > > namespace clang { > namespace tooling { > class CompilationDatabase; > -} > -} > > /// \brief Returns a CompilationDatabase for the given \c Directory. > /// > @@ -35,3 +35,8 @@ > /// parents. If a compilation database cannot be found or loaded, returns > NULL. > clang::tooling::CompilationDatabase *findCompilationDatabaseForDirectory( > llvm::StringRef Directory); > + > +} // namespace tooling > +} // namespace clang > + > +#endif // LLVM_CLANG_TOOLING_CUSTOM_COMPILATION_DATABASE_H > > Added: cfe/trunk/lib/Tooling/CustomToolInit.h > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Tooling/CustomToolInit.h?rev=160369&view=auto > ============================================================================== > --- cfe/trunk/lib/Tooling/CustomToolInit.h (added) > +++ cfe/trunk/lib/Tooling/CustomToolInit.h Tue Jul 17 11:11:17 2012 > @@ -0,0 +1,35 @@ > +//===--- CustomToolInit.h > -------------------------------------------------===// > +// > +// The LLVM Compiler Infrastructure > +// > +// This file is distributed under the University of Illinois Open Source > +// License. See LICENSE.TXT for details. > +// > +//===----------------------------------------------------------------------===// > +// > +// This file contains a hook to supply a custom tool initialization routine. > +// > +// The mechanism can be used by IDEs or non-public code bases to integrate > with > +// their build system. Currently we support statically linking in an > +// implementation of \c customToolInit and enabling it with > +// -DUSE_CUSTOM_TOOL_INIT when compiling the Tooling library. > +// > +//===----------------------------------------------------------------------===// > +#ifndef LLVM_CLANG_TOOLING_CUSTOM_TOOL_INIT_H > +#define LLVM_CLANG_TOOLING_CUSTOM_TOOL_INIT_H > + > +namespace clang { > +namespace tooling { > + > +/// \brief Performs a custom initialization of a tool. > +/// > +/// This function provides a hook for custom initialization of a clang tool. > It > +/// receives command-line arguments and can change them if needed. > +/// If the initialization fails (say, custom command-line arguments are > invalid) > +/// this function should terminate the process. > +void customToolInit(int argc, const char **argv); > + > +} // namespace tooling > +} // namespace clang > + > +#endif // LLVM_CLANG_TOOLING_CUSTOM_TOOL_INIT_H > > > _______________________________________________ > cfe-commits mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
