mirror of
https://github.com/revng/revng
synced 2026-06-21 14:07:57 +00:00
49b2c523ab
Add the `revng merge llvm` command which allows linking multiple LLVM IR modules together into a single module.
622 lines
22 KiB
CMake
622 lines
22 KiB
CMake
#
|
|
# This file is distributed under the MIT License. See LICENSE.md for details.
|
|
#
|
|
|
|
set(PYTHON_WHL_VERSION_PREFIX 0.1)
|
|
execute_process(
|
|
COMMAND
|
|
python3 -c
|
|
"import time; print(f\"${PYTHON_WHL_VERSION_PREFIX}.{int(time.time())}\", end='')"
|
|
OUTPUT_VARIABLE PYTHON_WHL_VERSION)
|
|
|
|
# ~~~
|
|
# Declares a python module as a target
|
|
# Named arguments:
|
|
# - TARGET_NAME: the name of the CMake target to be created
|
|
# - WHEEL: the name of the wheel where the files will be included into
|
|
# - MODULE_INIT: if specified, this points to the top-level __init__.py file of
|
|
# the package. This needs to be specified separately because
|
|
# CMake will replaces placeholders such as '@VERSION@' with the
|
|
# correct value
|
|
# - 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
|
|
# ~~~
|
|
function(python_module)
|
|
set(options)
|
|
set(oneValueArgs TARGET_NAME WHEEL MODULE_INIT)
|
|
set(multiValueArgs MODULE_FILES MODULE_GENERATED_FILES COPY_FILES)
|
|
cmake_parse_arguments(PYTHON_MODULE "${options}" "${oneValueArgs}"
|
|
"${multiValueArgs}" ${ARGN})
|
|
|
|
if(NOT "${PYTHON_MODULE_MODULE_INIT}" STREQUAL "")
|
|
execute_process(
|
|
COMMAND sed "s;@VERSION@;${PYTHON_WHL_VERSION};"
|
|
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
|
|
INPUT_FILE "${PYTHON_MODULE_MODULE_INIT}"
|
|
OUTPUT_VARIABLE MODULE_INIT_CONTENTS)
|
|
file(
|
|
WRITE
|
|
"${CMAKE_BINARY_DIR}/${PYTHON_INSTALL_PATH}/${PYTHON_MODULE_MODULE_INIT}"
|
|
"${MODULE_INIT_CONTENTS}")
|
|
file(
|
|
WRITE
|
|
"${CMAKE_BINARY_DIR}/build-wheel/${PYTHON_MODULE_WHEEL}/${PYTHON_MODULE_MODULE_INIT}"
|
|
"${MODULE_INIT_CONTENTS}")
|
|
list(
|
|
APPEND
|
|
"WHEEL_FILES_${PYTHON_MODULE_WHEEL}"
|
|
"${CMAKE_BINARY_DIR}/build-wheel/${PYTHON_MODULE_WHEEL}/${PYTHON_MODULE_MODULE_INIT}"
|
|
)
|
|
endif()
|
|
|
|
foreach(MODULE_FILE ${PYTHON_MODULE_MODULE_FILES})
|
|
configure_file(
|
|
"${MODULE_FILE}"
|
|
"${CMAKE_BINARY_DIR}/${PYTHON_INSTALL_PATH}/${MODULE_FILE}" COPYONLY)
|
|
configure_file(
|
|
"${MODULE_FILE}"
|
|
"${CMAKE_BINARY_DIR}/build-wheel/${PYTHON_MODULE_WHEEL}/${MODULE_FILE}"
|
|
COPYONLY)
|
|
list(
|
|
APPEND "WHEEL_FILES_${PYTHON_MODULE_WHEEL}"
|
|
"${CMAKE_BINARY_DIR}/build-wheel/${PYTHON_MODULE_WHEEL}/${MODULE_FILE}")
|
|
endforeach()
|
|
|
|
foreach(MODULE_FILE ${PYTHON_MODULE_MODULE_GENERATED_FILES})
|
|
add_custom_command(
|
|
OUTPUT
|
|
"${CMAKE_BINARY_DIR}/build-wheel/${PYTHON_MODULE_WHEEL}/${MODULE_FILE}"
|
|
DEPENDS "${CMAKE_BINARY_DIR}/${PYTHON_INSTALL_PATH}/${MODULE_FILE}"
|
|
COMMAND
|
|
cp -a "${CMAKE_BINARY_DIR}/${PYTHON_INSTALL_PATH}/${MODULE_FILE}"
|
|
"${CMAKE_BINARY_DIR}/build-wheel/${PYTHON_MODULE_WHEEL}/${MODULE_FILE}")
|
|
list(
|
|
APPEND "WHEEL_FILES_${PYTHON_MODULE_WHEEL}"
|
|
"${CMAKE_BINARY_DIR}/build-wheel/${PYTHON_MODULE_WHEEL}/${MODULE_FILE}")
|
|
endforeach()
|
|
|
|
while(NOT "${PYTHON_MODULE_COPY_FILES}" STREQUAL "")
|
|
list(POP_FRONT PYTHON_MODULE_COPY_FILES TO_COPY_SOURCE TO_COPY_DESTINATION)
|
|
add_custom_command(
|
|
OUTPUT
|
|
"${CMAKE_BINARY_DIR}/build-wheel/${PYTHON_MODULE_WHEEL}/${TO_COPY_DESTINATION}"
|
|
DEPENDS "${TO_COPY_SOURCE}"
|
|
COMMAND
|
|
cp -a "${TO_COPY_SOURCE}"
|
|
"${CMAKE_BINARY_DIR}/build-wheel/${PYTHON_MODULE_WHEEL}/${TO_COPY_DESTINATION}"
|
|
)
|
|
list(
|
|
APPEND
|
|
"WHEEL_FILES_${PYTHON_MODULE_WHEEL}"
|
|
"${CMAKE_BINARY_DIR}/build-wheel/${PYTHON_MODULE_WHEEL}/${TO_COPY_DESTINATION}"
|
|
)
|
|
endwhile()
|
|
|
|
set("WHEEL_FILES_${PYTHON_MODULE_WHEEL}"
|
|
"${WHEEL_FILES_${PYTHON_MODULE_WHEEL}}"
|
|
PARENT_SCOPE)
|
|
|
|
add_custom_target(
|
|
"${PYTHON_MODULE_TARGET_NAME}"
|
|
DEPENDS ${PYTHON_MODULE_MODULE_FILES}
|
|
${PYTHON_MODULE_MODULE_GENERATED_FILES})
|
|
endfunction()
|
|
|
|
#
|
|
# Wheel generation
|
|
#
|
|
function(python_wheel)
|
|
set(options)
|
|
set(oneValueArgs NAME PYPROJECT README)
|
|
set(multiValueArgs)
|
|
cmake_parse_arguments(PYTHON_WHEEL "${options}" "${oneValueArgs}"
|
|
"${multiValueArgs}" ${ARGN})
|
|
|
|
set(WHEEL_OUTPUT_NAME
|
|
"${PYTHON_WHEEL_NAME}-${PYTHON_WHL_VERSION}-py3-none-any.whl")
|
|
configure_file(
|
|
"${PYTHON_WHEEL_PYPROJECT}"
|
|
"${CMAKE_BINARY_DIR}/build-wheel/${PYTHON_WHEEL_NAME}/pyproject.toml"
|
|
COPYONLY)
|
|
configure_file(
|
|
"${PYTHON_WHEEL_README}"
|
|
"${CMAKE_BINARY_DIR}/build-wheel/${PYTHON_WHEEL_NAME}/README.md" COPYONLY)
|
|
|
|
add_custom_command(
|
|
OUTPUT "${CMAKE_BINARY_DIR}/${WHEEL_OUTPUT_NAME}"
|
|
COMMAND python -m build --no-isolation --wheel --outdir
|
|
"${CMAKE_BINARY_DIR}" &> /dev/null
|
|
DEPENDS
|
|
"${CMAKE_BINARY_DIR}/build-wheel/${PYTHON_WHEEL_NAME}/pyproject.toml"
|
|
"${WHEEL_FILES_${PYTHON_WHEEL_NAME}}"
|
|
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/build-wheel/${PYTHON_WHEEL_NAME}")
|
|
|
|
set(DISTINFO_NAME "${PYTHON_WHEEL_NAME}-${PYTHON_WHL_VERSION}.dist-info")
|
|
add_custom_command(
|
|
OUTPUT "${CMAKE_BINARY_DIR}/${PYTHON_INSTALL_PATH}/${DISTINFO_NAME}/RECORD"
|
|
COMMAND
|
|
sh -c
|
|
'rm -r \"${CMAKE_BINARY_DIR}/${PYTHON_INSTALL_PATH}/${PYTHON_WHEEL_NAME}\"-*.dist-info'
|
|
COMMAND unzip -q "${CMAKE_BINARY_DIR}/${WHEEL_OUTPUT_NAME}"
|
|
"${DISTINFO_NAME}/*" -d "${CMAKE_BINARY_DIR}/${PYTHON_INSTALL_PATH}"
|
|
DEPENDS "${CMAKE_BINARY_DIR}/${WHEEL_OUTPUT_NAME}")
|
|
|
|
add_custom_target(
|
|
"generate-${PYTHON_WHEEL_NAME}-wheel" ALL
|
|
DEPENDS "${CMAKE_BINARY_DIR}/${WHEEL_OUTPUT_NAME}"
|
|
"${CMAKE_BINARY_DIR}/${PYTHON_INSTALL_PATH}/${DISTINFO_NAME}/RECORD"
|
|
)
|
|
install(FILES "${CMAKE_BINARY_DIR}/${WHEEL_OUTPUT_NAME}"
|
|
DESTINATION "${CMAKE_INSTALL_PREFIX}/share/python")
|
|
install(
|
|
CODE "execute_process(COMMAND \"${CMAKE_CURRENT_SOURCE_DIR}/wheel-install.sh\" \
|
|
\"${CMAKE_BINARY_DIR}/${WHEEL_OUTPUT_NAME}\")")
|
|
endfunction()
|
|
|
|
#
|
|
# Install scripts
|
|
#
|
|
configure_file("scripts/revng" "${CMAKE_BINARY_DIR}/bin/revng")
|
|
configure_file("scripts/revng" "${CMAKE_BINARY_DIR}/bin/revng2")
|
|
|
|
#
|
|
# Install revng
|
|
#
|
|
python_module(
|
|
TARGET_NAME
|
|
python-top-module
|
|
WHEEL
|
|
revng
|
|
MODULE_INIT
|
|
revng/__init__.py
|
|
MODULE_FILES
|
|
revng/py.typed)
|
|
|
|
#
|
|
# Install revng.internal
|
|
#
|
|
python_module(
|
|
TARGET_NAME
|
|
python-top-internal-module
|
|
WHEEL
|
|
revng_internal
|
|
MODULE_INIT
|
|
revng/internal/__init__.py
|
|
MODULE_FILES
|
|
revng/internal/py.typed
|
|
revng/internal/pipebox.py
|
|
revng/internal/pipeline.yml
|
|
COPY_FILES
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/scripts/revng"
|
|
scripts/revng
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/scripts/revng"
|
|
scripts/revng2)
|
|
|
|
#
|
|
# Install revng.model (including autogenerated classes)
|
|
#
|
|
set(PYTHON_MODEL_FILES
|
|
revng/model/__init__.py revng/model/metaaddress.py revng/model/mixins.py
|
|
revng/model/__init__.py revng/model/external.py)
|
|
python_module(
|
|
TARGET_NAME
|
|
python-model
|
|
WHEEL
|
|
revng
|
|
MODULE_FILES
|
|
${PYTHON_MODEL_FILES}
|
|
MODULE_GENERATED_FILES
|
|
"${PYTHON_GENERATED_MODEL_PATH}")
|
|
|
|
#
|
|
# Install revng.model.migrations
|
|
#
|
|
set(PYTHON_MODEL_MIGRATIONS_FILES
|
|
revng/model/migrations/__init__.py
|
|
revng/model/migrations/versions/v2.py
|
|
revng/model/migrations/versions/v3.py
|
|
revng/model/migrations/versions/v4.py
|
|
revng/model/migrations/versions/v5.py
|
|
revng/model/migrations/versions/v6.py
|
|
revng/model/migrations/versions/v7.py
|
|
revng/model/migrations/versions/v8.py
|
|
revng/model/migrations/versions/v9.py)
|
|
python_module(TARGET_NAME python-model-migrations WHEEL revng MODULE_FILES
|
|
${PYTHON_MODEL_MIGRATIONS_FILES})
|
|
|
|
#
|
|
# Install revng.tupletree
|
|
#
|
|
set(PYTHON_TUPLETREE_FILES revng/tupletree/__init__.py)
|
|
python_module(TARGET_NAME python-tupletree WHEEL revng MODULE_FILES
|
|
${PYTHON_TUPLETREE_FILES})
|
|
|
|
set(MERGE_DYNAMIC_MODULE_FILES
|
|
revng/internal/cli/_commands/merge_dynamic/__init__.py
|
|
revng/internal/cli/_commands/merge_dynamic/log.py
|
|
revng/internal/cli/_commands/merge_dynamic/merge_dynamic.py
|
|
revng/internal/cli/_commands/merge_dynamic/parsed_elf.py
|
|
revng/internal/cli/_commands/merge_dynamic/util.py)
|
|
python_module(TARGET_NAME revng-merge-dynamic WHEEL revng_internal MODULE_FILES
|
|
${MERGE_DYNAMIC_MODULE_FILES})
|
|
|
|
#
|
|
# Install revng.project
|
|
#
|
|
|
|
# Copy the _generated.py file from revng/model to revng/project/model. This file
|
|
# is generated in lib/Model/CMakeLists.txt via `target_tuple_tree_generator`. We
|
|
# need a copy here since it has a relative import to `mixins` which is different
|
|
# for `revng.model` and `revng.project.model`.
|
|
add_custom_command(
|
|
COMMAND
|
|
cp -a
|
|
"${CMAKE_BINARY_DIR}/${PYTHON_INSTALL_PATH}/${PYTHON_GENERATED_MODEL_PATH}"
|
|
"${CMAKE_BINARY_DIR}/${PYTHON_INSTALL_PATH}/revng/project/model/_generated.py"
|
|
OUTPUT
|
|
"${CMAKE_BINARY_DIR}/${PYTHON_INSTALL_PATH}/revng/project/model/_generated.py"
|
|
DEPENDS
|
|
"${CMAKE_BINARY_DIR}/${PYTHON_INSTALL_PATH}/${PYTHON_GENERATED_MODEL_PATH}")
|
|
|
|
add_custom_command(
|
|
COMMAND
|
|
env "PYTHONPATH=${CMAKE_BINARY_DIR}/${PYTHON_INSTALL_PATH}"
|
|
"${CMAKE_SOURCE_DIR}/scripts/generate-project-mixins.sh"
|
|
"${CMAKE_SOURCE_DIR}/python/revng/project/model/mixins.py.tpl"
|
|
"${CMAKE_BINARY_DIR}/${PYTHON_INSTALL_PATH}/revng/project/model/mixins.py"
|
|
OUTPUT
|
|
"${CMAKE_BINARY_DIR}/${PYTHON_INSTALL_PATH}/revng/project/model/mixins.py"
|
|
DEPENDS revng-all-binaries
|
|
"${CMAKE_SOURCE_DIR}/scripts/generate-project-mixins.py"
|
|
"${CMAKE_SOURCE_DIR}/scripts/generate-project-mixins.sh"
|
|
"${CMAKE_SOURCE_DIR}/python/revng/project/model/mixins.py.tpl"
|
|
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}")
|
|
|
|
add_custom_command(
|
|
COMMAND
|
|
"${CMAKE_SOURCE_DIR}/scripts/jsonschema_to_py.sh"
|
|
"${CMAKE_SOURCE_DIR}/python/revng/pypeline/pipeline-description-schema.yml"
|
|
"${CMAKE_BINARY_DIR}/${PYTHON_INSTALL_PATH}/revng/project/pipeline_description.py"
|
|
"PipelineDescription"
|
|
OUTPUT
|
|
"${CMAKE_BINARY_DIR}/${PYTHON_INSTALL_PATH}/revng/project/pipeline_description.py"
|
|
DEPENDS
|
|
"${CMAKE_SOURCE_DIR}/scripts/jsonschema_to_py.sh"
|
|
"${CMAKE_SOURCE_DIR}/python/revng/pypeline/pipeline-description-schema.yml")
|
|
|
|
set(REVNG_PROJECT_MODULE_FILES
|
|
revng/project/__init__.py
|
|
revng/project/cli_project.py
|
|
revng/project/common.py
|
|
revng/project/daemon_project.py
|
|
revng/project/project.py
|
|
revng/project/local_daemon_project.py
|
|
revng/project/model/external.py
|
|
revng/project/model/__init__.py)
|
|
python_module(
|
|
TARGET_NAME
|
|
revng-project
|
|
WHEEL
|
|
revng
|
|
MODULE_FILES
|
|
${REVNG_PROJECT_MODULE_FILES}
|
|
MODULE_GENERATED_FILES
|
|
revng/project/model/_generated.py
|
|
revng/project/model/mixins.py
|
|
revng/project/pipeline_description.py)
|
|
|
|
#
|
|
# Install revng.ptml
|
|
#
|
|
set(REVNG_PTML_MODULE_FILES revng/ptml/__init__.py revng/ptml/actions.py
|
|
revng/ptml/parser.py revng/ptml/printer.py)
|
|
python_module(TARGET_NAME revng-ptml WHEEL revng MODULE_FILES
|
|
${REVNG_PTML_MODULE_FILES})
|
|
|
|
#
|
|
# Install revng.model_dump
|
|
#
|
|
set(DUMP_MODEL_MODULE_FILES
|
|
revng/internal/cli/_commands/model_to_json/__init__.py
|
|
revng/internal/cli/_commands/model_to_json/remap.py)
|
|
python_module(TARGET_NAME revng-dump-model WHEEL revng_internal MODULE_FILES
|
|
${DUMP_MODEL_MODULE_FILES})
|
|
|
|
#
|
|
# Install revng.cli
|
|
#
|
|
set(REVNG_CLI_MODULE_FILES
|
|
revng/internal/cli/commands_registry.py revng/internal/cli/__init__.py
|
|
revng/internal/cli/revng.py revng/internal/cli/revng2.py
|
|
revng/internal/cli/support.py)
|
|
python_module(TARGET_NAME revng-python-cli WHEEL revng_internal MODULE_FILES
|
|
${REVNG_CLI_MODULE_FILES})
|
|
|
|
#
|
|
# Install revng.cli._commands
|
|
#
|
|
set(REVNG_CLI_COMMANDS_MODULE_FILES
|
|
revng/internal/cli/_commands/translate.py
|
|
revng/internal/cli/_commands/opt.py
|
|
revng/internal/cli/_commands/pipeline_tools.py
|
|
revng/internal/cli/_commands/override_by_name.py
|
|
revng/internal/cli/_commands/daemon.py
|
|
revng/internal/cli/_commands/llm_rename/__init__.py
|
|
revng/internal/cli/_commands/llm_rename/prompt.tpl
|
|
revng/internal/cli/_commands/hard_purge.py
|
|
revng/internal/cli/_commands/process_docs_yaml/__init__.py
|
|
revng/internal/cli/_commands/tar_to_yaml.py
|
|
revng/internal/cli/_commands/test_docs/__init__.py
|
|
revng/internal/cli/_commands/test_docs/doctest_runner.py
|
|
revng/internal/cli/_commands/trace_run.py
|
|
revng/internal/cli/_commands/merge-irs.py
|
|
revng/internal/cli/_commands/model_compare.py
|
|
revng/internal/cli/_commands/model_migrate.py
|
|
revng/internal/cli/_commands/model_export_sqlite.py
|
|
revng/internal/cli/_commands/ptml.py)
|
|
python_module(TARGET_NAME revng-python-cli-commands WHEEL revng_internal
|
|
MODULE_FILES ${REVNG_CLI_COMMANDS_MODULE_FILES})
|
|
|
|
set(REVNG_CLI_COMMANDS_IMPORT_IDB_MODULE_FILES
|
|
revng/internal/cli/_commands/import_idb/__init__.py
|
|
revng/internal/cli/_commands/import_idb/idb_converter.py)
|
|
python_module(
|
|
TARGET_NAME revng-python-cli-commands-import-idb WHEEL revng_internal
|
|
MODULE_FILES ${REVNG_CLI_COMMANDS_IMPORT_IDB_MODULE_FILES})
|
|
|
|
set(REVNG_CLI_COMMANDS_GENERATE_MIGRATION_MODULE_FILES
|
|
revng/internal/cli/_commands/generate_migrations/__init__.py
|
|
revng/internal/cli/_commands/generate_migrations/migration.py.tpl)
|
|
python_module(
|
|
TARGET_NAME revng-python-cli-commands-generate-migrations WHEEL
|
|
revng_internal MODULE_FILES
|
|
${REVNG_CLI_COMMANDS_GENERATE_MIGRATION_MODULE_FILES})
|
|
|
|
set(REVNG_CLI_COMMANDS_FETCHDEBUGINFO_MODULE_FILES
|
|
revng/internal/cli/_commands/fetch_debuginfo/pe.py
|
|
revng/internal/cli/_commands/fetch_debuginfo/elf.py
|
|
revng/internal/cli/_commands/fetch_debuginfo/common.py
|
|
revng/internal/cli/_commands/fetch_debuginfo/__init__.py)
|
|
python_module(
|
|
TARGET_NAME revng-python-cli-commands-fetchdebuginfo WHEEL revng_internal
|
|
MODULE_FILES ${REVNG_CLI_COMMANDS_FETCHDEBUGINFO_MODULE_FILES})
|
|
|
|
set(REVNG_CLI_COMMANDS_GRAPHQL_MODULE_FILES
|
|
revng/internal/cli/_commands/graphql/__init__.py
|
|
revng/internal/cli/_commands/graphql/runner.py
|
|
revng/internal/cli/_commands/graphql/daemon_handler.py)
|
|
python_module(
|
|
TARGET_NAME revng-python-cli-commands-graphql WHEEL revng_internal
|
|
MODULE_FILES ${REVNG_CLI_COMMANDS_GRAPHQL_MODULE_FILES})
|
|
|
|
set(REVNG_CLI_COMMANDS_MASS_TESTING_MODULE_FILES
|
|
revng/internal/cli/_commands/mass_testing/__init__.py
|
|
revng/internal/cli/_commands/mass_testing/generate_report/db.py
|
|
revng/internal/cli/_commands/mass_testing/generate_report/meta.py
|
|
revng/internal/cli/_commands/mass_testing/generate_report/stacktrace.py
|
|
revng/internal/cli/_commands/mass_testing/generate_report/test_directory.py
|
|
revng/internal/cli/_commands/mass_testing/generate_report/__init__.py
|
|
revng/internal/cli/_commands/mass_testing/run.py
|
|
revng/internal/cli/_commands/mass_testing/configure.py)
|
|
python_module(
|
|
TARGET_NAME revng-python-cli-commands-mass-testing WHEEL revng_internal
|
|
MODULE_FILES ${REVNG_CLI_COMMANDS_MASS_TESTING_MODULE_FILES})
|
|
|
|
#
|
|
# Install revng.api
|
|
#
|
|
set(REVNG_API_MODULE_FILES
|
|
revng/internal/api/__init__.py
|
|
revng/internal/api/_capi.py
|
|
revng/internal/api/errors.py
|
|
revng/internal/api/exceptions.py
|
|
revng/internal/api/invalidations.py
|
|
revng/internal/api/manager.py
|
|
revng/internal/api/string_map.py
|
|
revng/internal/api/syncing_manager.py
|
|
revng/internal/api/synchronizer.py
|
|
revng/internal/api/target.py
|
|
revng/internal/api/utils.py)
|
|
python_module(TARGET_NAME revng-python-api WHEEL revng_internal 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/internal/daemon/__init__.py revng/internal/daemon/multiqueue.py
|
|
revng/internal/daemon/schema.graphql revng/internal/daemon/graphql.py
|
|
revng/internal/daemon/util.py)
|
|
python_module(TARGET_NAME revng-python-daemon WHEEL revng_internal MODULE_FILES
|
|
${REVNG_DAEMON_MODULE_FILES})
|
|
|
|
#
|
|
# Install revng.internal.support
|
|
#
|
|
set(REVNG_INTERNAL_SUPPORT_MODULE_FILES
|
|
revng/internal/support/__init__.py revng/internal/support/elf.py
|
|
revng/internal/support/collect.py)
|
|
python_module(TARGET_NAME revng-python-internal-support WHEEL revng_internal
|
|
MODULE_FILES ${REVNG_INTERNAL_SUPPORT_MODULE_FILES})
|
|
|
|
#
|
|
# Install revng.support
|
|
#
|
|
set(REVNG_SUPPORT_MODULE_FILES
|
|
revng/support/__init__.py revng/support/buffered_reader.py
|
|
revng/support/artifacts.py revng/support/location.py)
|
|
python_module(TARGET_NAME revng-python-support WHEEL revng MODULE_FILES
|
|
${REVNG_SUPPORT_MODULE_FILES})
|
|
|
|
#
|
|
# Install revng.pipeline_description
|
|
#
|
|
set(PYTHON_PIPELINEDESCRIPTION_FILES revng/pipeline_description/__init__.py)
|
|
python_module(
|
|
TARGET_NAME
|
|
python-pipeline-description
|
|
WHEEL
|
|
revng
|
|
MODULE_FILES
|
|
${PYTHON_PIPELINEDESCRIPTION_FILES}
|
|
MODULE_GENERATED_FILES
|
|
revng/pipeline_description/_generated.py)
|
|
|
|
#
|
|
# Install pypeline
|
|
#
|
|
set(REVNG_PYPELINE_MODULE_FILES
|
|
revng/pypeline/cli/rss/__init__.py
|
|
revng/pypeline/cli/rss/relay.py
|
|
revng/pypeline/cli/rss/server.py
|
|
revng/pypeline/cli/rss/viewer.py
|
|
revng/pypeline/cli/pipeline/__init__.py
|
|
revng/pypeline/cli/pipeline/run_analysis.py
|
|
revng/pypeline/cli/pipeline/run_pipe.py
|
|
revng/pypeline/cli/project/__init__.py
|
|
revng/pypeline/cli/project/analyze.py
|
|
revng/pypeline/cli/project/artifact.py
|
|
revng/pypeline/cli/project/daemon.py
|
|
revng/pypeline/cli/project/dump_pipeline.py
|
|
revng/pypeline/cli/__init__.py
|
|
revng/pypeline/cli/common_options.py
|
|
revng/pypeline/cli/context.py
|
|
revng/pypeline/cli/hypercorn.py
|
|
revng/pypeline/cli/utils.py
|
|
revng/pypeline/cli/wrappers.py
|
|
revng/pypeline/analysis.py
|
|
revng/pypeline/compression.py
|
|
revng/pypeline/container.py
|
|
revng/pypeline/graph.py
|
|
revng/pypeline/main.py
|
|
revng/pypeline/model.py
|
|
revng/pypeline/object.py
|
|
revng/pypeline/pipeline_node.py
|
|
revng/pypeline/pipeline_parser.py
|
|
revng/pypeline/pipeline-description-schema.yml
|
|
revng/pypeline/pipeline.py
|
|
revng/pypeline/runner_context.py
|
|
revng/pypeline/schema.yml
|
|
revng/pypeline/daemon/__init__.py
|
|
revng/pypeline/daemon/app.py
|
|
revng/pypeline/daemon/daemon.py
|
|
revng/pypeline/daemon/exceptions.py
|
|
revng/pypeline/daemon/utils.py
|
|
revng/pypeline/rss_server/__init__.py
|
|
revng/pypeline/rss_server/postgres.py
|
|
revng/pypeline/rss_server/relay.py
|
|
revng/pypeline/rss_server/server.py
|
|
revng/pypeline/rss_server/storage.py
|
|
revng/pypeline/rss_server/viewer.py
|
|
revng/pypeline/rss_server/postgres_migrations/v1.sql
|
|
revng/pypeline/schedule/__init__.py
|
|
revng/pypeline/schedule/scheduled_task.py
|
|
revng/pypeline/schedule/schedule.py
|
|
revng/pypeline/storage/file_provider.py
|
|
revng/pypeline/storage/rss.py
|
|
revng/pypeline/storage/memory.py
|
|
revng/pypeline/storage/null.py
|
|
revng/pypeline/storage/local_provider.py
|
|
revng/pypeline/storage/notification_queue.py
|
|
revng/pypeline/storage/storage_provider.py
|
|
revng/pypeline/storage/util.py
|
|
revng/pypeline/storage/__init__.py
|
|
revng/pypeline/storage/local_provider_migrations/v1.sql
|
|
revng/pypeline/storage/local_provider_migrations/v2.sql
|
|
revng/pypeline/task/__init__.py
|
|
revng/pypeline/task/pipe.py
|
|
revng/pypeline/task/requests.py
|
|
revng/pypeline/task/savepoint.py
|
|
revng/pypeline/task/task.py
|
|
revng/pypeline/utils/db_migrator.py
|
|
revng/pypeline/utils/default_dict_from_key.py
|
|
revng/pypeline/utils/notification_broker.py
|
|
revng/pypeline/utils/pipeline.py
|
|
revng/pypeline/utils/registry.py
|
|
revng/pypeline/utils/starlette.py
|
|
revng/pypeline/utils/logger.py
|
|
revng/pypeline/utils/cabc.py
|
|
revng/pypeline/utils/__init__.py)
|
|
|
|
# Copy buffered_reader.py from revng.support to revng.pypeline.utils, since
|
|
# pypeline cannot depend on revng and having revng depend on pypeline would be
|
|
# morally wrong. TODO: split off all the generic functionality
|
|
add_custom_command(
|
|
COMMAND
|
|
cp -a
|
|
"${CMAKE_BINARY_DIR}/${PYTHON_INSTALL_PATH}/revng/support/buffered_reader.py"
|
|
"${CMAKE_BINARY_DIR}/${PYTHON_INSTALL_PATH}/revng/pypeline/utils/buffered_reader.py"
|
|
OUTPUT
|
|
"${CMAKE_BINARY_DIR}/${PYTHON_INSTALL_PATH}/revng/pypeline/utils/buffered_reader.py"
|
|
DEPENDS
|
|
"${CMAKE_BINARY_DIR}/${PYTHON_INSTALL_PATH}/revng/support/buffered_reader.py"
|
|
)
|
|
|
|
python_module(
|
|
TARGET_NAME
|
|
revng-python-pypeline
|
|
WHEEL
|
|
pypeline
|
|
MODULE_INIT
|
|
revng/pypeline/__init__.py
|
|
MODULE_FILES
|
|
${REVNG_PYPELINE_MODULE_FILES}
|
|
MODULE_GENERATED_FILES
|
|
revng/pypeline/utils/buffered_reader.py)
|
|
|
|
configure_file(
|
|
revng/pypeline/pipeline-description-schema.yml
|
|
"${CMAKE_BINARY_DIR}/share/revng/pipeline/pipeline-description-schema.yml"
|
|
COPYONLY)
|
|
|
|
#
|
|
# Nanobind module generation and creation of revng.internal.{,_}cpp_pypeline
|
|
#
|
|
llvm_map_components_to_libnames(LLVM_LIBRARIES Support Core)
|
|
|
|
set(CPP_MODULE_NAME _pipebox)
|
|
add_library("${CPP_MODULE_NAME}" MODULE
|
|
"${CMAKE_SOURCE_DIR}/lib/PipeboxCommon/Python/_pipebox.cpp")
|
|
set_target_properties(
|
|
"${CPP_MODULE_NAME}"
|
|
PROPERTIES LINKER_LANGUAGE CXX
|
|
PREFIX ""
|
|
LIBRARY_OUTPUT_DIRECTORY
|
|
"${CMAKE_BINARY_DIR}/${PYTHON_INSTALL_PATH}/revng/internal")
|
|
target_link_libraries(
|
|
"${CPP_MODULE_NAME}" PUBLIC ${Python3_LIBRARIES} ${LLVM_LIBRARIES} nanobind
|
|
revngSupport revngModel)
|
|
target_include_directories("${CPP_MODULE_NAME}" PUBLIC ${Python3_INCLUDE_DIRS})
|
|
|
|
python_module(
|
|
TARGET_NAME
|
|
python-cpp-pipebox
|
|
WHEEL
|
|
revng_internal
|
|
MODULE_FILES
|
|
"revng/internal/pipebox.py"
|
|
MODULE_GENERATED_FILES
|
|
"revng/internal/${CPP_MODULE_NAME}.so")
|
|
|
|
#
|
|
# Generate actual wheel rules
|
|
#
|
|
python_wheel(NAME revng PYPROJECT revng/pyproject.toml README revng/README.md)
|
|
python_wheel(NAME revng_internal PYPROJECT revng/internal/pyproject.toml README
|
|
revng/internal/README.md)
|
|
python_wheel(NAME pypeline PYPROJECT revng/pypeline/pyproject.toml README
|
|
revng/pypeline/README.md)
|