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

# Keep sorted.
autoconf
bison
build-essential
clang-format
curl
flex
g++
git
libelf1
libelf-dev
libftdi1-2
libftdi1-dev
libssl-dev
libusb-1.0-0
make
ninja-build
pkgconf
python3
python3-pip
python3-setuptools
python3-wheel
# The pip-installed version does not come with LibYAML support by default,
# which significantly speeds up the parsing/dumping of YAML files in fusesoc.
python3-yaml
srecord
tree
zlib1g-dev
