diff --git a/clang-tools-extra/CMakeLists.txt b/clang-tools-extra/CMakeLists.txt --- a/clang-tools-extra/CMakeLists.txt +++ b/clang-tools-extra/CMakeLists.txt @@ -15,6 +15,7 @@ add_subdirectory(clang-move) add_subdirectory(clang-query) add_subdirectory(pp-trace) +add_subdirectory(pseudo) add_subdirectory(tool-template) # Add the common testsuite after all the tools. diff --git a/clang-tools-extra/pseudo/CMakeLists.txt b/clang-tools-extra/pseudo/CMakeLists.txt new file mode 100644 --- /dev/null +++ b/clang-tools-extra/pseudo/CMakeLists.txt @@ -0,0 +1,5 @@ +include_directories(include ${CMAKE_CURRENT_BINARY_DIR}/include) +add_subdirectory(lib) +add_subdirectory(tool) +add_subdirectory(unittests) +add_subdirectory(test) diff --git a/clang/lib/Tooling/Syntax/Pseudo/README.md b/clang-tools-extra/pseudo/README.md rename from clang/lib/Tooling/Syntax/Pseudo/README.md rename to clang-tools-extra/pseudo/README.md diff --git a/clang/include/clang/Tooling/Syntax/Pseudo/DirectiveMap.h b/clang-tools-extra/pseudo/include/clang-pseudo/DirectiveMap.h rename from clang/include/clang/Tooling/Syntax/Pseudo/DirectiveMap.h rename to clang-tools-extra/pseudo/include/clang-pseudo/DirectiveMap.h --- a/clang/include/clang/Tooling/Syntax/Pseudo/DirectiveMap.h +++ b/clang-tools-extra/pseudo/include/clang-pseudo/DirectiveMap.h @@ -25,16 +25,15 @@ // //===----------------------------------------------------------------------===// -#ifndef LLVM_CLANG_TOOLING_SYNTAX_PREPROCESS_H -#define LLVM_CLANG_TOOLING_SYNTAX_PREPROCESS_H +#ifndef CLANG_PSEUDO_DIRECTIVEMAP_H +#define CLANG_PSEUDO_DIRECTIVEMAP_H +#include "clang-pseudo/Token.h" #include "clang/Basic/TokenKinds.h" -#include "clang/Tooling/Syntax/Pseudo/Token.h" #include namespace clang { class LangOptions; -namespace syntax { namespace pseudo { /// Describes the structure of a source file, as seen by the preprocessor. @@ -142,7 +141,6 @@ }; } // namespace pseudo -} // namespace syntax } // namespace clang #endif diff --git a/clang/include/clang/Tooling/Syntax/Pseudo/Grammar.h b/clang-tools-extra/pseudo/include/clang-pseudo/Grammar.h rename from clang/include/clang/Tooling/Syntax/Pseudo/Grammar.h rename to clang-tools-extra/pseudo/include/clang-pseudo/Grammar.h --- a/clang/include/clang/Tooling/Syntax/Pseudo/Grammar.h +++ b/clang-tools-extra/pseudo/include/clang-pseudo/Grammar.h @@ -33,8 +33,8 @@ // //===----------------------------------------------------------------------===// -#ifndef LLVM_CLANG_TOOLING_SYNTAX_GRAMMAR_H -#define LLVM_CLANG_TOOLING_SYNTAX_GRAMMAR_H +#ifndef CLANG_PSEUDO_GRAMMAR_H +#define CLANG_PSEUDO_GRAMMAR_H #include "clang/Basic/TokenKinds.h" #include "llvm/ADT/ArrayRef.h" @@ -44,7 +44,6 @@ #include namespace clang { -namespace syntax { namespace pseudo { // A SymbolID uniquely identifies a terminal/non-terminal symbol in a grammar. // Non-terminal IDs are indexes into a table of non-terminal symbols. @@ -178,7 +177,6 @@ }; } // namespace pseudo -} // namespace syntax } // namespace clang #endif // LLVM_CLANG_TOOLING_SYNTAX_GRAMMAR_H diff --git a/clang/include/clang/Tooling/Syntax/Pseudo/LRGraph.h b/clang-tools-extra/pseudo/include/clang-pseudo/LRGraph.h rename from clang/include/clang/Tooling/Syntax/Pseudo/LRGraph.h rename to clang-tools-extra/pseudo/include/clang-pseudo/LRGraph.h --- a/clang/include/clang/Tooling/Syntax/Pseudo/LRGraph.h +++ b/clang-tools-extra/pseudo/include/clang-pseudo/LRGraph.h @@ -28,15 +28,14 @@ // in making decisions. //===----------------------------------------------------------------------===// -#ifndef LLVM_CLANG_TOOLING_SYNTAX_PSEUDO_LRGRAPH_H -#define LLVM_CLANG_TOOLING_SYNTAX_PSEUDO_LRGRAPH_H +#ifndef CLANG_PSEUDO_LRGRAPH_H +#define CLANG_PSEUDO_LRGRAPH_H -#include "clang/Tooling/Syntax/Pseudo/Grammar.h" +#include "clang-pseudo/Grammar.h" #include "llvm/ADT/Hashing.h" #include namespace clang { -namespace syntax { namespace pseudo { // An LR item -- a grammar rule with a dot at some position of the body. @@ -152,23 +151,22 @@ }; } // namespace pseudo -} // namespace syntax } // namespace clang namespace llvm { -// Support clang::syntax::pseudo::Item as DenseMap keys. -template <> struct DenseMapInfo { - static inline clang::syntax::pseudo::Item getEmptyKey() { - return clang::syntax::pseudo::Item::sentinel(-1); +// Support clang::pseudo::Item as DenseMap keys. +template <> struct DenseMapInfo { + static inline clang::pseudo::Item getEmptyKey() { + return clang::pseudo::Item::sentinel(-1); } - static inline clang::syntax::pseudo::Item getTombstoneKey() { - return clang::syntax::pseudo::Item::sentinel(-2); + static inline clang::pseudo::Item getTombstoneKey() { + return clang::pseudo::Item::sentinel(-2); } - static unsigned getHashValue(const clang::syntax::pseudo::Item &I) { + static unsigned getHashValue(const clang::pseudo::Item &I) { return hash_value(I); } - static bool isEqual(const clang::syntax::pseudo::Item &LHS, - const clang::syntax::pseudo::Item &RHS) { + static bool isEqual(const clang::pseudo::Item &LHS, + const clang::pseudo::Item &RHS) { return LHS == RHS; } }; diff --git a/clang/include/clang/Tooling/Syntax/Pseudo/LRTable.h b/clang-tools-extra/pseudo/include/clang-pseudo/LRTable.h rename from clang/include/clang/Tooling/Syntax/Pseudo/LRTable.h rename to clang-tools-extra/pseudo/include/clang-pseudo/LRTable.h --- a/clang/include/clang/Tooling/Syntax/Pseudo/LRTable.h +++ b/clang-tools-extra/pseudo/include/clang-pseudo/LRTable.h @@ -34,16 +34,15 @@ // //===----------------------------------------------------------------------===// -#ifndef LLVM_CLANG_TOOLING_SYNTAX_PSEUDO_LRTABLE_H -#define LLVM_CLANG_TOOLING_SYNTAX_PSEUDO_LRTABLE_H +#ifndef CLANG_PSEUDO_LRTABLE_H +#define CLANG_PSEUDO_LRTABLE_H -#include "clang/Tooling/Syntax/Pseudo/Grammar.h" +#include "clang-pseudo/Grammar.h" #include "llvm/ADT/ArrayRef.h" #include #include namespace clang { -namespace syntax { namespace pseudo { // Represents the LR parsing table, which can efficiently the question "what is @@ -176,7 +175,6 @@ llvm::raw_ostream &operator<<(llvm::raw_ostream &, const LRTable::Action &); } // namespace pseudo -} // namespace syntax } // namespace clang #endif // LLVM_CLANG_TOOLING_SYNTAX_PSEUDO_LRTABLE_H diff --git a/clang/include/clang/Tooling/Syntax/Pseudo/Token.h b/clang-tools-extra/pseudo/include/clang-pseudo/Token.h rename from clang/include/clang/Tooling/Syntax/Pseudo/Token.h rename to clang-tools-extra/pseudo/include/clang-pseudo/Token.h --- a/clang/include/clang/Tooling/Syntax/Pseudo/Token.h +++ b/clang-tools-extra/pseudo/include/clang-pseudo/Token.h @@ -25,8 +25,8 @@ // //===----------------------------------------------------------------------===// -#ifndef LLVM_CLANG_TOOLING_SYNTAX_TOKEN_H -#define LLVM_CLANG_TOOLING_SYNTAX_TOKEN_H +#ifndef CLANG_PSEUDO_TOKEN_H +#define CLANG_PSEUDO_TOKEN_H #include "clang/Basic/LLVM.h" #include "clang/Basic/TokenKinds.h" @@ -39,7 +39,6 @@ namespace clang { class LangOptions; -namespace syntax { namespace pseudo { /// A single C++ or preprocessor token. @@ -199,7 +198,6 @@ TokenStream stripComments(const TokenStream &); } // namespace pseudo -} // namespace syntax } // namespace clang #endif diff --git a/clang/lib/Tooling/Syntax/Pseudo/CMakeLists.txt b/clang-tools-extra/pseudo/lib/CMakeLists.txt rename from clang/lib/Tooling/Syntax/Pseudo/CMakeLists.txt rename to clang-tools-extra/pseudo/lib/CMakeLists.txt --- a/clang/lib/Tooling/Syntax/Pseudo/CMakeLists.txt +++ b/clang-tools-extra/pseudo/lib/CMakeLists.txt @@ -1,6 +1,6 @@ set(LLVM_LINK_COMPONENTS Support) -add_clang_library(clangToolingSyntaxPseudo +add_clang_library(clangPseudo DirectiveMap.cpp Grammar.cpp GrammarBNF.cpp diff --git a/clang/lib/Tooling/Syntax/Pseudo/DirectiveMap.cpp b/clang-tools-extra/pseudo/lib/DirectiveMap.cpp rename from clang/lib/Tooling/Syntax/Pseudo/DirectiveMap.cpp rename to clang-tools-extra/pseudo/lib/DirectiveMap.cpp --- a/clang/lib/Tooling/Syntax/Pseudo/DirectiveMap.cpp +++ b/clang-tools-extra/pseudo/lib/DirectiveMap.cpp @@ -6,13 +6,12 @@ // //===----------------------------------------------------------------------===// -#include "clang/Tooling/Syntax/Pseudo/DirectiveMap.h" +#include "clang-pseudo/DirectiveMap.h" #include "clang/Basic/IdentifierTable.h" #include "clang/Basic/TokenKinds.h" #include "llvm/Support/FormatVariadic.h" namespace clang { -namespace syntax { namespace pseudo { namespace { @@ -151,8 +150,8 @@ } static void dump(llvm::raw_ostream &OS, const DirectiveMap &, unsigned Indent); -static void dump(llvm::raw_ostream &OS, const DirectiveMap::Directive &Directive, - unsigned Indent) { +static void dump(llvm::raw_ostream &OS, + const DirectiveMap::Directive &Directive, unsigned Indent) { OS.indent(Indent) << llvm::formatv("#{0} ({1} tokens)\n", tok::getPPKeywordSpelling(Directive.Kind), Directive.Tokens.size()); @@ -205,5 +204,4 @@ #undef OSTREAM_DUMP } // namespace pseudo -} // namespace syntax } // namespace clang diff --git a/clang/lib/Tooling/Syntax/Pseudo/Grammar.cpp b/clang-tools-extra/pseudo/lib/Grammar.cpp rename from clang/lib/Tooling/Syntax/Pseudo/Grammar.cpp rename to clang-tools-extra/pseudo/lib/Grammar.cpp --- a/clang/lib/Tooling/Syntax/Pseudo/Grammar.cpp +++ b/clang-tools-extra/pseudo/lib/Grammar.cpp @@ -6,7 +6,7 @@ // //===----------------------------------------------------------------------===// -#include "clang/Tooling/Syntax/Pseudo/Grammar.h" +#include "clang-pseudo/Grammar.h" #include "clang/Basic/TokenKinds.h" #include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/STLExtras.h" @@ -15,7 +15,6 @@ #include "llvm/Support/raw_ostream.h" namespace clang { -namespace syntax { namespace pseudo { Rule::Rule(SymbolID Target, llvm::ArrayRef Sequence) @@ -181,5 +180,4 @@ GrammarTable::GrammarTable() : Terminals(getTerminalNames()) {} } // namespace pseudo -} // namespace syntax } // namespace clang diff --git a/clang/lib/Tooling/Syntax/Pseudo/GrammarBNF.cpp b/clang-tools-extra/pseudo/lib/GrammarBNF.cpp rename from clang/lib/Tooling/Syntax/Pseudo/GrammarBNF.cpp rename to clang-tools-extra/pseudo/lib/GrammarBNF.cpp --- a/clang/lib/Tooling/Syntax/Pseudo/GrammarBNF.cpp +++ b/clang-tools-extra/pseudo/lib/GrammarBNF.cpp @@ -6,15 +6,14 @@ // //===----------------------------------------------------------------------===// +#include "clang-pseudo/Grammar.h" #include "clang/Basic/TokenKinds.h" -#include "clang/Tooling/Syntax/Pseudo/Grammar.h" #include "llvm/ADT/DenseSet.h" #include "llvm/ADT/StringExtras.h" #include "llvm/Support/FormatVariadic.h" #include namespace clang { -namespace syntax { namespace pseudo { namespace { @@ -244,5 +243,4 @@ } } // namespace pseudo -} // namespace syntax } // namespace clang diff --git a/clang/lib/Tooling/Syntax/Pseudo/LRGraph.cpp b/clang-tools-extra/pseudo/lib/LRGraph.cpp rename from clang/lib/Tooling/Syntax/Pseudo/LRGraph.cpp rename to clang-tools-extra/pseudo/lib/LRGraph.cpp --- a/clang/lib/Tooling/Syntax/Pseudo/LRGraph.cpp +++ b/clang-tools-extra/pseudo/lib/LRGraph.cpp @@ -6,8 +6,8 @@ // //===----------------------------------------------------------------------===// -#include "clang/Tooling/Syntax/Pseudo/LRGraph.h" -#include "clang/Tooling/Syntax/Pseudo/Grammar.h" +#include "clang-pseudo/LRGraph.h" +#include "clang-pseudo/Grammar.h" #include "llvm/ADT/DenseSet.h" #include "llvm/ADT/Hashing.h" #include "llvm/ADT/STLExtras.h" @@ -15,16 +15,16 @@ #include "llvm/Support/FormatVariadic.h" #include "llvm/Support/raw_ostream.h" -using ItemSet = std::vector; +using ItemSet = std::vector; namespace llvm { -// Support clang::syntax::pseudo::Item as DenseMap keys. +// Support clang::pseudo::Item as DenseMap keys. template <> struct DenseMapInfo { static inline ItemSet getEmptyKey() { - return {DenseMapInfo::getEmptyKey()}; + return {DenseMapInfo::getEmptyKey()}; } static inline ItemSet getTombstoneKey() { - return {DenseMapInfo::getTombstoneKey()}; + return {DenseMapInfo::getTombstoneKey()}; } static unsigned getHashValue(const ItemSet &I) { return llvm::hash_combine_range(I.begin(), I.end()); @@ -36,7 +36,6 @@ } // namespace llvm namespace clang { -namespace syntax { namespace pseudo { namespace { @@ -227,5 +226,4 @@ } } // namespace pseudo -} // namespace syntax } // namespace clang diff --git a/clang/lib/Tooling/Syntax/Pseudo/LRTable.cpp b/clang-tools-extra/pseudo/lib/LRTable.cpp rename from clang/lib/Tooling/Syntax/Pseudo/LRTable.cpp rename to clang-tools-extra/pseudo/lib/LRTable.cpp --- a/clang/lib/Tooling/Syntax/Pseudo/LRTable.cpp +++ b/clang-tools-extra/pseudo/lib/LRTable.cpp @@ -6,8 +6,8 @@ // //===----------------------------------------------------------------------===// -#include "clang/Tooling/Syntax/Pseudo/LRTable.h" -#include "clang/Tooling/Syntax/Pseudo/Grammar.h" +#include "clang-pseudo/LRTable.h" +#include "clang-pseudo/Grammar.h" #include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/STLExtras.h" #include "llvm/Support/ErrorHandling.h" @@ -15,7 +15,6 @@ #include "llvm/Support/raw_ostream.h" namespace clang { -namespace syntax { namespace pseudo { llvm::raw_ostream &operator<<(llvm::raw_ostream &OS, const LRTable::Action &A) { @@ -122,5 +121,4 @@ } } // namespace pseudo -} // namespace syntax } // namespace clang diff --git a/clang/lib/Tooling/Syntax/Pseudo/LRTableBuild.cpp b/clang-tools-extra/pseudo/lib/LRTableBuild.cpp rename from clang/lib/Tooling/Syntax/Pseudo/LRTableBuild.cpp rename to clang-tools-extra/pseudo/lib/LRTableBuild.cpp --- a/clang/lib/Tooling/Syntax/Pseudo/LRTableBuild.cpp +++ b/clang-tools-extra/pseudo/lib/LRTableBuild.cpp @@ -6,23 +6,23 @@ // //===----------------------------------------------------------------------===// +#include "clang-pseudo/Grammar.h" +#include "clang-pseudo/LRGraph.h" +#include "clang-pseudo/LRTable.h" #include "clang/Basic/TokenKinds.h" -#include "clang/Tooling/Syntax/Pseudo/Grammar.h" -#include "clang/Tooling/Syntax/Pseudo/LRGraph.h" -#include "clang/Tooling/Syntax/Pseudo/LRTable.h" #include namespace llvm { -template <> struct DenseMapInfo { - using Entry = clang::syntax::pseudo::LRTable::Entry; +template <> struct DenseMapInfo { + using Entry = clang::pseudo::LRTable::Entry; static inline Entry getEmptyKey() { - static Entry E{static_cast(-1), 0, - clang::syntax::pseudo::LRTable::Action::sentinel()}; + static Entry E{static_cast(-1), 0, + clang::pseudo::LRTable::Action::sentinel()}; return E; } static inline Entry getTombstoneKey() { - static Entry E{static_cast(-2), 0, - clang::syntax::pseudo::LRTable::Action::sentinel()}; + static Entry E{static_cast(-2), 0, + clang::pseudo::LRTable::Action::sentinel()}; return E; } static unsigned getHashValue(const Entry &I) { @@ -36,7 +36,6 @@ } // namespace llvm namespace clang { -namespace syntax { namespace pseudo { class LRTable::Builder { @@ -139,5 +138,4 @@ } } // namespace pseudo -} // namespace syntax } // namespace clang diff --git a/clang/lib/Tooling/Syntax/Pseudo/Lex.cpp b/clang-tools-extra/pseudo/lib/Lex.cpp rename from clang/lib/Tooling/Syntax/Pseudo/Lex.cpp rename to clang-tools-extra/pseudo/lib/Lex.cpp --- a/clang/lib/Tooling/Syntax/Pseudo/Lex.cpp +++ b/clang-tools-extra/pseudo/lib/Lex.cpp @@ -6,14 +6,13 @@ // //===----------------------------------------------------------------------===// +#include "clang-pseudo/Token.h" #include "clang/Basic/SourceLocation.h" #include "clang/Basic/TokenKinds.h" #include "clang/Lex/Lexer.h" #include "clang/Lex/LiteralSupport.h" -#include "clang/Tooling/Syntax/Pseudo/Token.h" namespace clang { -namespace syntax { namespace pseudo { TokenStream lex(const std::string &Code, const clang::LangOptions &LangOpts) { @@ -110,5 +109,4 @@ } } // namespace pseudo -} // namespace syntax } // namespace clang diff --git a/clang/lib/Tooling/Syntax/Pseudo/Token.cpp b/clang-tools-extra/pseudo/lib/Token.cpp rename from clang/lib/Tooling/Syntax/Pseudo/Token.cpp rename to clang-tools-extra/pseudo/lib/Token.cpp --- a/clang/lib/Tooling/Syntax/Pseudo/Token.cpp +++ b/clang-tools-extra/pseudo/lib/Token.cpp @@ -6,13 +6,12 @@ // //===----------------------------------------------------------------------===// -#include "clang/Tooling/Syntax/Pseudo/Token.h" +#include "clang-pseudo/Token.h" #include "llvm/ADT/StringExtras.h" #include "llvm/Support/Format.h" #include "llvm/Support/FormatVariadic.h" namespace clang { -namespace syntax { namespace pseudo { llvm::raw_ostream &operator<<(llvm::raw_ostream &OS, const Token &T) { @@ -105,5 +104,4 @@ } } // namespace pseudo -} // namespace syntax } // namespace clang diff --git a/clang/lib/Tooling/Syntax/Pseudo/cxx.bnf b/clang-tools-extra/pseudo/lib/cxx.bnf rename from clang/lib/Tooling/Syntax/Pseudo/cxx.bnf rename to clang-tools-extra/pseudo/lib/cxx.bnf diff --git a/clang-tools-extra/pseudo/test/CMakeLists.txt b/clang-tools-extra/pseudo/test/CMakeLists.txt new file mode 100644 --- /dev/null +++ b/clang-tools-extra/pseudo/test/CMakeLists.txt @@ -0,0 +1,31 @@ +# Set CLANG_TOOLS_DIR to buildtree/bin, or buildtree/%(build_mode)s/bin if the +# location is dynamic. The latter must be interpolated by lit configs. +# FIXME: this is duplicated in many places. +if (CMAKE_CFG_INTDIR STREQUAL ".") + set(LLVM_BUILD_MODE ".") +else () + set(LLVM_BUILD_MODE "%(build_mode)s") +endif () +string(REPLACE ${CMAKE_CFG_INTDIR} ${LLVM_BUILD_MODE} CLANG_TOOLS_DIR ${LLVM_RUNTIME_OUTPUT_INTDIR}) + +set(CLANG_PSEUDO_TEST_DEPS + clang-pseudo + ClangPseudoTests + ) + +foreach(dep FileCheck not) + if(TARGET ${dep}) + list(APPEND CLANG_PSEUDO_TEST_DEPS ${dep}) + endif() +endforeach() + +configure_lit_site_cfg( + ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.py.in + ${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg.py + MAIN_CONFIG + ${CMAKE_CURRENT_SOURCE_DIR}/lit.cfg.py + ) + +add_lit_testsuite(check-clang-pseudo "Running the clang-pseudo regression tests" + ${CMAKE_CURRENT_BINARY_DIR}/../unittests;${CMAKE_CURRENT_BINARY_DIR} + DEPENDS ${CLANG_PSEUDO_TEST_DEPS}) diff --git a/clang/test/Syntax/check-cxx-bnf.test b/clang-tools-extra/pseudo/test/check-cxx-bnf.test rename from clang/test/Syntax/check-cxx-bnf.test rename to clang-tools-extra/pseudo/test/check-cxx-bnf.test diff --git a/clang/test/Syntax/lex.c b/clang-tools-extra/pseudo/test/lex.c rename from clang/test/Syntax/lex.c rename to clang-tools-extra/pseudo/test/lex.c diff --git a/clang-tools-extra/pseudo/test/lit.cfg.py b/clang-tools-extra/pseudo/test/lit.cfg.py new file mode 100644 --- /dev/null +++ b/clang-tools-extra/pseudo/test/lit.cfg.py @@ -0,0 +1,16 @@ +import lit.llvm + +lit.llvm.initialize(lit_config, config) +lit.llvm.llvm_config.use_default_substitutions() + +config.name = 'ClangPseudo' +config.suffixes = ['.test', '.c', '.cpp'] +config.excludes = ['Inputs'] +config.test_format = lit.formats.ShTest(not lit.llvm.llvm_config.use_lit_shell) +config.test_source_root = config.clang_pseudo_source_dir + "/test" +config.test_exec_root = config.clang_pseudo_binary_dir + "/test" + +config.environment['PATH'] = os.path.pathsep.join(( + config.clang_tools_dir, + config.llvm_tools_dir, + config.environment['PATH'])) diff --git a/clang-tools-extra/pseudo/test/lit.local.cfg b/clang-tools-extra/pseudo/test/lit.local.cfg new file mode 100644 --- /dev/null +++ b/clang-tools-extra/pseudo/test/lit.local.cfg @@ -0,0 +1,2 @@ +cxx_bnf_file = os.path.join(config.clang_pseudo_source_dir, 'lib', 'cxx.bnf') +config.substitutions.append(('%cxx-bnf-file', cxx_bnf_file)) diff --git a/clang-tools-extra/pseudo/test/lit.site.cfg.py.in b/clang-tools-extra/pseudo/test/lit.site.cfg.py.in new file mode 100644 --- /dev/null +++ b/clang-tools-extra/pseudo/test/lit.site.cfg.py.in @@ -0,0 +1,23 @@ +@LIT_SITE_CFG_IN_HEADER@ + +# Variables needed for common llvm config. +config.clang_tools_dir = "@CLANG_TOOLS_DIR@" +config.lit_tools_dir = "@LLVM_LIT_TOOLS_DIR@" +config.llvm_tools_dir = "@LLVM_TOOLS_DIR@" +config.llvm_libs_dir = "@LLVM_LIBS_DIR@" +config.target_triple = "@TARGET_TRIPLE@" +config.python_executable = "@Python3_EXECUTABLE@" + +# Support substitution of the tools and libs dirs with user parameters. This is +# used when we can't determine the tool dir at configuration time. +try: + config.llvm_tools_dir = config.llvm_tools_dir % lit_config.params + config.llvm_libs_dir = config.llvm_libs_dir % lit_config.params +except KeyError as e: + key, = e.args + lit_config.fatal("unable to find %r parameter, use '--param=%s=VALUE'" % (key,key)) + +config.clang_pseudo_source_dir = "@CMAKE_CURRENT_SOURCE_DIR@/.." +config.clang_pseudo_binary_dir = "@CMAKE_CURRENT_BINARY_DIR@/.." +# Delegate logic to lit.cfg.py. +lit_config.load_config(config, "@CMAKE_CURRENT_SOURCE_DIR@/lit.cfg.py") diff --git a/clang/test/Syntax/lr-build-basic.test b/clang-tools-extra/pseudo/test/lr-build-basic.test rename from clang/test/Syntax/lr-build-basic.test rename to clang-tools-extra/pseudo/test/lr-build-basic.test diff --git a/clang/test/Syntax/lr-build-conflicts.test b/clang-tools-extra/pseudo/test/lr-build-conflicts.test rename from clang/test/Syntax/lr-build-conflicts.test rename to clang-tools-extra/pseudo/test/lr-build-conflicts.test diff --git a/clang/tools/clang-pseudo/CMakeLists.txt b/clang-tools-extra/pseudo/tool/CMakeLists.txt rename from clang/tools/clang-pseudo/CMakeLists.txt rename to clang-tools-extra/pseudo/tool/CMakeLists.txt --- a/clang/tools/clang-pseudo/CMakeLists.txt +++ b/clang-tools-extra/pseudo/tool/CMakeLists.txt @@ -4,12 +4,13 @@ ClangPseudo.cpp ) -set(CLANG_PSEUDO_LIB_DEPS +clang_target_link_libraries(clang-pseudo + PRIVATE clangBasic - clangToolingSyntaxPseudo ) -clang_target_link_libraries(clang-pseudo +target_link_libraries(clang-pseudo PRIVATE - ${CLANG_PSEUDO_LIB_DEPS} + clangPseudo ) + diff --git a/clang/tools/clang-pseudo/ClangPseudo.cpp b/clang-tools-extra/pseudo/tool/ClangPseudo.cpp rename from clang/tools/clang-pseudo/ClangPseudo.cpp rename to clang-tools-extra/pseudo/tool/ClangPseudo.cpp --- a/clang/tools/clang-pseudo/ClangPseudo.cpp +++ b/clang-tools-extra/pseudo/tool/ClangPseudo.cpp @@ -6,18 +6,18 @@ // //===----------------------------------------------------------------------===// +#include "clang-pseudo/DirectiveMap.h" +#include "clang-pseudo/Grammar.h" +#include "clang-pseudo/LRGraph.h" +#include "clang-pseudo/LRTable.h" +#include "clang-pseudo/Token.h" #include "clang/Basic/LangOptions.h" -#include "clang/Tooling/Syntax/Pseudo/DirectiveMap.h" -#include "clang/Tooling/Syntax/Pseudo/Grammar.h" -#include "clang/Tooling/Syntax/Pseudo/LRGraph.h" -#include "clang/Tooling/Syntax/Pseudo/LRTable.h" -#include "clang/Tooling/Syntax/Pseudo/Token.h" #include "llvm/ADT/StringExtras.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/FormatVariadic.h" #include "llvm/Support/MemoryBuffer.h" -using clang::syntax::pseudo::Grammar; +using clang::pseudo::Grammar; using llvm::cl::desc; using llvm::cl::init; using llvm::cl::opt; @@ -64,19 +64,17 @@ if (PrintGrammar) llvm::outs() << G->dump(); if (PrintGraph) - llvm::outs() << clang::syntax::pseudo::LRGraph::buildLR0(*G).dumpForTests( - *G); + llvm::outs() << clang::pseudo::LRGraph::buildLR0(*G).dumpForTests(*G); if (PrintTable) - llvm::outs() << clang::syntax::pseudo::LRTable::buildSLR(*G).dumpForTests( - *G); + llvm::outs() << clang::pseudo::LRTable::buildSLR(*G).dumpForTests(*G); return 0; } if (Source.getNumOccurrences()) { std::string Text = readOrDie(Source); clang::LangOptions LangOpts; // FIXME: use real options. - auto Stream = clang::syntax::pseudo::lex(Text, LangOpts); - auto Structure = clang::syntax::pseudo::DirectiveMap::parse(Stream); + auto Stream = clang::pseudo::lex(Text, LangOpts); + auto Structure = clang::pseudo::DirectiveMap::parse(Stream); if (PrintDirectiveMap) llvm::outs() << Structure; diff --git a/clang/unittests/Tooling/Syntax/Pseudo/CMakeLists.txt b/clang-tools-extra/pseudo/unittests/CMakeLists.txt rename from clang/unittests/Tooling/Syntax/Pseudo/CMakeLists.txt rename to clang-tools-extra/pseudo/unittests/CMakeLists.txt --- a/clang/unittests/Tooling/Syntax/Pseudo/CMakeLists.txt +++ b/clang-tools-extra/pseudo/unittests/CMakeLists.txt @@ -2,7 +2,8 @@ Support ) -add_clang_unittest(ClangPseudoTests +add_custom_target(ClangPseudoUnitTests) +add_unittest(ClangPseudoUnitTests ClangPseudoTests DirectiveMapTest.cpp GrammarTest.cpp LRTableTest.cpp @@ -13,11 +14,14 @@ PRIVATE clangBasic clangLex - clangToolingSyntaxPseudo clangTesting ) target_link_libraries(ClangPseudoTests PRIVATE - LLVMTestingSupport + clangPseudo ) + +configure_lit_site_cfg( + ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.py.in + ${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg.py) diff --git a/clang/unittests/Tooling/Syntax/Pseudo/DirectiveMapTest.cpp b/clang-tools-extra/pseudo/unittests/DirectiveMapTest.cpp rename from clang/unittests/Tooling/Syntax/Pseudo/DirectiveMapTest.cpp rename to clang-tools-extra/pseudo/unittests/DirectiveMapTest.cpp --- a/clang/unittests/Tooling/Syntax/Pseudo/DirectiveMapTest.cpp +++ b/clang-tools-extra/pseudo/unittests/DirectiveMapTest.cpp @@ -6,18 +6,17 @@ // //===----------------------------------------------------------------------===// -#include "clang/Tooling/Syntax/Pseudo/DirectiveMap.h" +#include "clang-pseudo/DirectiveMap.h" +#include "clang-pseudo/Token.h" #include "clang/Basic/LangOptions.h" #include "clang/Basic/TokenKinds.h" -#include "clang/Tooling/Syntax/Pseudo/Token.h" #include "llvm/ADT/StringExtras.h" #include "llvm/ADT/StringRef.h" #include "gmock/gmock.h" #include "gtest/gtest.h" namespace clang { -namespace syntax { namespace pseudo { namespace { @@ -148,5 +147,4 @@ } // namespace } // namespace pseudo -} // namespace syntax } // namespace clang diff --git a/clang/unittests/Tooling/Syntax/Pseudo/GrammarTest.cpp b/clang-tools-extra/pseudo/unittests/GrammarTest.cpp rename from clang/unittests/Tooling/Syntax/Pseudo/GrammarTest.cpp rename to clang-tools-extra/pseudo/unittests/GrammarTest.cpp --- a/clang/unittests/Tooling/Syntax/Pseudo/GrammarTest.cpp +++ b/clang-tools-extra/pseudo/unittests/GrammarTest.cpp @@ -6,13 +6,12 @@ // //===----------------------------------------------------------------------===// -#include "clang/Tooling/Syntax/Pseudo/Grammar.h" +#include "clang-pseudo/Grammar.h" #include "gmock/gmock.h" #include "gtest/gtest.h" #include namespace clang { -namespace syntax { namespace pseudo { namespace { @@ -157,5 +156,4 @@ } // namespace } // namespace pseudo -} // namespace syntax } // namespace clang diff --git a/clang/unittests/Tooling/Syntax/Pseudo/LRTableTest.cpp b/clang-tools-extra/pseudo/unittests/LRTableTest.cpp rename from clang/unittests/Tooling/Syntax/Pseudo/LRTableTest.cpp rename to clang-tools-extra/pseudo/unittests/LRTableTest.cpp --- a/clang/unittests/Tooling/Syntax/Pseudo/LRTableTest.cpp +++ b/clang-tools-extra/pseudo/unittests/LRTableTest.cpp @@ -6,15 +6,14 @@ // //===----------------------------------------------------------------------===// -#include "clang/Tooling/Syntax/Pseudo/LRTable.h" +#include "clang-pseudo/LRTable.h" +#include "clang-pseudo/Grammar.h" #include "clang/Basic/TokenKinds.h" -#include "clang/Tooling/Syntax/Pseudo/Grammar.h" #include "gmock/gmock.h" #include "gtest/gtest.h" #include namespace clang { -namespace syntax { namespace pseudo { namespace { @@ -52,5 +51,4 @@ } // namespace } // namespace pseudo -} // namespace syntax } // namespace clang diff --git a/clang/unittests/Tooling/Syntax/Pseudo/TokenTest.cpp b/clang-tools-extra/pseudo/unittests/TokenTest.cpp rename from clang/unittests/Tooling/Syntax/Pseudo/TokenTest.cpp rename to clang-tools-extra/pseudo/unittests/TokenTest.cpp --- a/clang/unittests/Tooling/Syntax/Pseudo/TokenTest.cpp +++ b/clang-tools-extra/pseudo/unittests/TokenTest.cpp @@ -6,14 +6,13 @@ // //===----------------------------------------------------------------------===// -#include "clang/Tooling/Syntax/Pseudo/Token.h" +#include "clang-pseudo/Token.h" #include "clang/Basic/LangOptions.h" #include "clang/Basic/TokenKinds.h" #include "gmock/gmock.h" #include "gtest/gtest.h" namespace clang { -namespace syntax { namespace pseudo { namespace { @@ -191,5 +190,4 @@ } // namespace } // namespace pseudo -} // namespace syntax } // namespace clang diff --git a/clang-tools-extra/pseudo/unittests/lit.cfg.py b/clang-tools-extra/pseudo/unittests/lit.cfg.py new file mode 100644 --- /dev/null +++ b/clang-tools-extra/pseudo/unittests/lit.cfg.py @@ -0,0 +1,19 @@ +import lit.formats +config.name = "clangPseudo Unit Tests" +config.test_format = lit.formats.GoogleTest('.', 'Tests') +config.test_source_root = config.clang_pseudo_binary_dir + "/unittests" +config.test_exec_root = config.clang_pseudo_binary_dir + "/unittests" + +# Point the dynamic loader at dynamic libraries in 'lib'. +# FIXME: it seems every project has a copy of this logic. Move it somewhere. +import platform +if platform.system() == 'Darwin': + shlibpath_var = 'DYLD_LIBRARY_PATH' +elif platform.system() == 'Windows': + shlibpath_var = 'PATH' +else: + shlibpath_var = 'LD_LIBRARY_PATH' +config.environment[shlibpath_var] = os.path.pathsep.join(( + "@SHLIBDIR@", "@LLVM_LIBS_DIR@", + config.environment.get(shlibpath_var,''))) + diff --git a/clang-tools-extra/pseudo/unittests/lit.site.cfg.py.in b/clang-tools-extra/pseudo/unittests/lit.site.cfg.py.in new file mode 100644 --- /dev/null +++ b/clang-tools-extra/pseudo/unittests/lit.site.cfg.py.in @@ -0,0 +1,11 @@ +@LIT_SITE_CFG_IN_HEADER@ +# This is a shim to run the gtest unittests in ../unittests using lit. + +config.llvm_libs_dir = "@LLVM_LIBS_DIR@" +config.shlibdir = "@SHLIBDIR@" + +config.clang_pseudo_source_dir = "@CMAKE_CURRENT_SOURCE_DIR@/.." +config.clang_pseudo_binary_dir = "@CMAKE_CURRENT_BINARY_DIR@/.." + +# Delegate logic to lit.cfg.py. +lit_config.load_config(config, "@CMAKE_CURRENT_SOURCE_DIR@/lit.cfg.py") diff --git a/clang/lib/Tooling/Syntax/CMakeLists.txt b/clang/lib/Tooling/Syntax/CMakeLists.txt --- a/clang/lib/Tooling/Syntax/CMakeLists.txt +++ b/clang/lib/Tooling/Syntax/CMakeLists.txt @@ -19,5 +19,3 @@ DEPENDS omp_gen ) - -add_subdirectory(Pseudo) diff --git a/clang/test/Syntax/lit.local.cfg b/clang/test/Syntax/lit.local.cfg deleted file mode 100644 --- a/clang/test/Syntax/lit.local.cfg +++ /dev/null @@ -1,4 +0,0 @@ -cxx_bnf_file = os.path.join(config.clang_src_dir, 'lib', 'Tooling', 'Syntax', - 'Pseudo', 'cxx.bnf') -config.substitutions.append(('%cxx-bnf-file', - '%s' % (cxx_bnf_file))) diff --git a/clang/tools/CMakeLists.txt b/clang/tools/CMakeLists.txt --- a/clang/tools/CMakeLists.txt +++ b/clang/tools/CMakeLists.txt @@ -14,7 +14,6 @@ add_clang_subdirectory(clang-offload-wrapper) add_clang_subdirectory(clang-scan-deps) add_clang_subdirectory(clang-repl) -add_clang_subdirectory(clang-pseudo) add_clang_subdirectory(c-index-test) diff --git a/clang/unittests/Tooling/Syntax/CMakeLists.txt b/clang/unittests/Tooling/Syntax/CMakeLists.txt --- a/clang/unittests/Tooling/Syntax/CMakeLists.txt +++ b/clang/unittests/Tooling/Syntax/CMakeLists.txt @@ -28,5 +28,3 @@ PRIVATE LLVMTestingSupport ) - -add_subdirectory(Pseudo)