# 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.
# Newer versions are fine.
meson >= 0.51.0, != 0.53.0 # minimum matches version in meson.build
mistletoe>=0.7.2
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
