# 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
cmake
curl
flex
g++
git
libelf1
libelf-dev
libftdi1-2
libftdi1-dev
libssl-dev
libusb-1.0
make
ninja-build
pkgconf
python3
python3-pip
python3-setuptools
srecord
tree
zlib1g-dev
