# # This file is distributed under the MIT License. See LICENSE.md for details. # # Declares a python module as a target Named arguments: - TARGET_NAME: the name # of the CMake target to be created - MODULE_FILES: list of relative paths of # the python module sources - MODULE_GENERATED_FILES: list of relative paths of # the python module generated sources The module sources will be copied to the # build directory (in the lib/python folder) and installed in /lib/python. function(python_module) set(options) set(oneValueArgs TARGET_NAME) set(multiValueArgs MODULE_FILES MODULE_GENERATED_FILES) cmake_parse_arguments(PYTHON_MODULE "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) foreach(MODULE_FILE ${PYTHON_MODULE_MODULE_FILES}) configure_file( "${MODULE_FILE}" "${CMAKE_BINARY_DIR}/${PYTHON_INSTALL_PATH}/${MODULE_FILE}" COPYONLY) endforeach() foreach(MODULE_FILE ${PYTHON_MODULE_MODULE_FILES} ${PYTHON_MODULE_MODULE_GENERATED_FILES}) # Copy module in the root at install time get_filename_component(MODULE_FILE_DIR "${MODULE_FILE}" DIRECTORY) install( FILES "${CMAKE_BINARY_DIR}/${PYTHON_INSTALL_PATH}/${MODULE_FILE}" DESTINATION "${CMAKE_INSTALL_PREFIX}/${PYTHON_INSTALL_PATH}/${MODULE_FILE_DIR}") endforeach() add_custom_target( "${PYTHON_MODULE_TARGET_NAME}" DEPENDS ${PYTHON_MODULE_MODULE_FILES} ${PYTHON_MODULE_MODULE_GENERATED_FILES}) endfunction() # # Install scripts # set(SCRIPTS "scripts/revng-merge-dynamic" "scripts/revng-model-compare" "scripts/revng-model-to-json") foreach(SCRIPT ${SCRIPTS}) get_filename_component(SCRIPT_FILENAME "${SCRIPT}" NAME) # revng script needs configure_file *without* COPYONLY configure_file("${SCRIPT}" "${CMAKE_BINARY_DIR}/libexec/revng/${SCRIPT_FILENAME}") install(PROGRAMS "${CMAKE_BINARY_DIR}/libexec/revng/${SCRIPT_FILENAME}" DESTINATION libexec/revng/) endforeach() configure_file("scripts/revng" "${CMAKE_BINARY_DIR}/bin/revng") install(PROGRAMS "${CMAKE_BINARY_DIR}/bin/revng" DESTINATION bin/) # # Install revng.model (including autogenerated classes) # set(PYTHON_MODEL_FILES revng/model/__init__.py revng/model/_util.py revng/model/metaaddress.py revng/model/v1/__init__.py revng/model/v1/external.py) python_module(TARGET_NAME python-model MODULE_FILES ${PYTHON_MODEL_FILES} MODULE_GENERATED_FILES "${PYTHON_GENERATED_MODEL_PATH}") # # Install revng.tupletree # set(PYTHON_TUPLETREE_FILES revng/tupletree.py) python_module(TARGET_NAME python-tupletree MODULE_FILES ${PYTHON_TUPLETREE_FILES}) set(MERGE_DYNAMIC_MODULE_FILES revng/cli/merge_dynamic/__init__.py revng/cli/merge_dynamic/log.py revng/cli/merge_dynamic/merge_dynamic.py revng/cli/merge_dynamic/parsed_elf.py revng/cli/merge_dynamic/util.py) python_module(TARGET_NAME revng-merge-dynamic MODULE_FILES ${MERGE_DYNAMIC_MODULE_FILES}) # # Install revng.model_dump # set(DUMP_MODEL_MODULE_FILES "revng/cli/model_dump/__init__.py" "revng/cli/model_dump/__main__.py") python_module(TARGET_NAME revng-dump-model MODULE_FILES ${DUMP_MODEL_MODULE_FILES}) # # Install revng.cli # set(REVNG_CLI_MODULE_FILES revng/cli/commands_registry.py revng/cli/__init__.py revng/cli/revng.py revng/cli/support.py) python_module(TARGET_NAME revng-python-cli MODULE_FILES ${REVNG_CLI_MODULE_FILES}) # # Install revng.cli._commands # set(REVNG_CLI_COMMANDS_MODULE_FILES revng/cli/_commands/translate.py revng/cli/_commands/llvm_pipeline.py revng/cli/_commands/lift.py revng/cli/_commands/daemon_self_test.py revng/cli/_commands/opt.py revng/cli/_commands/pipeline_tools.py revng/cli/_commands/override_by_name.py revng/cli/_commands/daemon.py revng/cli/_commands/hard_purge.py revng/cli/_commands/import_idb.py revng/cli/_commands/idb_converter.py revng/cli/_commands/trace_run.py) python_module(TARGET_NAME revng-python-cli-commands MODULE_FILES ${REVNG_CLI_COMMANDS_MODULE_FILES}) set(REVNG_CLI_COMMANDS_PTML_MODULE_FILES revng/cli/_commands/ptml/text.py revng/cli/_commands/ptml/common.py revng/cli/_commands/ptml/__init__.py) python_module(TARGET_NAME revng-python-cli-commands-ptml MODULE_FILES ${REVNG_CLI_COMMANDS_PTML_MODULE_FILES}) set(REVNG_CLI_COMMANDS_FETCHDEBUGINFO_MODULE_FILES revng/cli/_commands/fetch_debuginfo/pe.py revng/cli/_commands/fetch_debuginfo/elf.py revng/cli/_commands/fetch_debuginfo/common.py revng/cli/_commands/fetch_debuginfo/__init__.py) python_module(TARGET_NAME revng-python-cli-commands-fetchdebuginfo MODULE_FILES ${REVNG_CLI_COMMANDS_FETCHDEBUGINFO_MODULE_FILES}) # # Install revng.api # set(REVNG_API_MODULE_FILES revng/api/__init__.py revng/api/_capi.py revng/api/analysis.py revng/api/container.py revng/api/errors.py revng/api/exceptions.py revng/api/invalidations.py revng/api/kind.py revng/api/manager.py revng/api/rank.py revng/api/step.py revng/api/string_map.py revng/api/target.py revng/api/utils.py) python_module(TARGET_NAME revng-python-api MODULE_FILES ${REVNG_API_MODULE_FILES}) # Also copy PipelineC headers in the build directory so revng.api can use them # from there set(PIPELINE_C_HEADERS_SOURCE_DIR "${CMAKE_SOURCE_DIR}/include/revng/PipelineC") set(PIPELINE_C_HEADERS_BUILD_DIR "${CMAKE_BINARY_DIR}/include/revng/PipelineC") set(REQUIRED_PIPELINE_C_HEADERS ForwardDeclarationsC.h Prototypes.h) file(MAKE_DIRECTORY "${PIPELINE_C_HEADERS_BUILD_DIR}") foreach(HEADER ${REQUIRED_PIPELINE_C_HEADERS}) configure_file("${PIPELINE_C_HEADERS_SOURCE_DIR}/${HEADER}" "${PIPELINE_C_HEADERS_BUILD_DIR}/${HEADER}" COPYONLY) endforeach() # # Install revng.daemon # set(REVNG_DAEMON_MODULE_FILES revng/daemon/__init__.py revng/daemon/demo_webpage.py revng/daemon/multiqueue.py revng/daemon/event_manager.py revng/daemon/schema_generator.py revng/daemon/schema.graphql.tpl revng/daemon/static_handlers.py revng/daemon/util.py revng/daemon/templates/base.html revng/daemon/templates/index.html) python_module(TARGET_NAME revng-python-daemon MODULE_FILES ${REVNG_DAEMON_MODULE_FILES}) # # Install revng.daemon # set(REVNG_SUPPORT_MODULE_FILES revng/support/__init__.py revng/support/elf.py revng/support/collect.py) python_module(TARGET_NAME revng-python-support MODULE_FILES ${REVNG_SUPPORT_MODULE_FILES})