JDevlieghere created this revision.
JDevlieghere added a reviewer: LLDB.
Herald added subscribers: abidh, mgorny.
Herald added a project: LLDB.
JDevlieghere added a parent revision: D71234: [lldb/Lua] Implement a Simple Lua 
Script Interpreter Prototype.

This patch uses SWIG to generate the Lua bindings for the SB API. It covers 
most of the API, but some methods require a type map similar to Python.

Discussion on the mailing list: 
http://lists.llvm.org/pipermail/lldb-dev/2019-December/015812.html


Repository:
  rLLDB LLDB

https://reviews.llvm.org/D71235

Files:
  lldb/CMakeLists.txt
  lldb/scripts/CMakeLists.txt
  lldb/scripts/lldb_lua.swig
  lldb/source/Plugins/ScriptInterpreter/Lua/CMakeLists.txt
  lldb/source/Plugins/ScriptInterpreter/Lua/ScriptInterpreterLua.cpp

Index: lldb/source/Plugins/ScriptInterpreter/Lua/ScriptInterpreterLua.cpp
===================================================================
--- lldb/source/Plugins/ScriptInterpreter/Lua/ScriptInterpreterLua.cpp
+++ lldb/source/Plugins/ScriptInterpreter/Lua/ScriptInterpreterLua.cpp
@@ -24,6 +24,10 @@
 
 #include <mutex>
 
+extern "C" {
+int luaopen_lldb(lua_State *L);
+}
+
 using namespace lldb;
 using namespace lldb_private;
 
@@ -32,6 +36,7 @@
   Lua() : m_lua_state(luaL_newstate()) {
     assert(m_lua_state);
     luaL_openlibs(m_lua_state);
+    luaopen_lldb(m_lua_state);
   }
   ~Lua() {
     assert(m_lua_state);
Index: lldb/source/Plugins/ScriptInterpreter/Lua/CMakeLists.txt
===================================================================
--- lldb/source/Plugins/ScriptInterpreter/Lua/CMakeLists.txt
+++ lldb/source/Plugins/ScriptInterpreter/Lua/CMakeLists.txt
@@ -1,12 +1,24 @@
+find_package(Lua REQUIRED)
+include_directories(${LUA_INCLUDE_DIR})
+
+get_target_property(lldb_scripts_dir swig_wrapper_lua BINARY_DIR)
+set(lldb_lua_wrapper ${lldb_scripts_dir}/LLDBWrapLua.cpp)
+
+# Disable warnings in SWIG generated code.
+set_source_files_properties(${lldb_lua_wrapper} PROPERTIES
+  COMPILE_FLAGS "-Wno-format-security -Wno-cast-qual")
+
+set_source_files_properties(${lldb_lua_wrapper} PROPERTIES
+  GENERATED ON)
+
 add_lldb_library(lldbPluginScriptInterpreterLua PLUGIN
   ScriptInterpreterLua.cpp
+  ${lldb_lua_wrapper}
 
   LINK_LIBS
     lldbCore
     lldbInterpreter
   )
 
-find_package(Lua REQUIRED)
-include_directories(${LUA_INCLUDE_DIR})
-
+add_dependencies(lldbPluginScriptInterpreterLua swig_wrapper_lua)
 target_link_libraries(lldbPluginScriptInterpreterLua PRIVATE ${LUA_LIBRARIES})
Index: lldb/scripts/lldb_lua.swig
===================================================================
--- /dev/null
+++ lldb/scripts/lldb_lua.swig
@@ -0,0 +1,174 @@
+/*
+   lldb.swig
+
+   This is the input file for SWIG, to create the appropriate C++ wrappers and
+   functions for various scripting languages, to enable them to call the
+   liblldb Script Bridge functions.
+*/
+
+/* C++ headers to be included. */
+%{
+#include <algorithm>
+#include <string>
+%}
+
+/* The liblldb header files to be included. */
+%{
+#include "lldb/lldb-public.h"
+#include "lldb/API/SBAddress.h"
+#include "lldb/API/SBAttachInfo.h"
+#include "lldb/API/SBBlock.h"
+#include "lldb/API/SBBreakpoint.h"
+#include "lldb/API/SBBreakpointLocation.h"
+#include "lldb/API/SBBreakpointName.h"
+#include "lldb/API/SBBroadcaster.h"
+#include "lldb/API/SBCommandInterpreter.h"
+#include "lldb/API/SBCommandReturnObject.h"
+#include "lldb/API/SBCommunication.h"
+#include "lldb/API/SBCompileUnit.h"
+#include "lldb/API/SBData.h"
+#include "lldb/API/SBDebugger.h"
+#include "lldb/API/SBDeclaration.h"
+#include "lldb/API/SBError.h"
+#include "lldb/API/SBEvent.h"
+#include "lldb/API/SBExecutionContext.h"
+#include "lldb/API/SBExpressionOptions.h"
+#include "lldb/API/SBFileSpec.h"
+#include "lldb/API/SBFile.h"
+#include "lldb/API/SBFileSpecList.h"
+#include "lldb/API/SBFrame.h"
+#include "lldb/API/SBFunction.h"
+#include "lldb/API/SBHostOS.h"
+#include "lldb/API/SBInstruction.h"
+#include "lldb/API/SBInstructionList.h"
+#include "lldb/API/SBLanguageRuntime.h"
+#include "lldb/API/SBLaunchInfo.h"
+#include "lldb/API/SBLineEntry.h"
+#include "lldb/API/SBListener.h"
+#include "lldb/API/SBMemoryRegionInfo.h"
+#include "lldb/API/SBMemoryRegionInfoList.h"
+#include "lldb/API/SBModule.h"
+#include "lldb/API/SBModuleSpec.h"
+#include "lldb/API/SBPlatform.h"
+#include "lldb/API/SBProcess.h"
+#include "lldb/API/SBProcessInfo.h"
+#include "lldb/API/SBQueue.h"
+#include "lldb/API/SBQueueItem.h"
+#include "lldb/API/SBSection.h"
+#include "lldb/API/SBSourceManager.h"
+#include "lldb/API/SBStream.h"
+#include "lldb/API/SBStringList.h"
+#include "lldb/API/SBStructuredData.h"
+#include "lldb/API/SBSymbol.h"
+#include "lldb/API/SBSymbolContext.h"
+#include "lldb/API/SBSymbolContextList.h"
+#include "lldb/API/SBTarget.h"
+#include "lldb/API/SBThread.h"
+#include "lldb/API/SBThreadCollection.h"
+#include "lldb/API/SBThreadPlan.h"
+#include "lldb/API/SBTrace.h"
+#include "lldb/API/SBTraceOptions.h"
+#include "lldb/API/SBType.h"
+#include "lldb/API/SBTypeCategory.h"
+#include "lldb/API/SBTypeEnumMember.h"
+#include "lldb/API/SBTypeFilter.h"
+#include "lldb/API/SBTypeFormat.h"
+#include "lldb/API/SBTypeNameSpecifier.h"
+#include "lldb/API/SBTypeSummary.h"
+#include "lldb/API/SBTypeSynthetic.h"
+#include "lldb/API/SBValue.h"
+#include "lldb/API/SBValueList.h"
+#include "lldb/API/SBVariablesOptions.h"
+#include "lldb/API/SBWatchpoint.h"
+#include "lldb/API/SBUnixSignals.h"
+
+using namespace lldb_private;
+using namespace lldb;
+
+%}
+
+/* Various liblldb typedefs that SWIG needs to know about.  */
+#define __extension__ /* Undefine GCC keyword to make Swig happy when processing glibc's stdint.h. */
+/* The ISO C99 standard specifies that in C++ implementations limit macros such
+   as INT32_MAX should only be defined if __STDC_LIMIT_MACROS is. */
+#define __STDC_LIMIT_MACROS
+%include "stdint.i"
+
+%include "lldb/lldb-defines.h"
+%include "lldb/lldb-enumerations.h"
+%include "lldb/lldb-forward.h"
+%include "lldb/lldb-types.h"
+
+/* Forward declaration of SB classes. */
+%include "lldb/API/SBDefines.h"
+
+%include "./interface/SBAddress.i"
+%include "./interface/SBAttachInfo.i"
+%include "./interface/SBBlock.i"
+%include "./interface/SBBreakpoint.i"
+%include "./interface/SBBreakpointLocation.i"
+%include "./interface/SBBreakpointName.i"
+%include "./interface/SBBroadcaster.i"
+%include "./interface/SBCommandInterpreter.i"
+%include "./interface/SBCommandReturnObject.i"
+%include "./interface/SBCommunication.i"
+%include "./interface/SBCompileUnit.i"
+%include "./interface/SBData.i"
+%include "./interface/SBDebugger.i"
+%include "./interface/SBDeclaration.i"
+%include "./interface/SBError.i"
+%include "./interface/SBEvent.i"
+%include "./interface/SBExecutionContext.i"
+%include "./interface/SBExpressionOptions.i"
+%include "./interface/SBFileSpec.i"
+%include "./interface/SBFile.i"
+%include "./interface/SBFileSpecList.i"
+%include "./interface/SBFrame.i"
+%include "./interface/SBFunction.i"
+%include "./interface/SBHostOS.i"
+%include "./interface/SBInstruction.i"
+%include "./interface/SBInstructionList.i"
+%include "./interface/SBLanguageRuntime.i"
+%include "./interface/SBLaunchInfo.i"
+%include "./interface/SBLineEntry.i"
+%include "./interface/SBListener.i"
+%include "./interface/SBMemoryRegionInfo.i"
+%include "./interface/SBMemoryRegionInfoList.i"
+%include "./interface/SBModule.i"
+%include "./interface/SBModuleSpec.i"
+%include "./interface/SBPlatform.i"
+%include "./interface/SBProcess.i"
+%include "./interface/SBProcessInfo.i"
+%include "./interface/SBQueue.i"
+%include "./interface/SBQueueItem.i"
+%include "./interface/SBSection.i"
+%include "./interface/SBSourceManager.i"
+%include "./interface/SBStream.i"
+%include "./interface/SBStringList.i"
+%include "./interface/SBStructuredData.i"
+%include "./interface/SBSymbol.i"
+%include "./interface/SBSymbolContext.i"
+%include "./interface/SBSymbolContextList.i"
+%include "./interface/SBTarget.i"
+%include "./interface/SBThread.i"
+%include "./interface/SBThreadCollection.i"
+%include "./interface/SBThreadPlan.i"
+%include "./interface/SBTrace.i"
+%include "./interface/SBTraceOptions.i"
+%include "./interface/SBType.i"
+%include "./interface/SBTypeCategory.i"
+%include "./interface/SBTypeEnumMember.i"
+%include "./interface/SBTypeFilter.i"
+%include "./interface/SBTypeFormat.i"
+%include "./interface/SBTypeNameSpecifier.i"
+%include "./interface/SBTypeSummary.i"
+%include "./interface/SBTypeSynthetic.i"
+%include "./interface/SBValue.i"
+%include "./interface/SBValueList.i"
+%include "./interface/SBVariablesOptions.i"
+%include "./interface/SBWatchpoint.i"
+%include "./interface/SBUnixSignals.i"
+
+%luacode%{
+lldb.SBDebugger.Initialize()
+%}
Index: lldb/scripts/CMakeLists.txt
===================================================================
--- lldb/scripts/CMakeLists.txt
+++ lldb/scripts/CMakeLists.txt
@@ -27,31 +27,59 @@
   set(DARWIN_EXTRAS "")
 endif()
 
-add_custom_command(
-  OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/LLDBWrapPython.cpp
-  OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/lldb.py
-  DEPENDS ${SWIG_SOURCES}
-  DEPENDS ${SWIG_INTERFACES}
-  DEPENDS ${SWIG_HEADERS}
-  COMMAND ${SWIG_EXECUTABLE} 
-      -c++
-      -shadow
-      -python
-      -features autodoc
-      -threads
-      -I${LLDB_SOURCE_DIR}/include
-      -I${CMAKE_CURRENT_SOURCE_DIR}
-      -D__STDC_LIMIT_MACROS
-      -D__STDC_CONSTANT_MACROS
-      ${DARWIN_EXTRAS}
-      -outdir ${CMAKE_CURRENT_BINARY_DIR}
-      -o ${CMAKE_CURRENT_BINARY_DIR}/LLDBWrapPython.cpp
-      ${LLDB_SOURCE_DIR}/scripts/lldb.swig
-  VERBATIM
-  COMMENT "Builds LLDB Python wrapper")
+if (NOT LLDB_DISABLE_PYTHON)
+  add_custom_command(
+    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/LLDBWrapPython.cpp
+    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/lldb.py
+    DEPENDS ${SWIG_SOURCES}
+    DEPENDS ${SWIG_INTERFACES}
+    DEPENDS ${SWIG_HEADERS}
+    COMMAND ${SWIG_EXECUTABLE}
+        -c++
+        -shadow
+        -python
+        -features autodoc
+        -threads
+        -I${LLDB_SOURCE_DIR}/include
+        -I${CMAKE_CURRENT_SOURCE_DIR}
+        -D__STDC_LIMIT_MACROS
+        -D__STDC_CONSTANT_MACROS
+        ${DARWIN_EXTRAS}
+        -outdir ${CMAKE_CURRENT_BINARY_DIR}
+        -o ${CMAKE_CURRENT_BINARY_DIR}/LLDBWrapPython.cpp
+        ${LLDB_SOURCE_DIR}/scripts/lldb.swig
+    VERBATIM
+    COMMENT "Builds LLDB Python wrapper")
 
-add_custom_target(swig_wrapper ALL DEPENDS
-  ${CMAKE_CURRENT_BINARY_DIR}/LLDBWrapPython.cpp
-  ${CMAKE_CURRENT_BINARY_DIR}/lldb.py
-)
+  add_custom_target(swig_wrapper ALL DEPENDS
+    ${CMAKE_CURRENT_BINARY_DIR}/LLDBWrapPython.cpp
+    ${CMAKE_CURRENT_BINARY_DIR}/lldb.py
+  )
+endif()
 
+if (NOT LLDB_DISABLE_LUA)
+  add_custom_command(
+    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/LLDBWrapLua.cpp
+    DEPENDS ${SWIG_SOURCES}
+    DEPENDS ${SWIG_INTERFACES}
+    DEPENDS ${SWIG_HEADERS}
+    COMMAND ${SWIG_EXECUTABLE}
+        -c++
+        -lua
+        -module lldb
+        -features autodoc
+        -I${LLDB_SOURCE_DIR}/include
+        -I${CMAKE_CURRENT_SOURCE_DIR}
+        -D__STDC_LIMIT_MACROS
+        -D__STDC_CONSTANT_MACROS
+        ${DARWIN_EXTRAS}
+        -outdir ${CMAKE_CURRENT_BINARY_DIR}
+        -o ${CMAKE_CURRENT_BINARY_DIR}/LLDBWrapLua.cpp
+        ${LLDB_SOURCE_DIR}/scripts/lldb_lua.swig
+    VERBATIM
+    COMMENT "Builds LLDB Lua wrapper")
+
+  add_custom_target(swig_wrapper_lua ALL DEPENDS
+    ${CMAKE_CURRENT_BINARY_DIR}/LLDBWrapLua.cpp
+  )
+endif()
Index: lldb/CMakeLists.txt
===================================================================
--- lldb/CMakeLists.txt
+++ lldb/CMakeLists.txt
@@ -50,10 +50,10 @@
   file(TO_CMAKE_PATH ${LLDB_PYTHON_DEFAULT_RELATIVE_PATH} LLDB_PYTHON_DEFAULT_RELATIVE_PATH)
   set(LLDB_PYTHON_RELATIVE_PATH ${LLDB_PYTHON_DEFAULT_RELATIVE_PATH}
     CACHE STRING "Path where Python modules are installed, relative to install prefix")
-
-  add_subdirectory(scripts)
 endif ()
 
+add_subdirectory(scripts)
+
 # We need the headers generated by instrinsics_gen before we can compile
 # any source file in LLDB as the imported Clang modules might include
 # some of these generated headers. This approach is copied from Clang's main
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to