diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt index 7faf97675..9f6a6efab 100644 --- a/python/CMakeLists.txt +++ b/python/CMakeLists.txt @@ -137,7 +137,15 @@ python_module( # python_module( TARGET_NAME revng-python-translate - MODULE_FILES "revng/cli/translate/__init__.py" + MODULE_FILES "revng/cli/translate.py" +) + +# +# Install revng.cli.lift +# +python_module( + TARGET_NAME revng-python-lift + MODULE_FILES "revng/cli/lift.py" ) # diff --git a/python/revng/cli/translate/__init__.py b/python/revng/cli/lift.py similarity index 52% rename from python/revng/cli/translate/__init__.py rename to python/revng/cli/lift.py index 54f16cce6..ebdb3a7ed 100644 --- a/python/revng/cli/translate/__init__.py +++ b/python/revng/cli/lift.py @@ -1,79 +1,7 @@ -import sys -import argparse -import signal -import os -import subprocess -from os import path -from ..support import run -from ..revng import run_revng_command +from tempfile import NamedTemporaryFile +from .revng import run_revng_command -def register_translate(subparsers): - parser = subparsers.add_parser("translate", description="revng translate wrapper") - parser.add_argument("input", type=str, nargs=1, help="Input binary to be translated") - - parser.add_argument( - "-o", - "--output", - metavar="OUTPUT", - dest="output", - type=str, - nargs="?", - help="Translated output", - ) - - parser.add_argument("-i", "--isolate", action="store_true", help="Enable function isolation.") - - parser.add_argument( - "--trace", action="store_true", help="Use the tracing version of support.ll." - ) - - parser.add_argument("-O0", action="store_true", help="Do no optimize.") - parser.add_argument("-O1", action="store_true", help="Use llc -O2.") - parser.add_argument("-O2", action="store_true", help="Use llc -O2 and opt -O2.") - - parser.add_argument("--base", help="Load address to employ in lifting.") - - -def run_translate(args, post_dash_dash_args, search_prefixes, command_prefix): - out_file = args.output if args.output else args.input[0] + ".translated" - - step_name = "EndRecompile" - if args.isolate: - step_name = step_name + "Isolated" - - command = [ - "revng", - "pipeline", - "--silent", - "output:root:Translated", - "--step", - step_name, - "-i", - "Lift:input:" + args.input[0], - "-o", - step_name + ":output:" + out_file, - ] - - if args.O1: - command.append("--compile-opt-level=1") - elif args.O2: - command += ["--compile-opt-level=2", "-f", "O2"] - else: - command.append("--compile-opt-level=0") - - if args.base: - command.append(f"--base={args.base}") - - if args.trace: - command.append("--link-trace") - - command += post_dash_dash_args - - return run_revng_command(command, search_prefixes, command_prefix) - - -# WIP: outline def register_lift(subparsers): parser = subparsers.add_parser("lift", description="revng lift wrapper") parser.add_argument("input", type=str, nargs=1, help="Input binary to be lifted") @@ -93,9 +21,6 @@ def run_lift(args, post_dash_dash_args, search_prefixes, command_prefix): lambda args, name: [f"--{name}={args.__dict__[name]}"] if args.__dict__[name] else [] ) - # WIP - from tempfile import NamedTemporaryFile - with NamedTemporaryFile(suffix=".yml") as model, NamedTemporaryFile( suffix=".ll" ) as model_in_module: @@ -148,4 +73,4 @@ def run_lift(args, post_dash_dash_args, search_prefixes, command_prefix): command_prefix, ) - # WIP NEXT: debug-info + # TODO: annotate IR diff --git a/python/revng/cli/revng.py b/python/revng/cli/revng.py index 554293d28..ec7620dca 100755 --- a/python/revng/cli/revng.py +++ b/python/revng/cli/revng.py @@ -123,7 +123,7 @@ def run_revng_command(arguments, search_prefixes, command_prefix): subparsers = parser.add_subparsers(dest="command_name", help="sub-commands help") from .translate import register_translate - from .translate import register_lift + from .lift import register_lift register_translate(subparsers) register_lift(subparsers) @@ -198,7 +198,7 @@ def run_subcommand(command, all_args, search_prefixes, command_prefix): def run_command(args, unknown_args, post_dash_dash, search_prefixes, command_prefix): from .translate import run_translate - from .translate import run_lift + from .lift import run_lift command = args.command_name if not command: diff --git a/python/revng/cli/translate.py b/python/revng/cli/translate.py new file mode 100644 index 000000000..b765ca8cd --- /dev/null +++ b/python/revng/cli/translate.py @@ -0,0 +1,68 @@ +from os import path +from .support import run +from .revng import run_revng_command + + +def register_translate(subparsers): + parser = subparsers.add_parser("translate", description="revng translate wrapper") + parser.add_argument("input", type=str, nargs=1, help="Input binary to be translated") + + parser.add_argument( + "-o", + "--output", + metavar="OUTPUT", + dest="output", + type=str, + nargs="?", + help="Translated output", + ) + + parser.add_argument("-i", "--isolate", action="store_true", help="Enable function isolation.") + + parser.add_argument( + "--trace", action="store_true", help="Use the tracing version of support.ll." + ) + + parser.add_argument("-O0", action="store_true", help="Do no optimize.") + parser.add_argument("-O1", action="store_true", help="Use llc -O2.") + parser.add_argument("-O2", action="store_true", help="Use llc -O2 and opt -O2.") + + parser.add_argument("--base", help="Load address to employ in lifting.") + + +def run_translate(args, post_dash_dash_args, search_prefixes, command_prefix): + out_file = args.output if args.output else args.input[0] + ".translated" + + step_name = "EndRecompile" + if args.isolate: + step_name = step_name + "Isolated" + + command = [ + "revng", + "pipeline", + "--silent", + "output:root:Translated", + "--step", + step_name, + "-i", + "Lift:input:" + args.input[0], + "-o", + step_name + ":output:" + out_file, + ] + + if args.O1: + command.append("--compile-opt-level=1") + elif args.O2: + command += ["--compile-opt-level=2", "-f", "O2"] + else: + command.append("--compile-opt-level=0") + + if args.base: + command.append(f"--base={args.base}") + + if args.trace: + command.append("--link-trace") + + command += post_dash_dash_args + + return run_revng_command(command, search_prefixes, command_prefix)