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

# Keep sorted.
flake8
gitpython
hjson
ipyxact >= 0.2.4
isort
livereload
mako
meson >= 0.53.0, <= 0.54 # minimum matches version in meson.build
mistletoe>=0.7.2
premailer
pycryptodome
pyelftools
pyftdi
pyserial
pygments
pytest
pytest-timeout
pyyaml
tabulate
yapf

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

# Development version with OT-specific changes
git+https://github.com/lowRISC/edalize.git@ot#egg=edalize >= 0.2.0
