llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-lldb Author: Jonas Devlieghere (JDevlieghere) <details> <summary>Changes</summary> Use a Python script to generate SBLanguages.h instead of piggybacking on LLDB TableGen. This addresses Nico Weber's post-commit feedback. --- Full diff: https://github.com/llvm/llvm-project/pull/90753.diff 5 Files Affected: - (added) lldb/scripts/generate-sbapi-dwarf-enum.py (+65) - (modified) lldb/source/API/CMakeLists.txt (+14-4) - (modified) lldb/utils/TableGen/CMakeLists.txt (-1) - (removed) lldb/utils/TableGen/LLDBSBAPIDWARFEnum.cpp (-67) - (modified) lldb/utils/TableGen/LLDBTableGen.cpp (-8) ``````````diff diff --git a/lldb/scripts/generate-sbapi-dwarf-enum.py b/lldb/scripts/generate-sbapi-dwarf-enum.py new file mode 100755 index 00000000000000..c4252223430ed6 --- /dev/null +++ b/lldb/scripts/generate-sbapi-dwarf-enum.py @@ -0,0 +1,65 @@ +#!/usr/bin/env python3 + +import argparse +import re + +HEADER = """\ +//===-- SBLanguages.h -----------------------------------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#ifndef LLDB_API_SBLANGUAGE_H +#define LLDB_API_SBLANGUAGE_H +/// Used by \\ref SBExpressionOptions. +/// These enumerations use the same language enumerations as the DWARF +/// specification for ease of use and consistency. +enum SBSourceLanguageName : uint16_t { +""" + +FOOTER = """\ +}; + +#endif +""" + +REGEX = re.compile(r'(^ *HANDLE_DW_LNAME *\( *([^,]+), ([^,]+), )"(.*)",.*\).*') + + +def emit_enum(input, output): + # Read the input and break it up by lines. + lines = [] + with open(input, "r") as f: + lines = f.readlines() + + # Write the output. + with open(output, "w") as f: + # Emit the header. + f.write(HEADER) + + # Emit the enum values. + for line in lines: + match = REGEX.search(line) + if not match: + continue + f.write(f" /// {match.group(4)}.\n") + f.write(f" eLanguageName{match.group(3)} = {match.group(2)},\n") + + # Emit the footer + f.write(FOOTER) + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument("--output", "-o") + parser.add_argument("input") + args = parser.parse_args() + + emit_enum(args.input, args.output) + + +if __name__ == "__main__": + main() diff --git a/lldb/source/API/CMakeLists.txt b/lldb/source/API/CMakeLists.txt index ad960403ae70bf..a64c0d4a333425 100644 --- a/lldb/source/API/CMakeLists.txt +++ b/lldb/source/API/CMakeLists.txt @@ -20,9 +20,19 @@ if(LLDB_ENABLE_LUA) set(lldb_lua_wrapper ${lua_bindings_dir}/LLDBWrapLua.cpp) endif() -lldb_tablegen(../../include/lldb/API/SBLanguages.h -gen-lldb-sbapi-dwarf-enum - SOURCE ${LLVM_MAIN_INCLUDE_DIR}/llvm/BinaryFormat/Dwarf.def - TARGET lldb-sbapi-dwarf-enums) +# Target to generate SBLanguages.h from Dwarf.def. +set(sb_languages_file + ${CMAKE_CURRENT_BINARY_DIR}/../../include/lldb/API/SBLanguages.h) +add_custom_target( + lldb-sbapi-dwarf-enums + "${Python3_EXECUTABLE}" + ${LLDB_SOURCE_DIR}/scripts/generate-sbapi-dwarf-enum.py + ${LLVM_MAIN_INCLUDE_DIR}/llvm/BinaryFormat/Dwarf.def + -o ${sb_languages_file} + BYPRODUCTS ${sb_languages_file} + DEPENDS ${LLVM_MAIN_INCLUDE_DIR}/llvm/BinaryFormat/Dwarf.def + WORKING_DIRECTORY ${LLVM_LIBRARY_OUTPUT_INTDIR} +) add_lldb_library(liblldb SHARED ${option_framework} SBAddress.cpp @@ -106,7 +116,7 @@ add_lldb_library(liblldb SHARED ${option_framework} DEPENDS lldb-sbapi-dwarf-enums - + LINK_LIBS lldbBreakpoint lldbCore diff --git a/lldb/utils/TableGen/CMakeLists.txt b/lldb/utils/TableGen/CMakeLists.txt index 68547fe13e1aeb..47a6400b4287e2 100644 --- a/lldb/utils/TableGen/CMakeLists.txt +++ b/lldb/utils/TableGen/CMakeLists.txt @@ -10,7 +10,6 @@ if (NOT DEFINED LLDB_TABLEGEN_EXE) add_tablegen(lldb-tblgen LLDB LLDBOptionDefEmitter.cpp LLDBPropertyDefEmitter.cpp - LLDBSBAPIDWARFEnum.cpp LLDBTableGen.cpp LLDBTableGenUtils.cpp ) diff --git a/lldb/utils/TableGen/LLDBSBAPIDWARFEnum.cpp b/lldb/utils/TableGen/LLDBSBAPIDWARFEnum.cpp deleted file mode 100644 index 084284ed6aa82a..00000000000000 --- a/lldb/utils/TableGen/LLDBSBAPIDWARFEnum.cpp +++ /dev/null @@ -1,67 +0,0 @@ -//===- LLDBPropertyDefEmitter.cpp -----------------------------------------===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// -// -// Produce the list of source languages header file fragment for the SBAPI. -// -//===----------------------------------------------------------------------===// - -#include <fstream> -#include <llvm/ADT/StringRef.h> -#include <regex> - -namespace lldb_private { -int EmitSBAPIDWARFEnum(int argc, char **argv) { - std::string InputFilename; - std::string OutputFilename; - std::string DepFilename; - // This command line option parser is as robust as the worst shell script. - for (int i = 0; i < argc; ++i) { - if (llvm::StringRef(argv[i]).ends_with("Dwarf.def")) - InputFilename = std::string(argv[i]); - if (llvm::StringRef(argv[i]) == "-o" && i + 1 < argc) - OutputFilename = std::string(argv[i + 1]); - if (llvm::StringRef(argv[i]) == "-d" && i + 1 < argc) - DepFilename = std::string(argv[i + 1]); - } - std::ifstream input(InputFilename); - std::ofstream output(OutputFilename); - output - << R"(//===-- SBLanguages.h -----------------------------------------*- C++ -*-===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// - -#ifndef LLDB_API_SBLANGUAGE_H -#define LLDB_API_SBLANGUAGE_H -/// Used by \ref SBExpressionOptions. -/// These enumerations use the same language enumerations as the DWARF -/// specification for ease of use and consistency. -enum SBSourceLanguageName : uint16_t { -)"; - std::string line; - std::regex macro_regex(R"(^ *HANDLE_DW_LNAME *\( *([^,]+), ([^,]+), )" - "\"(.*)\",.*\\).*", - std::regex::extended); - while (std::getline(input, line)) { - std::smatch match; - if (!std::regex_match(line, match, macro_regex)) - continue; - - output << " /// " << match[3] << ".\n"; - output << " eLanguageName" << match[2] << " = " << match[1] << ",\n"; - } - output << "};\n\n"; - output << "#endif\n"; - // Emit the dependencies file. - std::ofstream(DepFilename) << OutputFilename << ": " << InputFilename << '\n'; - return 0; -} -} // namespace lldb_private diff --git a/lldb/utils/TableGen/LLDBTableGen.cpp b/lldb/utils/TableGen/LLDBTableGen.cpp index 75d16755604758..c63ca76c0d48f1 100644 --- a/lldb/utils/TableGen/LLDBTableGen.cpp +++ b/lldb/utils/TableGen/LLDBTableGen.cpp @@ -27,7 +27,6 @@ enum ActionType { GenOptionDefs, GenPropertyDefs, GenPropertyEnumDefs, - GenSBAPIDWARFEnum }; static cl::opt<ActionType> Action( @@ -41,8 +40,6 @@ static cl::opt<ActionType> Action( clEnumValN(GenPropertyDefs, "gen-lldb-property-defs", "Generate lldb property definitions"), clEnumValN(GenPropertyEnumDefs, "gen-lldb-property-enum-defs", - "Generate lldb property enum definitions"), - clEnumValN(GenSBAPIDWARFEnum, "gen-lldb-sbapi-dwarf-enum", "Generate lldb property enum definitions"))); static bool LLDBTableGenMain(raw_ostream &OS, RecordKeeper &Records) { @@ -62,8 +59,6 @@ static bool LLDBTableGenMain(raw_ostream &OS, RecordKeeper &Records) { case GenPropertyEnumDefs: EmitPropertyEnumDefs(Records, OS); break; - case GenSBAPIDWARFEnum: - llvm_unreachable("already handled"); } return false; } @@ -74,9 +69,6 @@ int main(int argc, char **argv) { cl::ParseCommandLineOptions(argc, argv); llvm_shutdown_obj Y; - if (Action == GenSBAPIDWARFEnum) - return EmitSBAPIDWARFEnum(argc, argv); - return TableGenMain(argv[0], &LLDBTableGenMain); } `````````` </details> https://github.com/llvm/llvm-project/pull/90753 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits