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

# 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

pyyaml
mako
junit-xml

# Needed by dvsim.py (not actually used in Ibex)
hjson
mistletoe>=0.7.2
# Premailer 3.9.0 broke the API by introducing an allow_loading_external_files
# argument that is now mandatory, but didn't exist in previous versions.
# To relax the constraint we either need to do a runtime detection, or switch all
# users to a newer version.
premailer < 3.9.0

# Recurse to get any requirements from riscv-dv
-r vendor/google_riscv-dv/requirements.txt
