mirror of
https://github.com/revng/revng
synced 2026-06-21 14:07:57 +00:00
70f7337f28
In the future we will need to use GraphQL subscriptions. This is done via websockets and is supported in Ariadne. However this support is limited to ASGI frameworks, which Flask isn't a part of. Startlette is a direct depencency of Ariadne, and all of Ariadne's features are fully integrated with Starlette, so the switch allows to drop some Flask integration cruft and streamline the revng.daemon package. Starlette does not have a built-in development server, instead Hypercorn, which is an ASGI-compliant HTTP server, is used in place of Flask's Werkzeug/Gunicorn for both the development and production server roles.
187 lines
5.9 KiB
CMake
187 lines
5.9 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.override_by_name
|
|
#
|
|
python_module(TARGET_NAME revng-python-override_by_name MODULE_FILES
|
|
"revng/cli/override_by_name.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/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})
|