orchestra icon indicating copy to clipboard operation
orchestra copied to clipboard

rev.ng configuration for orchestra. The starting point for any development.

rev.ng orchestra configuration

This repository contains the orchestra configuration for rev.ng.

Bootstrap

  • Clone orchestra
    git clone https://github.com/revng/orchestra
    cd orchestra
    
  • Install dependencies (currently Ubuntu-only):
    ./.orchestra/ci/install-dependencies.sh
    
  • Install orchestra script
    pip3 cache remove orchestra
    pip3 install --user --force-reinstall https://github.com/revng/revng-orchestra/archive/master.zip
    
  • Make sure orc is in PATH
    export PATH="$HOME/.local/bin:$PATH"
    
  • Initialize default configuration (and list components)
    orc components
    

Virtualenv

If you do not want to install orchestra globally, you can use a virtualenv.

  • Create and activate a virtualenv
    python3 -m venv venv
    source venv/bin/activate
    
  • Install and upgrade wheel inside the virtualenv
    pip install --upgrade pip wheel
    
  • Install orchestra
    pip cache remove orchestra
    pip install --force-reinstall https://github.com/revng/revng-orchestra/archive/master.zip
    
  • Install dependencies (Ubuntu only)
    ./.orchestra/ci/install-dependencies.sh
    

Configuration for the public

The default configuration gives you read-only access to the rev.ng open source components.

If you want to work a fork of certain components the suggested workflow is to add your remote to the repository as cloned by orchestra. For example, to fork the revng project do the following:

# Ensure the revng component is cloned
orc clone revng
cd sources/revng
git remote add myremote <your-remote-url>

Configuration for rev.ng developers

If you have access to rev.ng GitLab, in order to access private components, your configuration should be similar to the following:

#@data/values
---
#@overlay/match missing_ok=True
remote_base_urls:
  - public: "[email protected]:revng"
  - private: "[email protected]:revng-private"

#@overlay/match missing_ok=True
binary_archives:
  - origin: "[email protected]:revng/binary-archives.git"
  - private: "[email protected]:revng-private/binary-archives.git"

Installing from binary-archives

  • Update binary-archives and information about remote repositories:
    orc update
    
  • Install revng
    orc install revng
    

Building from source

In order to build from source certain components, as opposed to fetch them from binary-archives, you need to list them in .orchestra/config/user_options.yml:

#@overlay/replace
build_from_source:
  - revng
  • Install and test revng
    orc install --test revng
    
  • Manually build:
    orc shell -c revng
    ninja
    ctest -j$(nproc)
    

Building from a fork

The recommended workflow is:

  • Clone the component you want to fork
    orc clone <component>
    
  • Add a remote to the component
    cd sources/<component>
    git remote add <myremotename> <remote-url>
    git fetch --all
    
  • Switch to your branch
    cd sources/<component>
    git switch <myremotename>/<branch>
    git checkout -b <branch> <myremotename>/<branch>
    
  • Update orchestra
    orc update
    

How do I...

  • Q: How do I set the number of parallel jobs for make/ninja?

    A: In .orchestra/config/user_options.yml:

    parallelism: 4
    
  • Q: How do I print the dependency graph to build a component?

    A: orc graph $COMPONENT | xdot -

  • Q: How do I uninstall a component?

    A: orc uninstall $COMPONENT

  • Q: Does orchestra leave files around my $HOME or elsewhere?

    A: No! By default orchestra places everything inside the folder containing the configuration

Writing components

See docs/writing_components.md.