Skip to content

Commit

Permalink
[lldb] Use Python script to generate SBLanguages.h (#90753)
Browse files Browse the repository at this point in the history
Use a Python script to generate SBLanguages.h instead of piggybacking on
LLDB TableGen. This addresses Nico Weber's post-commit feedback.
  • Loading branch information
JDevlieghere committed May 1, 2024
1 parent c4e8e2c commit dcbf0fc
Show file tree
Hide file tree
Showing 5 changed files with 81 additions and 80 deletions.
67 changes: 67 additions & 0 deletions lldb/scripts/generate-sbapi-dwarf-enum.py
Original file line number Diff line number Diff line change
@@ -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()
18 changes: 14 additions & 4 deletions lldb/source/API/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -106,7 +116,7 @@ add_lldb_library(liblldb SHARED ${option_framework}

DEPENDS
lldb-sbapi-dwarf-enums

LINK_LIBS
lldbBreakpoint
lldbCore
Expand Down
1 change: 0 additions & 1 deletion lldb/utils/TableGen/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
)
Expand Down
67 changes: 0 additions & 67 deletions lldb/utils/TableGen/LLDBSBAPIDWARFEnum.cpp

This file was deleted.

8 changes: 0 additions & 8 deletions lldb/utils/TableGen/LLDBTableGen.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@ enum ActionType {
GenOptionDefs,
GenPropertyDefs,
GenPropertyEnumDefs,
GenSBAPIDWARFEnum
};

static cl::opt<ActionType> Action(
Expand All @@ -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) {
Expand All @@ -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;
}
Expand All @@ -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);
}

Expand Down

0 comments on commit dcbf0fc

Please sign in to comment.