From 891ae6b42325143d746c9aff1afb24de61c68ef7 Mon Sep 17 00:00:00 2001 From: Richard Xia Date: Fri, 2 Feb 2018 00:58:32 -0800 Subject: [PATCH 1/3] Add scripts for building .deb and .rpm packages. --- .travis.yml | 205 +++++----------------------------------------- Dockerfile.centos | 15 ++++ Dockerfile.ubuntu | 8 ++ README.adoc | 23 ++++++ build-deb.sh | 25 ++++++ build-rpm.sh | 46 +++++++++++ 6 files changed, 137 insertions(+), 185 deletions(-) create mode 100644 Dockerfile.centos create mode 100644 Dockerfile.ubuntu create mode 100755 build-deb.sh create mode 100755 build-rpm.sh diff --git a/.travis.yml b/.travis.yml index b0623c38c..ecf3fd670 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,187 +1,22 @@ -# DESCRIPTION: Travis-CI config -# -# Copyright 2003-2020 by Wilson Snyder. 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. -# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0 - -version: ~> 1.0 - -os: linux -language: cpp -cache: ccache - -env: - global: - - VERILATOR_CACHE=$HOME/verilator_cache - - VERILATOR_ROOT=$PWD - - VERILATOR_NUM_JOBS=$(echo `nproc` + 1 | bc) - - VERILATOR_CONFIG_FLAGS="--enable-maintainer-mode --enable-longtests" - - VERILATOR_AUTHOR_SITE=1 - - OBJCACHE=ccache - -cache: - directories: - - $VERILATOR_CACHE +services: + - docker before_install: -# Perl modules needed for testing -# Not listing Bit::Vector as slow to install, and only skips one test - - yes yes | sudo cpan -fi Unix::Processors Parallel::Forker - - sudo apt-get install gdb gtkwave - - sudo apt-get install libgoogle-perftools-dev -before_script: - - bash -x ci/build_vcddiff.sh - - bash -x ci/build_verilator.sh -after_script: - - ccache -s - -stages: - - "Build Verilator" - - test - -jobs: - include: - - if: type != cron - stage: "Build Verilator" - name: Build Verilator - compiler: gcc - script: echo "Done building Verilator" -# Non-cron build will just run on whatever linux flavor we get - - if: type != cron - stage: test - name: Dist test - compiler: gcc - script: ci/test.sh dist - - if: type != cron - stage: test - name: Vlt test - compiler: gcc - script: ci/test.sh vlt - - if: type != cron - stage: test - name: Vltmt set 0 test - compiler: gcc - script: ci/test.sh vltmt0 - - if: type != cron - stage: test - name: Vltmt set 1 test - compiler: gcc - script: ci/test.sh vltmt1 -# Cron builds try different OS/compiler combinations - - if: type = cron - stage: "Build Verilator" - name: Build xenial gcc Verilator - os: linux - dist: xenial - compiler: gcc - script: echo "Done building Verilator" - - if: type = cron - stage: test - name: Xenial gcc dist test - os: linux - dist: xenial - compiler: gcc - script: ci/test.sh dist - - if: type = cron - stage: test - name: Xenial gcc vlt test - os: linux - dist: xenial - compiler: gcc - script: ci/test.sh vlt - - if: type = cron - stage: test - name: Xenial gcc vltmt test - os: linux - dist: xenial - compiler: gcc - script: ci/test.sh vltmt - - if: type = cron - stage: "Build Verilator" - name: Build xenial clang Verilator - os: linux - dist: xenial - compiler: clang - script: echo "Done building Verilator" - - if: type = cron - stage: test - name: Xenial clang dist test - os: linux - dist: xenial - compiler: clang - script: ci/test.sh dist - - if: type = cron - stage: test - name: Xenial clang vlt test - os: linux - dist: xenial - compiler: clang - script: ci/test.sh vlt - - if: type = cron - stage: test - name: Xenial clang vltmt test - os: linux - dist: xenial - compiler: clang - script: ci/test.sh vltmt -# - if: type = cron -# stage: "Build Verilator" -# name: Build OSX gcc Verilator -# os: osx -# compiler: gcc -# script: echo "Done building Verilator" -# - if: type = cron -# stage: test -# name: OSX gcc dist test -# os: osx -# compiler: gcc -# script: ci/test.sh dist -# - if: type = cron -# stage: test -# name: OSX gcc vlt test -# os: osx -# compiler: gcc -# script: ci/test.sh vlt -# - if: type = cron -# stage: test -# name: OSX gcc vltmt test -# os: osx -# compiler: gcc -# script: ci/test.sh vltmt - - if: type = cron - stage: "Build Verilator" - name: Build trusty gcc Verilator - os: linux - dist: trusty - compiler: gcc - script: echo "Done building Verilator" - - if: type = cron - stage: test - name: Trusty gcc dist test - os: linux - dist: trusty - compiler: gcc - script: ci/test.sh dist - - if: type = cron - stage: test - name: Trusty gcc vlt test - os: linux - dist: trusty - compiler: gcc - script: ci/test.sh vlt - - if: type = cron - stage: test - os: linux - dist: trusty - name: Trusty gcc vltmt test - compiler: gcc - script: ci/test.sh vltmt - -notifications: - email: - if: repo = verilator/verilator - recipients: - - wsnyder@wsnyder.org - - todd.strader@gmail.com + - docker build -f Dockerfile.ubuntu -t verilator-ubuntu . + - docker build -f Dockerfile.centos -t verilator-centos . + +script: + - docker run --rm -e PACKAGE_VERSION=${TRAVIS_TAG:-0.0-UNTAGGED} -v $PWD:/usr/src/app verilator-ubuntu ./build-deb.sh + - docker run --rm -e PACKAGE_VERSION=${TRAVIS_TAG:-0.0-UNTAGGED} -v $PWD:/usr/src/app verilator-centos ./build-rpm.sh + +deploy: + provider: releases + api_key: + secure: "jr4NxwYNXdG7GfPbTwoIXUeY7NxPFbKfo29CW8tt67dBI+clIN/EhNJKQ05qtS5gvmGamVQxhD5rZ0g2Fb7crJSk3oI6196WcYLTNDvp2pl+IanYyPYRucQdAxwd7L0/uyaz9E74IGfr3tlzzDqvlUhOWEZC6cGiIHL0t2Fi6YRpMzes7o/E4T2TvzRvSs/mqYP4sWpeUjK7NjXjqlbHhOPEGxfTwgY+lglPRmNo4A1nYJK7Kv7uGQJ675ye6aF643uX15W/uwetdEUoa08ObF7GiIsLdiv7NXAZgohoqBXeqoRuax+Xc0af4xn+lD0ix4sFxTqOR/XXawjEeVCpQtFI4knTkMIwyDr78EabLu7efxvBaeIwT3ZPET0ayOLMfFUf0SG7pPMIkrmY8T4TVR2mwzodncn4Ym/rKg1HClI3Pf58B1/+fgnAmqbHfW4KFNrVzBd2/2F4Xz0GCZAB9OoeBmQb044Ixy7ccX/zVgcypLkrY/4mWjx7IMBHC4P8Xpepz7jheWZfBr+HS/aD3U6ErjOkELK/EbECKtO/NBEEQj2KanPsmHU4HhdexhIu1KYyjoq+1p8oczZb5uD4BgwprRZhVNJXlV71G5Rrz5DFT6U0MHkLWJe5QiZtZE+WPRAMrtJWTXFjjDSmEGyNlI10R/qvFiB09LTXDmtPH1Q=" + file: + - verilator_${TRAVIS_TAG}_amd64.deb + - verilator-${TRAVIS_TAG}.x86_64.rpm + skip_cleanup: true + on: + repo: sifive/verilator + tags: true diff --git a/Dockerfile.centos b/Dockerfile.centos new file mode 100644 index 000000000..ff3a5b549 --- /dev/null +++ b/Dockerfile.centos @@ -0,0 +1,15 @@ +FROM centos:7 +RUN yum update -y && yum install -y \ + autoconf \ + bison \ + flex \ + gcc-c++ \ + git \ + glibc-static \ + libstdc++-static \ + perl-version \ + perl-Digest-MD5 \ + rsync \ + rpm-build \ + make +WORKDIR /usr/src/app diff --git a/Dockerfile.ubuntu b/Dockerfile.ubuntu new file mode 100644 index 000000000..4132f1417 --- /dev/null +++ b/Dockerfile.ubuntu @@ -0,0 +1,8 @@ +FROM ubuntu:16.04 +RUN apt-get update && apt-get install -y \ + autoconf \ + bison \ + flex \ + g++ \ + make +WORKDIR /usr/src/app diff --git a/README.adoc b/README.adoc index 3e2eb528b..f784828c0 100644 --- a/README.adoc +++ b/README.adoc @@ -1,4 +1,27 @@ // Github doesn't render images unless absolute URL + += SIFIVE FORK NOTES +This is a fork of the Verilator project which adds some steps for automatically +creating .deb and .rpm packages from a release tag. Travis is configured to +run a build and upload a release to GitHub whenever a tag is created. You can +simply cherry-pick the latest commit on top of a real Verilator release and +create a tag from that. + +[source,sh] +---- +# Note: You should replace 4.028 with whichever version you are trying to use. +git remote add verilator git@github.com:verilator/verilator.git +git fetch verilator +git checkout v4.028 +git cherry-pick origin/master -X theirs +git tag 4.028-0sifive1 +git push origin 4.028-0sifive1 +---- + +For posterity, the old `master` branch from this SiFive fork with the old +instructions for performing a release is available at +https://github.com/sifive/verilator/tree/old-master-2018-02-02. + :!toc: ifdef::env-github[] diff --git a/build-deb.sh b/build-deb.sh new file mode 100755 index 000000000..4b1d56c90 --- /dev/null +++ b/build-deb.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +set -eux + +pkg_arch=amd64 +pkg_dir=$(realpath ./verilator_${PACKAGE_VERSION}_${pkg_arch}) + +autoconf +./configure +make clean +make +make test +make install DESTDIR=$pkg_dir + +mkdir $pkg_dir/DEBIAN +cat << EOF > $pkg_dir/DEBIAN/control +Package: verilator +Version: ${PACKAGE_VERSION} +Architecture: ${pkg_arch} +Maintainer: Richard Xia +Depends: perl (>= 5.22.1) +Description: fast free Verilog simulator +EOF + +dpkg-deb --build $pkg_dir diff --git a/build-rpm.sh b/build-rpm.sh new file mode 100755 index 000000000..1733ffcb5 --- /dev/null +++ b/build-rpm.sh @@ -0,0 +1,46 @@ +#!/bin/bash + +set -eux + +pkg_arch=x86_64 +pkg_distro=centos +pkg_dir=$(realpath ./verilator_${PACKAGE_VERSION}_${pkg_arch}_${pkg_distro}) + +pkg_version=$(echo ${PACKAGE_VERSION} | cut -d- -f1) +pkg_release=$(echo ${PACKAGE_VERSION} | cut -d- -f2) + +autoconf +./configure +make clean +make +make test +make install DESTDIR=$pkg_dir + +cat << EOF > verilator.spec +Name: verilator +Version: ${pkg_version} +Release: ${pkg_release} +Requires: perl >= 5.2.11 +Summary: Verilog HDL simulator +License: Perl Artistic License and GNU Lesser General Public License + +%description +Verilog HDL simulator + +%prep + +%build + +%install +rsync -a ${pkg_dir}/ %buildroot/ + +%files +%defattr(0644, root,root) +%attr(0755, root,root) /usr/local/bin/verilator* +/usr/local/share/man/man1/verilator* +/usr/local/share/pkgconfig/verilator.pc +/usr/local/share/verilator/* +EOF + +rpmbuild -bb verilator.spec +cp /root/rpmbuild/RPMS/${pkg_arch}/verilator-${PACKAGE_VERSION}.${pkg_arch}.rpm ./ From 4e895c237170e3f16d9a265f83fbc2c8a4057414 Mon Sep 17 00:00:00 2001 From: Albert Huntington Date: Thu, 8 Apr 2021 16:28:08 -0700 Subject: [PATCH 2/3] Updates for verilator 4.2 --- Dockerfile.centos | 3 ++- Dockerfile.ubuntu | 3 ++- README.adoc | 5 +++++ 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/Dockerfile.centos b/Dockerfile.centos index ff3a5b549..cb7e12e62 100644 --- a/Dockerfile.centos +++ b/Dockerfile.centos @@ -11,5 +11,6 @@ RUN yum update -y && yum install -y \ perl-Digest-MD5 \ rsync \ rpm-build \ - make + make \ + python3 WORKDIR /usr/src/app diff --git a/Dockerfile.ubuntu b/Dockerfile.ubuntu index 4132f1417..cfcbb1caf 100644 --- a/Dockerfile.ubuntu +++ b/Dockerfile.ubuntu @@ -4,5 +4,6 @@ RUN apt-get update && apt-get install -y \ bison \ flex \ g++ \ - make + make \ + python3 WORKDIR /usr/src/app diff --git a/README.adoc b/README.adoc index f784828c0..02590d9d5 100644 --- a/README.adoc +++ b/README.adoc @@ -14,6 +14,11 @@ git remote add verilator git@github.com:verilator/verilator.git git fetch verilator git checkout v4.028 git cherry-pick origin/master -X theirs +# git will likely want you to resolve the fact that the README.adoc and +# .travis.yaml files are not in the repo here. +git add README.adoc +git add .travis.yaml +git cherry-pick --continue git tag 4.028-0sifive1 git push origin 4.028-0sifive1 ---- From 4e687f42d31f665319086429b8a549449c6e872f Mon Sep 17 00:00:00 2001 From: Albert Huntington Date: Thu, 8 Apr 2021 17:50:09 -0700 Subject: [PATCH 3/3] Update manifest ignore file. --- MANIFEST.SKIP | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/MANIFEST.SKIP b/MANIFEST.SKIP index c0d696663..d2039670a 100644 --- a/MANIFEST.SKIP +++ b/MANIFEST.SKIP @@ -65,3 +65,7 @@ ci/ obj_dir.* TAGS .*~ +Dockerfile.* +README.adoc +build-deb.sh +build-rpm.sh