#!/bin/bash # DESCRIPTION: Verilator: Travis CI build script # # Copyright 2019 by Todd Strader. This program is free software; you can # redistribute it and/or modify it under the terms of either the GNU # Lesser General Public License Version 3 or the Perl Artistic License # Version 2.0. # # This script builds and caches the Verilator binaries for Travis CI # (and possibly other CI platforms). The Verilator CI system uses this # script, but other CI systems that depend on Verilator may also use # the script. # see: https://github.com/verilator/verilator_ext_tests/blob/master/.travis.yml # To use this script, either checkout Verilator as part of the CI build # process or add Verilator as a Git submodule. Verilator tarballs can # not be used as the script relies on Git revisions for caching. set -e if [ -z "${VERILATOR_NUM_JOBS}" ]; then VERILATOR_NUM_JOBS=$(nproc) fi # Caching would be simpler if we installed without VERILATOR_ROOT, but # it's needed for driver.pl outside of the repo if [ -z "${VERILATOR_ROOT}" ]; then echo "VERILATOR_ROOT not set" exit -1 fi if [ -z "${VERILATOR_CACHE}" ]; then echo "VERILATOR_CACHE not set" exit -1 fi VERILATOR_REV=$(cd "${VERILATOR_ROOT}" && git rev-parse HEAD) echo "Found Verilator rev ${VERILATOR_REV}" CACHED_REV_FILE=${VERILATOR_CACHE}/.rev.txt if [[ ! -f ${CACHED_REV_FILE} || \ $(< ${CACHED_REV_FILE}) != ${VERILATOR_REV} ]]; then echo "Building Verilator" # Unsure why Travis monkies with the capitalization of the stage name, but it does if [[ -n ${TRAVIS_BUILD_STAGE_NAME} && \ ${TRAVIS_BUILD_STAGE_NAME} != "Build verilator" ]]; then echo "WARNING: Building Verilator in Travis build stage other than \"Build verilator\": ${TRAVIS_BUILD_STAGE_NAME}" fi cd ${VERILATOR_ROOT} autoconf && ./configure ${VERILATOR_CONFIG_FLAGS} && make -j ${VERILATOR_NUM_JOBS} # Copy the Verilator build artifacts mkdir -p "${VERILATOR_CACHE}" rm -rf "${VERILATOR_CACHE}/*" cp bin/*bin* "${VERILATOR_CACHE}" # Remember the Git revision echo ${VERILATOR_REV} > ${CACHED_REV_FILE} else echo "Using cached Verilator" cd "${VERILATOR_ROOT}" # Create include/verilated_config.h and maybe other things autoconf && ./configure ${VERILATOR_CONFIG_FLAGS} cp "${VERILATOR_CACHE}/*" bin fi