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

# List of packages installed with apt on our reference Ubuntu platform.
#
# When updating this list, please keep the yum package requirements for
# RHEL/CentOS 7 in sync. These were derived from the Ubuntu requirements
# and are maintained in yum-requirements.txt.
#
# This list of packages is also included in the documentation at
# doc/ug/install_instructions/index.md. When updating this file also check if
# doc/ug/install_instructions/index.md needs to be updated as well.
#
# Keep it sorted.
autoconf
bison
build-essential
clang-format
cmake
curl
doxygen
flex
g++
git
golang
lcov
libelf1
libelf-dev
libftdi1-2
libftdi1-dev
# A requirement of the prebuilt clang toolchain.
libncursesw5
libssl-dev
libudev-dev
libusb-1.0-0
lld
lsb-release
make
ninja-build
perl
pkgconf
python3
python3-pip
python3-setuptools
python3-urllib3
python3-wheel
shellcheck
srecord
tree
xsltproc
zlib1g-dev
xz-utils
