Skip to content

Commit ed50c40

Browse files
authored
Add dependency tracking to the Python code generation (#772)
This ensures that the Python source files are only generated and copied into the output directory if inputs have changed, rather than being done unconditionally. Builds on the similar change made in binaryninja-api in Vector35/binaryninja-api@3e2ace5
1 parent 217c214 commit ed50c40

1 file changed

Lines changed: 19 additions & 16 deletions

File tree

api/python/CMakeLists.txt

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,15 @@ cmake_minimum_required(VERSION 3.15 FATAL_ERROR)
22

33
project(debugger-python-api)
44

5-
file(GLOB PYTHON_SOURCES ${PROJECT_SOURCE_DIR}/*.py)
5+
if(BN_API_PATH)
6+
include(${BN_API_PATH}/cmake/PythonBindings.cmake)
7+
else()
8+
include(${CMAKE_SOURCE_DIR}/api/cmake/PythonBindings.cmake)
9+
endif()
10+
11+
file(GLOB PYTHON_SOURCES CONFIGURE_DEPENDS ${PROJECT_SOURCE_DIR}/*.py)
612
list(REMOVE_ITEM PYTHON_SOURCES ${PROJECT_SOURCE_DIR}/_debuggercore.py)
7-
list(REMOVE_ITEM PYTHON_SOURCES ${PROJECT_SOURCE_DIR}/enums.py)
13+
list(REMOVE_ITEM PYTHON_SOURCES ${PROJECT_SOURCE_DIR}/debugger_enums.py)
814

915
add_executable(debugger_generator
1016
${PROJECT_SOURCE_DIR}/generator.cpp)
@@ -32,18 +38,15 @@ if(WIN32)
3238
endif()
3339
endif()
3440

35-
add_custom_target(debugger_generator_copy ALL
36-
BYPRODUCTS ${PROJECT_SOURCE_DIR}/_debuggercore.py ${PROJECT_SOURCE_DIR}/enums.py
37-
DEPENDS ${PYTHON_SOURCES} ${PROJECT_SOURCE_DIR}/../ffi.h $<TARGET_FILE:debugger_generator>
38-
COMMAND ${CMAKE_COMMAND} -E echo "Copying Debugger Python Sources"
39-
COMMAND ${CMAKE_COMMAND} -E make_directory ${PYTHON_OUTPUT_DIRECTORY}
40-
COMMAND ${CMAKE_COMMAND} -E env ASAN_OPTIONS=detect_leaks=0 $<TARGET_FILE:debugger_generator>
41-
${PROJECT_SOURCE_DIR}/../ffi.h
42-
${PROJECT_SOURCE_DIR}/_debuggercore.py
43-
${PROJECT_SOURCE_DIR}/_debuggercore_template.py
44-
${PROJECT_SOURCE_DIR}/debugger_enums.py
45-
46-
COMMAND ${CMAKE_COMMAND} -E copy ${PYTHON_SOURCES} ${PYTHON_OUTPUT_DIRECTORY}
47-
COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_SOURCE_DIR}/_debuggercore.py ${PYTHON_OUTPUT_DIRECTORY}
48-
COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_SOURCE_DIR}/debugger_enums.py ${PYTHON_OUTPUT_DIRECTORY})
41+
generate_python_bindings(
42+
TARGET_NAME debugger_generator_copy
43+
DISPLAY_NAME "Debugger"
44+
GENERATOR_TARGET debugger_generator
45+
HEADER_FILE ${PROJECT_SOURCE_DIR}/../ffi.h
46+
TEMPLATE_FILE ${PROJECT_SOURCE_DIR}/_debuggercore_template.py
47+
OUTPUT_DIRECTORY ${PYTHON_OUTPUT_DIRECTORY}
48+
CORE_OUTPUT_FILE _debuggercore.py
49+
ENUMS_OUTPUT_FILE debugger_enums.py
50+
PYTHON_SOURCES ${PYTHON_SOURCES}
51+
)
4952

0 commit comments

Comments
 (0)