d-millar updated this revision to Diff 378282.
d-millar added a comment.
Another (hopefully cleaner) attempt. If the addition of SBTraceOptions in
lldb/source/API/CMakelists.txt conflicts, please feel free to delete it.
Repository:
rLLDB LLDB
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D111409/new/
https://reviews.llvm.org/D111409
Files:
lldb/CMakeLists.txt
lldb/bindings/CMakeLists.txt
lldb/bindings/java/CMakeLists.txt
lldb/bindings/java/java-typemaps.swig
lldb/bindings/java/java.swig
lldb/cmake/modules/FindJavaAndSwig.cmake
lldb/include/lldb/Host/Config.h.cmake
lldb/source/API/CMakeLists.txt
lldb/source/API/SBDebugger.cpp
lldb/source/API/liblldb-private.exports
lldb/source/API/liblldb.exports
Index: lldb/source/API/liblldb.exports
===================================================================
--- lldb/source/API/liblldb.exports
+++ lldb/source/API/liblldb.exports
@@ -1,4 +1,7 @@
_ZN4lldb*
_ZNK4lldb*
+_ZN12lldb*
+_ZNK12lldb*
init_lld*
PyInit__lldb*
+Java*
Index: lldb/source/API/liblldb-private.exports
===================================================================
--- lldb/source/API/liblldb-private.exports
+++ lldb/source/API/liblldb-private.exports
@@ -4,3 +4,4 @@
_ZNK12lldb_private*
init_lld*
PyInit__lldb*
+Java*
Index: lldb/source/API/SBDebugger.cpp
===================================================================
--- lldb/source/API/SBDebugger.cpp
+++ lldb/source/API/SBDebugger.cpp
@@ -736,6 +736,9 @@
AddBoolConfigEntry(
*config_up, "lua", LLDB_ENABLE_LUA,
"A boolean value that indicates if lua support is enabled in LLDB");
+ AddBoolConfigEntry(
+ *config_up, "java", LLDB_ENABLE_JAVA,
+ "A boolean value that indicates if java support is enabled in LLDB");
AddLLVMTargets(*config_up);
SBStructuredData data;
Index: lldb/source/API/CMakeLists.txt
===================================================================
--- lldb/source/API/CMakeLists.txt
+++ lldb/source/API/CMakeLists.txt
@@ -19,6 +19,11 @@
set(lldb_lua_wrapper ${lua_bindings_dir}/LLDBWrapLua.cpp)
endif()
+if(LLDB_ENABLE_JAVA)
+ get_target_property(java_bindings_dir swig_wrapper_java BINARY_DIR)
+ set(lldb_java_wrapper ${java_bindings_dir}/LLDBWrapJava.cpp)
+endif()
+
add_lldb_library(liblldb SHARED ${option_framework}
SBAddress.cpp
SBAttachInfo.cpp
@@ -76,6 +81,7 @@
SBThreadCollection.cpp
SBThreadPlan.cpp
SBTrace.cpp
+ SBTraceOptions.cpp
SBType.cpp
SBTypeCategory.cpp
SBTypeEnumMember.cpp
@@ -92,6 +98,7 @@
SystemInitializerFull.cpp
${lldb_python_wrapper}
${lldb_lua_wrapper}
+ ${lldb_java_wrapper}
LINK_LIBS
lldbBase
@@ -160,6 +167,21 @@
set_source_files_properties(${lldb_lua_wrapper} PROPERTIES GENERATED ON)
endif()
+if(LLDB_ENABLE_JAVA)
+ add_dependencies(liblldb swig_wrapper_java)
+ target_include_directories(liblldb PRIVATE ${JAVA_INCLUDE_DIR})
+ target_include_directories(liblldb PRIVATE ${JAVA_INCLUDE_DIR}/darwin)
+
+ if (MSVC)
+ set_property(SOURCE ${lldb_java_wrapper} APPEND_STRING PROPERTY COMPILE_FLAGS " /W0")
+ else()
+ set_property(SOURCE ${lldb_java_wrapper} APPEND_STRING PROPERTY COMPILE_FLAGS " ")
+ endif()
+
+ set_source_files_properties(${lldb_java_wrapper} PROPERTIES GENERATED ON)
+endif()
+
+
set_target_properties(liblldb
PROPERTIES
VERSION ${LLDB_VERSION}
@@ -181,7 +203,13 @@
set_target_properties(liblldb_exports PROPERTIES FOLDER "lldb misc")
endif()
-if (NOT MSVC)
+if (MSVC)
+ # Only MSVC has the ABI compatibility problem and avoids using FindPythonLibs,
+ # so only it needs to explicitly link against ${Python3_LIBRARIES}
+ if (LLDB_ENABLE_PYTHON)
+ target_link_libraries(liblldb PRIVATE ${Python3_LIBRARIES})
+ endif()
+else()
set_target_properties(liblldb
PROPERTIES
OUTPUT_NAME lldb
Index: lldb/include/lldb/Host/Config.h.cmake
===================================================================
--- lldb/include/lldb/Host/Config.h.cmake
+++ lldb/include/lldb/Host/Config.h.cmake
@@ -41,6 +41,8 @@
#cmakedefine01 LLDB_ENABLE_LIBXML2
+#cmakedefine01 LLDB_ENABLE_JAVA
+
#cmakedefine01 LLDB_ENABLE_LUA
#cmakedefine01 LLDB_ENABLE_PYTHON
Index: lldb/cmake/modules/FindJavaAndSwig.cmake
===================================================================
--- /dev/null
+++ lldb/cmake/modules/FindJavaAndSwig.cmake
@@ -0,0 +1,32 @@
+#.rst:
+# FindJavaAndSwig
+# --------------
+#
+# Find Java and SWIG as a whole.
+
+#if(JAVA_LIBRARIES AND JAVA_INCLUDE_DIR AND SWIG_EXECUTABLE)
+if(SWIG_EXECUTABLE)
+ set(JAVAANDSWIG_FOUND TRUE)
+else()
+ find_package(SWIG 2.0)
+ if (SWIG_FOUND)
+ find_package(Java 11.0)
+ if(JAVA_FOUND AND SWIG_FOUND)
+ mark_as_advanced(
+ JAVA_LIBRARIES
+ JAVA_INCLUDE_DIR
+ SWIG_EXECUTABLE)
+ endif()
+ else()
+ message(STATUS "SWIG 2 or later is required for Java support in LLDB but could not be found")
+ endif()
+
+ include(FindPackageHandleStandardArgs)
+ find_package_handle_standard_args(JavaAndSwig
+ FOUND_VAR
+ JAVAANDSWIG_FOUND
+ REQUIRED_VARS
+ JAVA_LIBRARIES
+ JAVA_INCLUDE_DIR
+ SWIG_EXECUTABLE)
+endif()
Index: lldb/bindings/java/java.swig
===================================================================
--- /dev/null
+++ lldb/bindings/java/java.swig
@@ -0,0 +1,25 @@
+/* ###
+ * IP: Apache License 2.0 with LLVM Exceptions
+ */
+/*
+ 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.
+*/
+
+%module lldb
+
+%include <std_string.i>
+%include "java-typemaps.swig"
+%include "macros.swig"
+%include "headers.swig"
+
+%{
+using namespace lldb_private;
+using namespace lldb;
+%}
+
+%include "interfaces.swig"
+//%include "lua-wrapper.swig"
Index: lldb/bindings/java/java-typemaps.swig
===================================================================
--- /dev/null
+++ lldb/bindings/java/java-typemaps.swig
@@ -0,0 +1,21 @@
+/* ###
+ * IP: Apache License 2.0 with LLVM Exceptions
+ */
+%include <typemaps.i>
+%include <carrays.i>
+%include <various.i>
+
+%typemap(javabase) ByteArray "SWIGTYPE_p_void"
+%typemap(javabody) ByteArray %{
+ private long swigCPtr; // Minor bodge to work around private variable in parent
+ private boolean swigCMemOwn;
+ public $javaclassname(long cPtr, boolean cMemoryOwn) {
+ super(cPtr, cMemoryOwn);
+ this.swigCPtr = SWIGTYPE_p_void.getCPtr(this);
+ swigCMemOwn = cMemoryOwn;
+ }
+%}
+
+%array_class(jbyte, ByteArray);
+
+%apply char **STRING_ARRAY { char ** }
Index: lldb/bindings/java/CMakeLists.txt
===================================================================
--- /dev/null
+++ lldb/bindings/java/CMakeLists.txt
@@ -0,0 +1,20 @@
+add_custom_command(
+ OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/LLDBWrapJava.cpp
+ DEPENDS ${SWIG_SOURCES}
+ DEPENDS ${SWIG_INTERFACES}
+ DEPENDS ${SWIG_HEADERS}
+ COMMAND ${SWIG_EXECUTABLE}
+ ${SWIG_COMMON_FLAGS}
+ -I${CMAKE_CURRENT_SOURCE_DIR}
+ -java
+ -package SWIG
+ -c++
+ -outdir ${CMAKE_CURRENT_BINARY_DIR}
+ -o ${CMAKE_CURRENT_BINARY_DIR}/LLDBWrapJava.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/java.swig
+ VERBATIM
+ COMMENT "Building LLDB Java wrapper")
+
+add_custom_target(swig_wrapper_java ALL DEPENDS
+ ${CMAKE_CURRENT_BINARY_DIR}/LLDBWrapJava.cpp
+)
Index: lldb/bindings/CMakeLists.txt
===================================================================
--- lldb/bindings/CMakeLists.txt
+++ lldb/bindings/CMakeLists.txt
@@ -38,3 +38,8 @@
if (LLDB_ENABLE_LUA)
add_subdirectory(lua)
endif()
+
+if (LLDB_ENABLE_JAVA)
+ add_subdirectory(java)
+endif()
+
Index: lldb/CMakeLists.txt
===================================================================
--- lldb/CMakeLists.txt
+++ lldb/CMakeLists.txt
@@ -51,7 +51,7 @@
CACHE STRING "Path where Python modules are installed, relative to install prefix")
endif ()
-if (LLDB_ENABLE_PYTHON OR LLDB_ENABLE_LUA)
+if (LLDB_ENABLE_PYTHON OR LLDB_ENABLE_LUA OR LLDB_ENABLE_JAVA)
add_subdirectory(bindings)
endif ()
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits