sgraenitz created this revision.
sgraenitz added reviewers: JDevlieghere, aprantl, stella.stamenova, beanz,
zturner.
Herald added a subscriber: mgorny.
Simplify SWIG invocation and handling of generated files.
The `swig_wrapper` target can generate `LLDBWrapPython.cpp` and `lldb.py` in
its own binary directory, so we can get rid of a few global variables and their
logic. `$<TARGET_PROPERTY:swig_wrapper,BINARY_DIR>` can be used to refer to it.
For the moment we still need `LLDB_PYTHON_BINARY_DIR` (global property now) as
a workaround for `set_source_files_properties(), which apparently doesn't work
with generator expressions.
https://reviews.llvm.org/D55332
Files:
CMakeLists.txt
scripts/CMakeLists.txt
source/API/CMakeLists.txt
Index: source/API/CMakeLists.txt
===================================================================
--- source/API/CMakeLists.txt
+++ source/API/CMakeLists.txt
@@ -4,6 +4,15 @@
get_property(LLDB_ALL_PLUGINS GLOBAL PROPERTY LLDB_PLUGINS)
+if(NOT LLDB_DISABLE_PYTHON)
+ # We could get this path from $<TARGET_PROPERTY:swig_wrapper,BINARY_DIR>
+ # but set_source_files_properties() doesn't accept generator expressions.
+ get_property(lldb_python_dir GLOBAL PROPERTY LLDB_PYTHON_BINARY_DIR)
+
+ set(lldb_python_wrapper ${lldb_python_dir}/LLDBWrapPython.cpp)
+ set_source_files_properties(${lldb_python_wrapper} PROPERTIES GENERATED ON)
+endif()
+
add_lldb_library(liblldb SHARED
SBAddress.cpp
SBAttachInfo.cpp
@@ -72,7 +81,7 @@
SBWatchpoint.cpp
SBUnixSignals.cpp
SystemInitializerFull.cpp
- ${LLDB_WRAP_PYTHON}
+ ${lldb_python_wrapper}
LINK_LIBS
lldbBase
@@ -91,22 +100,22 @@
Support
)
-if(LLDB_WRAP_PYTHON)
+if(lldb_python_wrapper)
add_dependencies(liblldb swig_wrapper)
if (MSVC)
- set_property(SOURCE ${LLDB_WRAP_PYTHON} APPEND_STRING PROPERTY COMPILE_FLAGS " /W0")
+ set_property(SOURCE ${lldb_python_wrapper} APPEND_STRING PROPERTY COMPILE_FLAGS " /W0")
else()
- set_property(SOURCE ${LLDB_WRAP_PYTHON} APPEND_STRING PROPERTY COMPILE_FLAGS " -w")
+ set_property(SOURCE ${lldb_python_wrapper} APPEND_STRING PROPERTY COMPILE_FLAGS " -w")
endif()
if (CLANG_CL)
- set_property(SOURCE ${LLDB_WRAP_PYTHON} APPEND_STRING
+ set_property(SOURCE ${lldb_python_wrapper} APPEND_STRING
PROPERTY COMPILE_FLAGS " -Wno-unused-function")
endif()
if (LLVM_COMPILER_IS_GCC_COMPATIBLE AND
NOT "${CMAKE_SYSTEM_NAME}" MATCHES "Darwin")
- set_property(SOURCE ${LLDB_WRAP_PYTHON} APPEND_STRING
+ set_property(SOURCE ${lldb_python_wrapper} APPEND_STRING
PROPERTY COMPILE_FLAGS " -Wno-sequence-point -Wno-cast-qual")
endif ()
endif()
Index: scripts/CMakeLists.txt
===================================================================
--- scripts/CMakeLists.txt
+++ scripts/CMakeLists.txt
@@ -11,31 +11,14 @@
include(FindPythonInterp)
-if (NOT CMAKE_SYSTEM_NAME MATCHES "Windows")
- set(SWIG_PYTHON_DIR
- ${CMAKE_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX}/python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR})
-else()
- set(SWIG_PYTHON_DIR ${CMAKE_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX}/site-packages)
-endif()
-
-set(SWIG_INSTALL_DIR lib${LLVM_LIBDIR_SUFFIX})
-
-# Generating the LLDB framework correctly is a bit complicated because the
-# framework depends on the swig output.
if(LLDB_BUILD_FRAMEWORK)
set(framework_arg --framework --target-platform Darwin)
- set(SWIG_PYTHON_DIR
- ${LLDB_PYTHON_TARGET_DIR}/${LLDB_FRAMEWORK_RESOURCE_DIR}/Python)
- set(SWIG_INSTALL_DIR
- ${LLDB_FRAMEWORK_INSTALL_DIR}/${LLDB_FRAMEWORK_RESOURCE_DIR})
endif()
-get_filename_component(CFGBLDDIR ${LLDB_WRAP_PYTHON} DIRECTORY)
-
find_package(SWIG REQUIRED)
add_custom_command(
- OUTPUT ${LLDB_WRAP_PYTHON}
- OUTPUT ${LLDB_PYTHON_TARGET_DIR}/lldb.py
+ OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/LLDBWrapPython.cpp
+ OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/lldb.py
DEPENDS ${SWIG_SOURCES}
DEPENDS ${SWIG_INTERFACES}
DEPENDS ${SWIG_HEADERS}
@@ -44,19 +27,36 @@
COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/prepare_bindings.py
${framework_arg}
--srcRoot=${LLDB_SOURCE_DIR}
- --targetDir=${LLDB_PYTHON_TARGET_DIR}
- --cfgBldDir=${CFGBLDDIR}
+ --targetDir=${CMAKE_CURRENT_BINARY_DIR}
+ --cfgBldDir=${CMAKE_CURRENT_BINARY_DIR}
--prefix=${CMAKE_BINARY_DIR}
--swigExecutable=${SWIG_EXECUTABLE}
VERBATIM
COMMENT "Python script building LLDB Python wrapper")
-add_custom_target(swig_wrapper ALL DEPENDS ${LLDB_WRAP_PYTHON})
-set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/lldb.py PROPERTIES GENERATED 1)
+add_custom_target(swig_wrapper ALL DEPENDS
+ ${CMAKE_CURRENT_BINARY_DIR}/LLDBWrapPython.cpp
+ ${CMAKE_CURRENT_BINARY_DIR}/lldb.py
+)
+
+# For the liblldb target we need to mark LLDBWrapPython.cpp generated. Doing it
+# here has no effect as set_source_files_properties are visible only to targets
+# added in the same directory.
+set_property(GLOBAL PROPERTY LLDB_PYTHON_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
+if(NOT LLDB_BUILD_FRAMEWORK)
+ if(CMAKE_SYSTEM_NAME MATCHES "Windows")
+ set(swig_python_subdir site-packages)
+ else()
+ set(swig_python_subdir python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR})
+ endif()
-# Install the LLDB python module
-install(DIRECTORY ${SWIG_PYTHON_DIR} DESTINATION ${SWIG_INSTALL_DIR})
+ set(SWIG_PYTHON_DIR ${LLVM_LIBRARY_OUTPUT_INTDIR}/${swig_python_subdir})
+ set(SWIG_INSTALL_DIR lib${LLVM_LIBDIR_SUFFIX})
+
+ # Install the LLDB python module
+ install(DIRECTORY ${SWIG_PYTHON_DIR} DESTINATION ${SWIG_INSTALL_DIR})
+endif()
# build Python modules
add_subdirectory(Python/modules)
Index: CMakeLists.txt
===================================================================
--- CMakeLists.txt
+++ CMakeLists.txt
@@ -129,18 +129,17 @@
# to liblldb.so for the Python API(hardlink on Windows)
add_custom_target(finish_swig ALL
COMMAND
- ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/scripts/finishSwigWrapperClasses.py
+ ${PYTHON_EXECUTABLE} ${LLDB_SOURCE_DIR}/scripts/finishSwigWrapperClasses.py
--srcRoot=${LLDB_SOURCE_DIR}
- --targetDir=${LLDB_PYTHON_TARGET_DIR}
- --cfgBldDir=${LLDB_PYTHON_TARGET_DIR}
+ --targetDir=$<TARGET_PROPERTY:liblldb,LIBRARY_OUTPUT_DIRECTORY>
+ --cfgBldDir=$<TARGET_PROPERTY:swig_wrapper,BINARY_DIR>
--prefix=${CMAKE_BINARY_DIR}
--cmakeBuildConfiguration=${CMAKE_CFG_INTDIR}
--lldbLibDir=lib${LLVM_LIBDIR_SUFFIX}
${use_python_wrapper_from_src_dir}
${use_six_py_from_system}
VERBATIM
- DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/scripts/finishSwigWrapperClasses.py
- DEPENDS ${LLDB_PYTHON_TARGET_DIR}/lldb.py
+ DEPENDS ${LLDB_SOURCE_DIR}/scripts/finishSwigWrapperClasses.py
COMMENT "Python script sym-linking LLDB Python API")
_______________________________________________
lldb-commits mailing list
[email protected]
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits