ci: preliminary implementation
diff --git a/.circleci/arch-deps.sh b/.circleci/arch-deps.sh new file mode 100644 index 0000000..edb4baa --- /dev/null +++ b/.circleci/arch-deps.sh
@@ -0,0 +1,47 @@ +#!/bin/bash + +# This script is entirely self contained, so you can cache off of its' content +# the results stored in ICESTORM_ROOT and TRELLIS_ROOT. + +set -e -x -o pipefail + +# Parameters +ICESTORM_ROOT=${ICESTORM_ROOT:-/usr/local/icestorm} +TRELLIS_ROOT=${TRELLIS_ROOT:-/usr/local/trellis} + +# Configuration +ICESTORM_REVISION=c02a4000f4cef8d4d9e76757f55ea4920667e1e8 +TRELLIS_REVISION=f57e0f90b9f9d95a172adf56376fa875f36a7a4e +TRELLISDB_REVISION=ef5980c129be05aceeaea3b3c968d3102f8450b5 + +# Instal Icestorm +( + cd /tmp + rm -rf icestorm + git clone https://github.com/cliffordwolf/icestorm.git + cd icestorm + git reset --hard $ICETORM_REVISION + make install -j2 PREFIX=$ICESTORM_ROOT + rm -rf icestorm +) + +# Install Trellis +( + mkdir -p $TRELLIS_ROOT + cd $(dirname $TRELLIS_ROOT) + rm -rf $(basename $TRELLIS_ROOT) + git clone https://github.com/SymbiFlow/prjtrellis.git $(basename $TRELLIS_ROOT) + cd $(basename $TRELLIS_ROOT) + + git reset --hard $TRELLIS_REVISION + git submodule update --init --recursive + . environment.sh + rm -rf database + git clone https://github.com/SymbiFlow/prjtrellis-db.git database + cd database + git reset --hard $TRELLISDB_REVISION + cd .. + cd libtrellis + cmake . + make -j8 +)
diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 0000000..79cb082 --- /dev/null +++ b/.circleci/config.yml
@@ -0,0 +1,42 @@ +version: 2 +jobs: + build: + docker: + - image: eu.gcr.io/symbiotic-containers-public/nextpnr-ci:20180824-012428 + steps: + - checkout + # Restore cache from arch-deps.sh + - restore_cache: + key: arch-deps-{{ checksum ".circleci/arch-deps.sh" }} + # Get arch deps if not found in cache + - run: + name: Install Arch dependencies + command: | + export ICESTORM_ROOT=/circleci/icestorm + export TRELLIS_ROOT=/circleci/trellis + if [ ! -e $ICESTORM_ROOT ] || [ ! -e $TRELLIS_ROOT ]; then + echo "Installing arch dependencies..." + bash .circleci/arch-deps.sh + fi + # Cache arch deps + - save_cache: + key: arch-deps-{{ checksum ".circleci/arch-deps.sh" }} + paths: + - /circleci/icestorm + - /circleci/trellis + + # Build! We first build BBASm in parallel, then the chipdbs sequentially, + # then the rest in parallel. This is to not exceed the default 4G memory + # limit on CirclCI. + - run: + name: Build + command: | + mkdir build + cd build + cmake .. -DARCH=all -DBUILD_TESTS=ON -DCOVERAGE=ON \ + -DTRELLIS_ROOT=/circleci/trellis \ + -DICEBOX_ROOT=/circleci/icestorm/share/icebox + make -j2 bbasm + make -j1 ice40_chipdb + make -j1 ecp5_chipdb + make -j2
diff --git a/.circleci/env/Dockerfile b/.circleci/env/Dockerfile new file mode 100644 index 0000000..7eb4d7d --- /dev/null +++ b/.circleci/env/Dockerfile
@@ -0,0 +1,8 @@ +FROM ubuntu:xenial-20180808 + +# Install system dependencies. +RUN set -e -x ;\ + apt-get -y update ;\ + apt-get -y upgrade ;\ + apt-get -y install build-essential qtbase5-dev cmake python3-dev \ + libboost-all-dev git pkg-config libftdi-dev lcov
diff --git a/.circleci/env/README b/.circleci/env/README new file mode 100644 index 0000000..9733705 --- /dev/null +++ b/.circleci/env/README
@@ -0,0 +1,31 @@ +NextPNR CI Builder Image +======================== + +This directory contains a Dockerfile that is used to build an environment image +for the NextPNR Continuous Integration system. + +We use a custom image to speed up the build process - so that we don't have to +`apt` install all the dependencies on a bare Ubuntu image on every CI run. + +Building Locally +---------------- + + docker build -t nextpnr-ci .circleci/env + +Updating image used by CircleCI +------------------------------- + +CircleCI will use whatever image is specified in `.circleci/config.yml`. +Currently we store images in the Google Container Registry, in the +`symbiotic-containers-public` organization. *If you update the Dockerfile, the +image will need to be manually rebuilt and pushed by the Yosys/SymbioticEDA +team. + +Here's what needs to be run: + + TAG=eu.gcr.io/symbiotic-containers-public/nextpnr-ci:"$(date +%Y%m%d-%H%M%S)" + docker build -t "$TAG" .circleci/env + docker push "$TAG" + echo "New image: $TAG" + +Then update `.circleci/config.yml`.
diff --git a/CMakeLists.txt b/CMakeLists.txt index 3796c45..9ce942e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt
@@ -54,7 +54,7 @@ set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/3rdparty/sanitizers-cmake/cmake;." ${CMAKE_MODULE_PATH}) if (COVERAGE) - include(CodeCoverage) + include("${CMAKE_SOURCE_DIR}/CodeCoverage.cmake") endif() if(NOT DEFINED CMAKE_SUPPRESS_DEVELOPER_WARNINGS)