Replace CI
This removes the technical debt-laden CI with a new one based on Nix and Volare.
The CI uses Magic 8.3.515 and Volare 0.20.6 to build both sky130 and gf180mcu. A successful build is required for the CI to clear. This will run on all pushes and pull requests, and it takes about 30 minutes.
In the event a new tag is pushed and the secret `BOT_GH_TOKEN` is specified, the result of the build is pushed to Volare as a pre-release. Pre-releases may be converted to full releases at the Volare maintainer's discretion.
diff --git a/.github/Dockerfile b/.github/Dockerfile
deleted file mode 100644
index 84f612d..0000000
--- a/.github/Dockerfile
+++ /dev/null
@@ -1,52 +0,0 @@
-# Copyright 2020 Efabless Corporation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# syntax = docker/dockerfile:1.0-experimental
-FROM almalinux:8 as build
-
-# Common development tools and libraries (kitchen sink approach)
-RUN yum groupinstall -y "Development Tools"
-
-# magic dependencies
-RUN yum install -y csh wget tcl-devel tk-devel libX11-devel cairo-devel ncurses-devel
-
-#General utils
-RUN yum install -y git tcl tk libjpeg libgomp libXext libSM libXft libffi cairo gettext Xvfb
-RUN yum install -y python3 python3-pip python3-tkinter python3-devel
-
-RUN git clone git://opencircuitdesign.com/magic
-
-WORKDIR magic
-
-# build
-RUN ./configure --prefix=/build && \
- make -j4 && \
- make install
-
-
-ENV MAGIC_ROOT=/magic_root
-ENV BUILD_PATH=/build/
-
-ENV PATH=$MAGIC_ROOT:$MAGIC_ROOT/scripts:$BUILD_PATH/bin:$BUILD_PATH/bin/Linux-x86_64:$BUILD_PATH/pdn/scripts:$PATH
-ENV LD_LIBRARY_PATH=$BUILD_PATH/lib:$BUILD_PATH/lib/Linux-x86_64:$LD_LIBRARY_PATH
-ENV MANPATH=$BUILD_PATH/share/man:$MANPATH
-
-
-RUN mkdir -p /build/version/
-
-RUN date +"Build Timestamp: %Y-%m-%d_%H-%M-%S" > /build/version/magic.version
-RUN git rev-parse HEAD >> /build/version/magic.version
-RUN tar -czf /build.tar.gz /build
-
-WORKDIR /magic_root
diff --git a/.github/Makefile b/.github/Makefile
deleted file mode 100644
index 0447bcf..0000000
--- a/.github/Makefile
+++ /dev/null
@@ -1,71 +0,0 @@
-# Copyright 2020 Efabless Corporation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# Adopted from OpenLANE's Makefile.
-
-OPEN_PDKS_ROOT ?= $(shell pwd)/..
-THREADS ?= $(shell nproc)
-STD_CELL_LIBRARY ?= sky130_fd_sc_hd
-SKYWATER_COMMIT ?= main
-
-.DEFAULT_GOAL := all
-
-.PHONY: all
-all: pdk
-
-.PHONY: pdk
-pdk: skywater-pdk skywater-library build-pdk
-
-$(PDK_ROOT)/skywater-pdk:
- git clone https://github.com/google/skywater-pdk.git $(PDK_ROOT)/skywater-pdk
-
-.PHONY: skywater-pdk
-skywater-pdk: $(PDK_ROOT)/skywater-pdk
- cd $(PDK_ROOT)/skywater-pdk && \
- git checkout -qf $(SKYWATER_COMMIT)
-
-.PHONY: skywater-library
-skywater-library: $(PDK_ROOT)/skywater-pdk
- cd $(PDK_ROOT)/skywater-pdk && \
- git submodule update --init libraries/$(STD_CELL_LIBRARY)/latest && \
- $(MAKE) -j$(THREADS) $(STD_CELL_LIBRARY)
-
-.PHONY: all-skywater-libraries
-all-skywater-libraries: skywater-pdk
- cd $(PDK_ROOT)/skywater-pdk && \
- git submodule update --init libraries/sky130_fd_sc_hd/latest && \
- git submodule update --init libraries/sky130_fd_sc_hs/latest && \
- git submodule update --init libraries/sky130_fd_sc_hdll/latest && \
- git submodule update --init libraries/sky130_fd_sc_ms/latest && \
- git submodule update --init libraries/sky130_fd_sc_ls/latest && \
- git submodule update --init libraries/sky130_fd_sc_hvl/latest && \
- $(MAKE) -j$(THREADS) timing
-
-.PHONY: build-pdk
-build-pdk: $(PDK_ROOT)/skywater-pdk
- [[ -d $(PDK_ROOT)/sky130A ]] && \
- (echo "Warning: A sky130A build already exists under $(PDK_ROOT). It will be deleted first!" && \
- sleep 5 && \
- rm -rf $(PDK_ROOT)/sky130A) || \
- true
- cd $(OPEN_PDKS_ROOT) && \
- ./configure \
- --prefix=$(PDK_ROOT) \
- --datarootdir=$(PDK_ROOT) \
- --enable-sky130-pdk=$(PDK_ROOT)/skywater-pdk \
- && \
- cd sky130 && \
- $(MAKE) veryclean && \
- $(MAKE) && \
- $(MAKE) install-local
diff --git a/.github/build-docker.sh b/.github/build-docker.sh
deleted file mode 100755
index c92792d..0000000
--- a/.github/build-docker.sh
+++ /dev/null
@@ -1,23 +0,0 @@
-# Copyright 2020 Efabless Corporation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# exit when any command fails
-set -e
-
-docker build --rm -t magic .
-
-# Copy the build.tar.gz out of the docker container
-docker run --name magic magic:latest
-docker cp magic:/build.tar.gz ./magic.tar.gz
-docker rm magic
diff --git a/.github/build.sh b/.github/build.sh
deleted file mode 100755
index 8f08cb3..0000000
--- a/.github/build.sh
+++ /dev/null
@@ -1,70 +0,0 @@
-# Copyright 2020 Efabless Corporation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# exit when any command fails
-set -e
-
-export OPEN_PDKS_ROOT=$(pwd)
-export PDK_ROOT=$(pwd)/pdks
-mkdir -p $PDK_ROOT
-
-cd .github
-
-echo ::group::.github/build-docker.sh
-bash ./build-docker.sh
-echo ::endgroup::
-
-echo ::group::make skywater-pdk
-make skywater-pdk
-echo ::endgroup::
-
-if [ x"$STD_CELL_LIBRARY" = xall ]; then
- cnt=0
- until make all-skywater-libraries; do
- cnt=$((cnt+1))
- if [ $cnt -eq 5 ]; then
- exit 2
- fi
- rm -rf $PDK_ROOT/skywater-pdk
- make skywater-pdk
- done
-else
- cnt=0
- until make skywater-library; do
- cnt=$((cnt+1))
- if [ $cnt -eq 5 ]; then
- exit 2
- fi
- rm -rf $PDK_ROOT/skywater-pdk
- make skywater-pdk
- done
-fi
-
-cd ..
-
-docker run \
- \
- -v $(pwd):/some_root \
- -v $(pwd)/.github:/build_root \
- -v $OPEN_PDKS_ROOT:$OPEN_PDKS_ROOT \
- -v $PDK_ROOT:$PDK_ROOT \
- \
- -e OPEN_PDKS_ROOT=$OPEN_PDKS_ROOT \
- -e PDK_ROOT=$PDK_ROOT \
- -u $(id -u $USER):$(id -g $USER) \
- \
- magic:latest \
- \
- bash -c "cd /build_root && make build-pdk"
-exit 0
diff --git a/.github/capture.sh b/.github/capture.sh
deleted file mode 100644
index 559b2fc..0000000
--- a/.github/capture.sh
+++ /dev/null
@@ -1,82 +0,0 @@
-#!/bin/bash
-# Copyright 2021 Open PDKs Authors
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-mkdir -p ${GITHUB_WORKSPACE}/output/
-
-# Copy build log.
-cp ./sky130/sky130A_install.log ${GITHUB_WORKSPACE}/output/
-
-# Copy any core dupmps into the output directory.
-find . -name core -not \( -path '*/skywater-pdk/*' -prune \) | \
- awk -v ln=1 '{print "cp " $0 " ${GITHUB_WORKSPACE}/output/core." ln++ }' | \
- bash
-
-# Copy the magic tarball into output
-cp .github/magic.tar.gz ${GITHUB_WORKSPACE}/output/
-
-# Try to create a deterministic tar file
-# https://reproducible-builds.org/docs/archives/
-(
- SKY130_DIR="$(pwd)/pdks/pdk/sky130A"
- if ! [[ -d $SKY130_DIR ]]; then
- echo "Missing $SKY130_DIR"
- exit -1
- fi
-
- echo ::group::PDK tarball
-
- cd ${SKY130_DIR}
- tar \
- --create \
- --bzip2 \
- --verbose \
- \
- --mtime='2020-05-07 00:00Z' \
- --sort=name \
- --owner=0 \
- --group=0 \
- --numeric-owner \
- --pax-option=exthdr.name=%d/PaxHeaders/%f,delete=atime,delete=ctime \
- \
- --file ${GITHUB_WORKSPACE}/output/pdk-SKY130A-${STD_CELL_LIBRARY}.tar.bz2 .
-
- echo ::endgroup::
-)
-
-# Free up disk space so the GitHub Action runner doesn't die when collecting
-# the artifacts.
-echo ::group::Freeup space
-
-df -h
-
-for DIR in ${GITHUB_WORKSPACE}/*; do
- if [ x$DIR = x"${GITHUB_WORKSPACE}/output" ]; then
- continue
- fi
- echo
- echo "Removing $DIR"
- rm -rvf $DIR
-done
-
-df -h
-
-echo ::endgroup::
-
-# Output which files are being saved.
-echo ::group::Output files
-du -h ${GITHUB_WORKSPACE}/output/*
-echo ::endgroup::
-
-exit 0
diff --git a/.github/test.sh b/.github/test.sh
deleted file mode 100755
index b0ef360..0000000
--- a/.github/test.sh
+++ /dev/null
@@ -1,38 +0,0 @@
-#!/bin/bash
-# Copyright 2020 Efabless Corporation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-SKY130_DIR="$(pwd)/pdks/pdk/sky130A"
-if ! [[ -d $SKY130_DIR ]]; then
- echo "Missing $SKY130_DIR"
- exit -1
-fi
-
-du -h $SKY130_DIR
-
-echo ::group::Output files
-echo
-find $SKY130_DIR | sort
-echo
-echo ::endgroup::
-
-SIZE=$(du -sb $SKY130_DIR | cut -f1)
-# 250MB = 131,072,000 bytes; a fair estimate of the size of one library, I guess.
-if [[ $SIZE -lt 131072000 ]]; then
- echo 'size is less than 125MB'
- exit -1
-fi
-echo 'Built without fatal errors'
-echo "sky130A size is $SIZE bytes"
-exit 0
diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml
new file mode 100644
index 0000000..0c92667
--- /dev/null
+++ b/.github/workflows/ci.yaml
@@ -0,0 +1,58 @@
+name: Build
+
+on:
+ push:
+ pull_request:
+
+jobs:
+ build-and-test:
+ strategy:
+ matrix:
+ os:
+ [
+ {
+ name: "macOS 14",
+ family: "macOS",
+ runner: "macos-14",
+ archs: "arm64",
+ },
+ ]
+ pdk: [sky130, gf180mcu]
+ name: Build ${{ matrix.pdk }} with Volare | ${{ matrix.os.name }} | ${{ matrix.os.archs }}
+ runs-on: ${{ matrix.os.runner }}
+ steps:
+ - name: Clear Build Space
+ run: |
+ echo "== Before =="
+ df -h
+ for xcode in /Applications/Xcode*; do
+ echo "== Removing $xcode … =="
+ rm -rf $xcode
+ done
+ echo "== After =="
+ df -h
+ - uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+ - uses: DeterminateSystems/nix-installer-action@main
+ with:
+ extra-conf: |
+ extra-substituters = https://openlane.cachix.org
+ extra-trusted-public-keys = openlane.cachix.org-1:qqdwh+QMNGmZAuyeQJTH9ErW57OWSvdtuwfBKdS254E=
+ - name: Install Magic, Volare
+ run: nix profile install github:efabless/nix-eda/3d8f596ec8831538acdd61889d056378b5bea16b#magic-vlsi github:efabless/volare/0.20.6
+ - name: Set PDK root
+ run: |
+ mkdir -p root
+ echo "PDK_ROOT=$PWD/root" >> $GITHUB_ENV
+ - name: Build with Volare
+ run: |
+ volare build --include-libraries all --pdk ${{ matrix.pdk }} --use-repo-at open_pdks=$PWD --jobs $(sysctl -n hw.logicalcpu) --clear-build-artifacts $(git rev-parse HEAD)
+ - name: Push if New Tag
+ if: github.ref_type == 'tag'
+ run: |
+ if [ "${{ secrets.BOT_GH_TOKEN }}" != "" ]; then
+ volare push --pre --token ${{ secrets.BOT_GH_TOKEN }} --pdk ${{ matrix.pdk }} $(git rev-parse HEAD)
+ else
+ echo "Secret BOT_GH_TOKEN unset. Not attempting to push."
+ fi
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
deleted file mode 100644
index 638da03..0000000
--- a/.github/workflows/ci.yml
+++ /dev/null
@@ -1,52 +0,0 @@
-name: CI
-
-on:
- push:
- pull_request:
- workflow_dispatch:
-
-
-jobs:
-
- Run:
- strategy:
- fail-fast: false
- matrix:
- library:
- - sky130_fd_sc_hd
- - sky130_fd_sc_hdll
- - sky130_fd_sc_hs
- - sky130_fd_sc_ms
- - sky130_fd_sc_ls
- - sky130_fd_sc_hvl
- - all
- env:
- STD_CELL_LIBRARY: ${{ matrix.library }}
-
- runs-on: ubuntu-latest
-
- steps:
- - uses: actions/checkout@v3
- with:
- fetch-depth: 0
- submodules: true
-
- - name: Build
- run: |
- bash .github/build.sh
-
- - name: Test
- run: |
- bash .github/test.sh
-
- - name: Capture
- if: ${{ always() }}
- run: |
- bash .github/capture.sh
-
- - name: Upload
- if: ${{ always() }}
- uses: actions/upload-artifact@v3
- with:
- name: ${{ matrix.library }}
- path: ${{ github.workspace }}/output/**