summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJonas Devlieghere <jonas@devlieghere.com>2024-05-01 13:02:47 -0700
committerGitHub <noreply@github.com>2024-05-01 13:02:47 -0700
commitdcbf0fcd0d5572f7001ebdd3bda6062593ec172b (patch)
treed6dfbcf14df3adae62306007f3b1dfc91be0d27b
parentc4e8e2c67bbfff2d1b23210c375c173aa05e3848 (diff)
[lldb] Use Python script to generate SBLanguages.h (#90753)
Use a Python script to generate SBLanguages.h instead of piggybacking on LLDB TableGen. This addresses Nico Weber's post-commit feedback.
-rwxr-xr-xlldb/scripts/generate-sbapi-dwarf-enum.py67
-rw-r--r--lldb/source/API/CMakeLists.txt18
-rw-r--r--lldb/utils/TableGen/CMakeLists.txt1
-rw-r--r--lldb/utils/TableGen/LLDBSBAPIDWARFEnum.cpp67
-rw-r--r--lldb/utils/TableGen/LLDBTableGen.cpp8
5 files changed, 81 insertions, 80 deletions
diff --git a/lldb/scripts/generate-sbapi-dwarf-enum.py b/lldb/scripts/generate-sbapi-dwarf-enum.py
new file mode 100755
index 000000000000..5eeb8264a768
--- /dev/null
+++ b/lldb/scripts/generate-sbapi-dwarf-enum.py
@@ -0,0 +1,67 @@
+#!/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 *\( *(?P<value>[^,]+), (?P<comment>[^"]+), "(?P<name>.*)",.*\)'
+)
+
+
+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.match(line)
+ if not match:
+ continue
+ f.write(f" /// {match.group('comment')}.\n")
+ f.write(f" eLanguageName{match.group('name')} = {match.group('value')},\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 ad960403ae70..a64c0d4a3334 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 68547fe13e1a..47a6400b4287 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 084284ed6aa8..000000000000
--- 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 75d167556047..c63ca76c0d48 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);
}