import("//llvm/lib/Target/targets.gni")
import("//llvm/utils/gn/build/write_cmake_config.gni")
# In the CMake build, each plugin calls `add_lldb_library(name PLUGIN ...)`,
# which implicitly adds the plugin name to the LLDB_PLUGINS list.
# A few places then query that list and add dependencies on it.
# lldb/source/Plugins/CMakeList.txt then does string munging on the list of
# plugin names to generate Plugins.def.
# In the GN build, we instead have an explicit list of all plugins here.
# Every entry in this list is a (GN target, LLDB_PLUGIN Plugins.def name) pair.
lldb_plugins = []
if (llvm_build_X86) {
lldb_plugins += [ [
"//lldb/source/Plugins/ABI/X86",
"ABIX86",
] ]
}
lldb_plugins += [
[
"//lldb/source/Plugins/Architecture/PPC64",
"ArchitecturePPC64",
],
[
"//lldb/source/Plugins/Disassembler/LLVMC",
"DisassemblerLLVMC",
],
[
"//lldb/source/Plugins/DynamicLoader/Darwin-Kernel",
"DynamicLoaderDarwinKernel",
],
[
"//lldb/source/Plugins/DynamicLoader/MacOSX-DYLD",
"DynamicLoaderMacOSXDYLD",
],
[
"//lldb/source/Plugins/DynamicLoader/POSIX-DYLD",
"DynamicLoaderPosixDYLD",
],
[
"//lldb/source/Plugins/DynamicLoader/Static",
"DynamicLoaderStatic",
],
[
"//lldb/source/Plugins/DynamicLoader/Windows-DYLD",
"DynamicLoaderWindowsDYLD",
],
[
"//lldb/source/Plugins/Instruction/ARM",
"InstructionARM",
],
[
"//lldb/source/Plugins/JITLoader/GDB",
"JITLoaderGDB",
],
[
"//lldb/source/Plugins/Language/CPlusPlus",
"CPlusPlusLanguage",
],
[
"//lldb/source/Plugins/Language/ObjC",
"ObjCLanguage",
],
[
"//lldb/source/Plugins/Language/ObjCPlusPlus",
"ObjCPlusPlusLanguage",
],
[
"//lldb/source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI",
"CXXItaniumABI",
],
[
"//lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime",
"AppleObjCRuntime",
],
[
"//lldb/source/Plugins/ObjectContainer/BSD-Archive",
"ObjectContainerBSDArchive",
],
[
"//lldb/source/Plugins/ObjectContainer/Universal-Mach-O",
"ObjectContainerMachOArchive",
],
[
"//lldb/source/Plugins/ObjectFile/Breakpad",
"ObjectFileBreakpad",
],
[
"//lldb/source/Plugins/ObjectFile/ELF",
"ObjectFileELF",
],
[
"//lldb/source/Plugins/ObjectFile/Mach-O",
"ObjectFileMachO",
],
[
"//lldb/source/Plugins/ObjectFile/PDB",
"ObjectFilePDB",
],
[
"//lldb/source/Plugins/ObjectFile/PECOFF",
"ObjectFilePECOFF",
],
[
"//lldb/source/Plugins/ObjectFile/Placeholder",
"ObjectFilePlaceholder",
],
[
"//lldb/source/Plugins/ObjectFile/wasm",
"ObjectFileWasm",
],
[
"//lldb/source/Plugins/Platform/Linux",
"PlatformLinux",
],
[
"//lldb/source/Plugins/Platform/MacOSX",
"PlatformMacOSX",
],
[
"//lldb/source/Plugins/Platform/Windows",
"PlatformWindows",
],
[
"//lldb/source/Plugins/Process/elf-core",
"ProcessElfCore",
],
[
"//lldb/source/Plugins/Process/gdb-remote",
"", # Uses LLDB_PROCESS_GDB_PLUGIN instead.
],
[
"//lldb/source/Plugins/Process/mach-core",
"ProcessMachCore",
],
[
"//lldb/source/Plugins/Process/minidump",
"ProcessMinidump",
],
[
"//lldb/source/Plugins/REPL/Clang",
"ClangREPL",
],
[
"//lldb/source/Plugins/ScriptInterpreter/None",
"", # Uses LLDB_SCRIPT_PLUGIN instead.
],
[
"//lldb/source/Plugins/SymbolFile/Breakpad",
"SymbolFileBreakpad",
],
[
"//lldb/source/Plugins/SymbolFile/DWARF",
"SymbolFileDWARF",
],
[
"//lldb/source/Plugins/SymbolFile/PDB",
"SymbolFilePDB",
],
[
"//lldb/source/Plugins/SymbolFile/Symtab",
"SymbolFileSymtab",
],
[
"//lldb/source/Plugins/SymbolLocator/Default",
"SymbolLocatorDefault",
],
]
if (current_os == "mac") {
lldb_plugins += [
[
"//lldb/source/Plugins/SymbolLocator/DebugSymbols",
"SymbolLocatorDebugSymbols",
],
[
"//lldb/source/Plugins/SymbolVendor/MacOSX",
"SymbolVendorMacOSX",
],
]
}
lldb_plugins += [
[
"//lldb/source/Plugins/SymbolVendor/ELF",
"SymbolVendorELF",
],
[
"//lldb/source/Plugins/SymbolVendor/wasm",
"SymbolVendorWasm",
],
[
"//lldb/source/Plugins/SymbolVendor/PECOFF",
"SymbolVendorPECOFF",
],
[
"//lldb/source/Plugins/TypeSystem/Clang",
"TypeSystemClang",
],
[
"//lldb/source/Plugins/UnwindAssembly/InstEmulation",
"UnwindAssemblyInstEmulation",
],
[
"//lldb/source/Plugins/UnwindAssembly/x86",
"UnwindAssemblyX86",
],
]
write_cmake_config("Plugins.def") {
input = "Plugins.def.in"
output = "$target_gen_dir/Plugins.def"
enum_plugins = ""
foreach(plugin, lldb_plugins) {
plugin_id = plugin[1]
if (plugin_id != "") {
# \n is a literal '\' followed by a literal 'n', not a newline character.
# write_cmake_config.py replaces it with a real newline.
enum_plugins += "LLDB_PLUGIN(" + plugin_id + ")\n"
}
}
deps = [ "//lldb/source/Plugins/ScriptInterpreter/None" ]
enum_plugins += "LLDB_SCRIPT_PLUGIN(ScriptInterpreterNone)"
values = [ "LLDB_ENUM_PLUGINS=" + enum_plugins ]
# These are in separate variables to make sure ProcessWindowsCommon is
# initalized after all plugins, but before ProcessGDBRemote.
if (current_os == "win") {
values +=
[ "LLDB_PROCESS_WINDOWS_PLUGIN=LLDB_PLUGIN(ProcessWindowsCommon)" ]
} else {
values += [ "LLDB_PROCESS_WINDOWS_PLUGIN=" ]
}
values += [ "LLDB_PROCESS_GDB_PLUGIN=LLDB_PLUGIN(ProcessGDBRemote)" ]
}
config("AllLldbPlugins_config") {
visibility = [ ":LldbAllPlugins" ]
# To pick up Plugins.def.
include_dirs = [ "$root_gen_dir/lldb/source" ]
}
group("LldbAllPlugins") {
deps = [ ":Plugins.def" ]
foreach(plugin, lldb_plugins) {
deps += [ plugin[0] ]
}
public_configs = [ ":AllLldbPlugins_config" ]
}