# Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0

# Keep sorted.
gitpython
hjson
isort
livereload
mako
# Meson 0.53.0 broke compatibility with Python 3.5.2, see
# https://github.com/lowRISC/opentitan/issues/1288 for details.
# Meson 0.54.0+ requires ninja 1.7+, which isn't available by default on
# Ubuntu 16.04.
meson >= 0.51.0, != 0.53.0, <0.54.0 # minimum matches version in meson.build
mistletoe>=0.7.2
pyelftools
pyftdi
pygments
pytest
pytest-timeout
pyyaml
tabulate
yapf

# Develpment version to get around YAML parser warning triggered by fusesoc
# Upstream tracking: https://github.com/olofk/ipyxact/issues/19
git+https://github.com/olofk/ipyxact.git@master

# Development version of edalize until all our changes are upstream
git+https://github.com/lowRISC/edalize.git@ot

# Development version with OT-specific changes
git+https://github.com/lowRISC/fusesoc.git@ot
