mirror of
https://github.com/revng/revng
synced 2026-06-21 14:07:57 +00:00
182 lines
5.8 KiB
CMake
182 lines
5.8 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}/lib/python/${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}/lib/python/${MODULE_FILE}"
|
|
DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/python/${MODULE_FILE_DIR}")
|
|
endforeach()
|
|
add_custom_target(
|
|
"${PYTHON_MODULE_TARGET_NAME}"
|
|
DEPENDS ${PYTHON_MODULE_MODULE_FILES}
|
|
${PYTHON_MODULE_MODULE_GENERATED_FILES})
|
|
endfunction()
|
|
|
|
#
|
|
# Check that required python dependencies are available
|
|
#
|
|
file(STRINGS "requirements.txt" REQUIREMENTS REGEX "^[^#].+$")
|
|
check_python_requirements(${REQUIREMENTS})
|
|
|
|
#
|
|
# 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.support
|
|
#
|
|
python_module(TARGET_NAME revng-python-support MODULE_FILES
|
|
"revng/cli/support.py")
|
|
|
|
#
|
|
# Install revng.cli.translate
|
|
#
|
|
python_module(TARGET_NAME revng-python-translate MODULE_FILES
|
|
"revng/cli/translate.py")
|
|
|
|
#
|
|
# Install revng.cli.lift
|
|
#
|
|
python_module(TARGET_NAME revng-python-lift MODULE_FILES "revng/cli/lift.py")
|
|
|
|
#
|
|
# Install revng.cli.opt
|
|
#
|
|
python_module(TARGET_NAME revng-python-opt MODULE_FILES "revng/cli/opt.py")
|
|
|
|
#
|
|
# Install revng.cli.revng
|
|
#
|
|
python_module(TARGET_NAME revng-python-revng MODULE_FILES "revng/cli/revng.py")
|
|
|
|
#
|
|
# Install revng.cli.revng
|
|
#
|
|
python_module(TARGET_NAME revng-python-pipeline MODULE_FILES
|
|
"revng/cli/pipeline.py")
|
|
|
|
#
|
|
# Install revng.cli.commands_registry
|
|
#
|
|
python_module(TARGET_NAME revng-python-commands_registry MODULE_FILES
|
|
"revng/cli/commands_registry.py")
|
|
|
|
#
|
|
# Install revng.cli.llvm_pipeline
|
|
#
|
|
python_module(TARGET_NAME revng-python-llvm_pipeline MODULE_FILES
|
|
"revng/cli/llvm_pipeline.py")
|
|
|
|
#
|
|
# Install revng.cli.daemon
|
|
#
|
|
python_module(TARGET_NAME revng-python-cmd-daemon MODULE_FILES
|
|
"revng/cli/daemon.py")
|
|
|
|
#
|
|
# Install revng.api
|
|
#
|
|
set(REVNG_API_MODULE_FILES
|
|
revng/api/__init__.py
|
|
revng/api/_capi.py
|
|
revng/api/container.py
|
|
revng/api/exceptions.py
|
|
revng/api/kind.py
|
|
revng/api/manager.py
|
|
revng/api/rank.py
|
|
revng/api/step.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/api.py
|
|
revng/daemon/demo_webpage.py
|
|
revng/daemon/schema.py
|
|
revng/daemon/schema.graphql.tpl
|
|
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})
|