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

# Keep sorted.
fusesoc
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
