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/LanguageRuntime/RenderScript/RenderScriptRuntime", "RenderScriptRuntime", ], [ "//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/JIT", "ObjectFileJIT", ], [ "//lldb/source/Plugins/ObjectFile/Mach-O", "ObjectFileMachO", ], [ "//lldb/source/Plugins/ObjectFile/PDB", "ObjectFilePDB", ], [ "//lldb/source/Plugins/ObjectFile/PECOFF", "ObjectFilePECOFF", ], [ "//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", ], ] if (current_os == "mac") { lldb_plugins += [ [ "//lldb/source/Plugins/SymbolVendor/MacOSX", "SymbolVendorMacOSX", ] ] } lldb_plugins += [ [ "//lldb/source/Plugins/SymbolVendor/ELF", "SymbolVendorELF", ], [ "//lldb/source/Plugins/SymbolVendor/wasm", "SymbolVendorWasm", ], [ "//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" ] }