Files
revng-revng/python/CMakeLists.txt
Giacomo Vercesi 13ba286a9a Drop hard-coded analyses list
Remove any use of hard-coded analyses lists, relying on user interaction
(e.g. command-line arguments) to have it instead.
2023-08-23 17:45:36 +02:00

173 lines
6.3 KiB
CMake

#
# 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
#
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/_commands/merge_dynamic/__init__.py
revng/cli/_commands/merge_dynamic/log.py
revng/cli/_commands/merge_dynamic/merge_dynamic.py
revng/cli/_commands/merge_dynamic/parsed_elf.py
revng/cli/_commands/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/_commands/model_to_json/__init__.py"
"revng/cli/_commands/model_to_json/remap.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/idb_converter.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/trace_run.py revng/cli/_commands/model_compare.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})
set(REVNG_CLI_COMMANDS_GRAPHQL_MODULE_FILES
revng/cli/_commands/graphql/__init__.py
revng/cli/_commands/graphql/runner.py
revng/cli/_commands/graphql/daemon_handler.py)
python_module(TARGET_NAME revng-python-cli-commands-graphql MODULE_FILES
${REVNG_CLI_COMMANDS_GRAPHQL_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/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)
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})