diff options
| author | Mark Rowe <mark@vector35.com> | 2025-07-01 22:56:05 -0700 |
|---|---|---|
| committer | Mark Rowe <mark@vector35.com> | 2025-07-30 17:05:10 -0700 |
| commit | 3e2ace5e8d127d7995a94f1b296cad9152cb7274 (patch) | |
| tree | 3fda150bff7944cc90323337818959467938be6d /python/CMakeLists.txt | |
| parent | 42878c46ace7ee6d267d26ee87b4d4015b4e4b2b (diff) | |
Add dependency tracking to the Python code generation
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.
Diffstat (limited to 'python/CMakeLists.txt')
| -rw-r--r-- | python/CMakeLists.txt | 29 |
1 files changed, 9 insertions, 20 deletions
diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt index 4e147d00..d8f733d0 100644 --- a/python/CMakeLists.txt +++ b/python/CMakeLists.txt @@ -31,25 +31,14 @@ if(BN_INTERNAL_BUILD) COMMAND ${CMAKE_COMMAND} -E copy ${BN_CORE_OUTPUT_DIR}/binaryninjacore.dll ${PROJECT_BINARY_DIR}/) endif() - # Generate script to copy python sources with the correct paths - file(GENERATE OUTPUT ${PROJECT_BINARY_DIR}/copy_python_sources.cmake - CONTENT " - foreach(PYTHON_SOURCE ${PYTHON_SOURCES}) - cmake_path(RELATIVE_PATH PYTHON_SOURCE BASE_DIRECTORY ${PROJECT_SOURCE_DIR} OUTPUT_VARIABLE OUTPUT_SUBPATH) - cmake_path(REMOVE_FILENAME OUTPUT_SUBPATH) - file(COPY $\{PYTHON_SOURCE\} DESTINATION ${BN_RESOURCE_DIR}/python/binaryninja/$\{OUTPUT_SUBPATH\}) - endforeach() - " - ) - - add_custom_target(generator_copy ALL - BYPRODUCTS ${PROJECT_SOURCE_DIR}/_binaryninjacore.py ${PROJECT_SOURCE_DIR}/enums.py - DEPENDS ${PYTHON_SOURCES} ${PROJECT_SOURCE_DIR}/../binaryninjacore.h $<TARGET_FILE:generator> - COMMENT "Copying API Python sources" - COMMAND ${CMAKE_COMMAND} -E make_directory ${BN_RESOURCE_DIR}/python/binaryninja/ - COMMAND ${CMAKE_COMMAND} -E env ASAN_OPTIONS=detect_leaks=0 $<TARGET_FILE:generator> ${PROJECT_SOURCE_DIR}/../binaryninjacore.h ${PROJECT_SOURCE_DIR}/_binaryninjacore.py ${PROJECT_SOURCE_DIR}/enums.py - COMMAND ${CMAKE_COMMAND} -P ${PROJECT_BINARY_DIR}/copy_python_sources.cmake - COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_SOURCE_DIR}/_binaryninjacore.py ${BN_RESOURCE_DIR}/python/binaryninja/ - COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_SOURCE_DIR}/enums.py ${BN_RESOURCE_DIR}/python/binaryninja/ + generate_python_bindings( + TARGET_NAME generator_copy + DISPLAY_NAME "Binary Ninja" + GENERATOR_TARGET generator + HEADER_FILE ${PROJECT_SOURCE_DIR}/../binaryninjacore.h + OUTPUT_DIRECTORY ${BN_RESOURCE_DIR}/python/binaryninja + CORE_OUTPUT_FILE _binaryninjacore.py + ENUMS_OUTPUT_FILE enums.py + PYTHON_SOURCES ${PYTHON_SOURCES} ) endif() |
