Ivan Krysak acf5858099 Import edge lane selection from caliban
(the following is the original commit message)

Now that the nodes are placed into the grid (at least horizontally),
it's possible to focus on the edges. Since, the information about
the number of edges going from/to each of the layers is known, it's
possible to determine the number of horizontal space needed to placed
those.

In this part of the layouter, the focus is on three different laning
points:
- horizontal lanes between layers.
- entry lanes for each of the nodes.
- exit lanes for each of the nodes.

Indexation is done independently for each of the lane types.
2022-06-15 16:04:44 +03:00
2022-05-09 13:37:58 +02:00
2022-06-13 18:35:37 +02:00
2022-03-08 15:15:24 +01:00
2022-06-14 18:55:59 +03:00
2022-06-15 15:52:26 +03:00
2021-03-06 16:55:40 +01:00

*******
Purpose
*******

``revng`` is a static binary translator. Given a input ELF binary for one of the
supported architectures (currently i386, x86-64, MIPS, ARM, AArch64 and s390x)
it will analyze it and emit an equivalent LLVM IR. To do so, ``revng`` employs
the QEMU intermediate representation (a series of TCG instructions) and then
translates them to LLVM IR.

************
How to build
************

``revng`` employs CMake as a build system.
In order to build ``revng``, use orchestra:

    https://github.com/revng/orchestra

To run the test suite simply, from the build directory, run:

.. code-block:: sh

    # Enter in the build directory
    orc shell -c revng

    # Run the tests
    ctest -j$(nproc)

***********
Example run
***********

The simplest possible example consists in the following:

.. code-block:: sh

    # Install the ARM toolchain
    orc install toolchain/arm/gcc

    # Enter in the build directory
    orc shell -c revng

    # Build programs (skip building test material)
    ninja revng-all-binaries

    # Create hello world program
    cat > hello.c <<EOF
    #include <stdio.h>

    int main(int argc, char *argv[]) {
      printf("Hello, world!\n");
    }
    EOF

    # Compile
    armv7a-hardfloat-linux-uclibceabi-gcc \
      -Wl,-Ttext-segment=0x20000 \
      -static hello.c \
      -o hello.arm

    # Translate
    ./bin/revng translate hello.arm

    # Run translated version
    ./hello.arm.translated
    # Hello, world!
S
Description
Automated archival mirror of github.com/revng/revng
Readme GPL-2.0 24 MiB
Languages
C++ 77.1%
Python 12.6%
MLIR 4.4%
CMake 1.9%
LLVM 1.4%
Other 2.5%