Home

Awesome

litex-conda-packages

Conda build recipes for Litex BuildEnv build dependencies.

Basically, anything which hasn't gotten a proper package at https://launchpad.net/~timvideos/+archive/ubuntu/hdmi2usb

Toolchains

LiteX "soft-CPU" support

The LiteX system supports both a lm32 and or1k "soft-CPU" implementations.

Current versions are;

lm32-elf

or1k-elf

riscv32-elf

Cypress FX2 support

Support Tools

OpenOCD

Tool for JTAG programming.

Building

This repository is set up to be built by Travis CI, using the GitHub integration to Travis CI.

See .travis.yml for the build configuration given to Travis CI, and the .travis directory for scripts referenced.

The Travis CI output can be found on the https://travis-ci.org/ for the GitHub account and GitHub repository. For instance, for the main:

https://github.com/litex-hub/litex-conda-packages

GitHub repository, the Travis CI results can be seen at:

https://travis-ci.org/litex-hub/litex-conda-packages

On a successful build in the litex-hub Travis CI, the resulting packages are uploaded to:

https://anaconda.org/TimVideos/repo

and can be installed with:

conda install --channel "TimVideos" package

These packages are mostly used by litex-buildenv.

Building via Travis CI in your own repository

If you enable Travis CI on your GitHub fork of litex-conda-packages then your Travis CI results will be at:

https://travis-ci.org/${GITHUB_USER}/litex-conda-packages

Since the repository includes .travis.yml and all the other Travis CI setup, you should just need to turn on the Travis CI integration at GitHub, and push changes to your GitHub repo, to trigger a Travis CI build, then watch the https://travis-ci.org/ site for the build progress.

A full build of everything will take the Travis CI infrastructure a few hours if it all builds successfully.

Common Travis CI build failures

If the build fails, see the common Travis CI build problems for assistance investigating the issues. Common issues with this repository include package dependencies (eg, where Conda has changed), output log file size (Travis CI has a 4MB maximum, and some package builds like gcc generate a lot of output), and builds timing out (either for maximum time allocation, or for "no output" for more than 10 minutes).

Testing conda builds locally

Given a fairly empty disposable Ubuntu x86-64 test environment (eg, created with Docker, or Vagrant), it is possible to simulate part of what Travis CI will do to test building individual toolchain architectures locally.

This can be done with something like:

sudo apt-get update
sudo apt-get install wget git

# Packages from ~/.travis.yml; realpath is in coreutils in Ubuntu 18.04
# Plus libtool and pkg-config, which are needed for openocd
#
#sudo apt-get install realpath autoconf automake build-essential gperf libftdi-dev libudev-dev libudev1 libusb-1.0-0-dev libusb-dev texinfo
sudo apt-get install coreutils autoconf automake build-essential gperf libftdi-dev libudev-dev libudev1 libusb-1.0-0-dev libusb-dev texinfo libtool pkg-config

git clone https://github.com/litex-hub/litex-conda-packages.git
litex-conda-packages/conda-get.sh

# Adapted from .travis/common.sh
get_built_package() {
   ./conda-env.sh render --output "$@" 2>/dev/null | grep conda-bld | grep tar.bz2 | tail -n 1 | sed -e's/-[0-9]\+\.tar/*.tar/' -e's/-git//'
}

# Anchor the build date/time, so we have predictable versions and filenames
# amongst related packages, and to make it easy to do package installs.
#
# Either to current date/time at the start of the build:
#
# export DATE_NUM="$(date -u +%Y%m%d%H%M%S)"
# export DATE_STR="$(date -u +%Y%m%d_%H%M%S)"
#
# Or lock to date/time of the last commit on git, as Travis CI config does
# (see .travis/common.sh)
#
export DATE_TS="$(git log --format=%ct -n1)"
export DATE_NUM="$(date --date=@${DATE_TS} -u +%Y%m%d%H%M%S)"
export DATE_STR="$(date --date=@${DATE_TS} -u +%Y%m%d_%H%M%S)"

# Combinations taken from .travis.yml
TOOLCHAIN_ARCH=lm32
export PACKAGE TOOLCHAIN_ARCH

cd litex-conda-packages

for PACKAGE in binutils gcc/nostdc gcc/newlib; do
  ./conda-env.sh build --check "${PACKAGE}"   # Downloads and caches stuff
  ./conda-env.sh build         "${PACKAGE}"   # Actually build package
  CONDA_OUT="$(get_built_package ${PACKAGE})" # Calculate output package
  ./conda-env.sh install       "${CONDA_OUT}"
done

Expect packages like binutils to take 3-5 minutes to build, packages like gcc/nostdc to take 10-15 minutes to build, and packages like gcc/newlib to take 25-40 minutes to build, on a relatively fast build system (eg, SSD, i7, reasonable amount of RAM). Beware that gcc/newlib wants to see gcc/nostdc of the same version already installed before it will build; this means that gcc/newlib is non-trivial to build individually.

To build one architecture of tools, without any cleanup will need a VM with maybe 12-15GiB of space available (a 10GiB disk image is not quite big enough). Building more architectures at once will need more disk space.

NOTE: By preference only packages built by Travis CI should be uploaded to the Anaconda repository, so that the externally visible packages have consistent package versions (and do not conflict). But it can be useful to build locally to debug conda-build config issues without waiting for a full Travis CI cycle.