#!/usr/bin/env bash
# Copyright 2021 SkyWater PDK 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.
#
# SPDX-License-Identifier: Apache-2.0

set -xe
set -o pipefail

export PATH=/host/out/magic/bin:$PATH

cd /host/github/RTimothyEdwards/open_pdks
git describe

POSSIBLE_TOOLS="all" # klayout magic netgen irsim openlane qflow xschem"
for TTOOL in $POSSIBLE_TOOLS; do

  #  --enable-klayout
  if [ x$TTOOL = xklayout -o x$TTOOL = xall ]; then
    KLAYOUT=--enable-klayout
  else
    KLAYOUT=--disable-klayout
  fi

  #  --enable-magic
  if [ x$TTOOL = xmagic -o x$TTOOL = xall  ]; then
    MAGIC=--enable-magic
  else
    MAGIC=--disable-magic
  fi

  #  --enable-netgen
  if [ x$TTOOL = xnetgen -o x$TTOOL = xall ]; then
    NETGEN=--enable-netgen
  else
    NETGEN=--disable-netgen
  fi

  #  --enable-irsim
  if [ x$TTOOL = xirsim -o x$TTOOL = xall ]; then
    IRSIM=--enable-irsim
  else
    IRSIM=--disable-irsim
  fi

  #  --enable-openlane
  if [ x$TTOOL = xopenlane -o x$TTOOL = xall ]; then
    OPENLANE=--enable-openlane
  else
    OPENLANE=--disable-openlane
  fi

  #  --enable-qflow
  if [ x$TTOOL = xqflow -o x$TTOOL = xall ]; then
    QFLOW=--enable-qflow
  else
    QFLOW=--disable-qflow
  fi

  #  --enable-xschem
  if [ x$TTOOL = xxschem -o x$TTOOL = xall ]; then
    XSCHEM=--enable-xschem
  else
    XSCHEM=--disable-xschem
  fi

  echo
  echo "========================================="
  echo " Building PDK files for $TTOOL"
  echo "-----------------------------------------"
  ./configure \
	--enable-sky130-pdk=/host/github/google/skywater-pdk \
	--enable-alpha-sky130 \
	--prefix=/usr/local \
        $KLAYOUT \
        $MAGIC \
        $NETGEN \
        $IRSIM \
        $OPENLANE \
        $QFLOW \
        $XSCHEM \

  make -j$(nproc) | tee /host/out/pdk-$TTOOL.build.log
  make DESTDIR=/host/out/pdk-$TTOOL install | tee /host/out/pdk-$TTOOL.install.log
  echo "========================================="

  echo
  echo "========================================="
  echo " PDK files for $TTOOL"
  echo "-----------------------------------------"
  find /host/out/pdk-$TTOOL | sort
  echo "========================================="
  echo
  if [ ! -d /host/out/pdk-$TTOOL ]; then
     echo "Missing install files for $TTOOL"
     exit 1
  fi
done
