| #! /bin/bash |
| |
| set -e |
| |
| # Capture some information about what we are generating for. |
| export CURRENT_OWNER="$(git remote get-url origin | sed -e's@/[^/]\+$@@' -e's@.*[:/]\([^:/]\+\)$@\1@')" |
| |
| DBDIR=$PWD |
| TMPDIR=$(mktemp -d) |
| |
| PYTHONHASHSEED=0 |
| |
| PRJXRAY_INFO_REVISION=$(grep "prjxray/commit" Info.md | sed -e's-.*/prjxray/commit/--' -e's/\([0-9a-fA-F]*\).*$/\1/') |
| |
| echo |
| echo "::group::Project X-Ray Database Revision $(git describe --long --tags --always)" |
| echo "--------------------------------------------" |
| git log -1 |
| echo "--------------------------------------------" |
| echo "::endgroup::" |
| echo |
| |
| # Remove any pre-existing html output. |
| for d in html/*; do |
| if [ -d "$d" ]; then |
| rm -rf $d |
| fi |
| done |
| |
| REF="" |
| if [ -d ../prjxray/.git ]; then |
| REF="--reference $(realpath $PWD/../prjxray/.git)" |
| fi |
| |
| # Fetch Project X-ray so we can do the generation. |
| # Try a users version of the repo first, then try the SymbiFlow version if that fails. |
| if [ "$CURRENT_OWNER" != "SymbiFlow" ]; then |
| git clone $REF https://github.com/$CURRENT_OWNER/prjxray.git $TMPDIR/prjxray || true |
| fi |
| if [ ! -d $TMPDIR/prjxray/.git ]; then |
| git clone $REF https://github.com/SymbiFlow/prjxray.git $TMPDIR/prjxray |
| fi |
| |
| # Output some information about the version of Project X-ray we are using. |
| ( |
| cd $TMPDIR/prjxray |
| # Add upstream if it doesn't exist |
| if git remote -v | grep -q SymbiFlow/prjxray; then |
| echo "Upstream repo already exists." |
| else |
| git remote add upstream https://github.com/SymbiFlow/prjxray.git |
| git fetch upstream |
| fi |
| # Make sure we have tags |
| git fetch --tags |
| # Reset to the right revision |
| git reset --hard $PRJXRAY_INFO_REVISION |
| echo |
| echo "::group::Project X-Ray Revision $(git describe --long --tags --always)" |
| echo "--------------------------------------------" |
| echo "Info says version should be $(git describe --long --tags --always $PRJXRAY_INFO_REVISION) ($PRJXRAY_INFO_REVISION)" |
| echo "--------------------------------------------" |
| git log -1 |
| echo "--------------------------------------------" |
| sha256sum htmlgen/htmlgen.py |
| echo "--------------------------------------------" |
| echo |
| rm -rf database |
| ln -s $DBDIR database |
| echo "::endgroup::" |
| ) |
| |
| # Generate the HTML for each device we have a settings file for. |
| for SETTINGS in $(ls $TMPDIR/prjxray/settings/*.sh | grep '7.sh$'); do |
| DEVICE="$(basename $SETTINGS .sh)" |
| |
| export PYTHONPATH=$PYTHONPATH:$TMPDIR/prjxray |
| |
| echo |
| echo "::group::Generating for $DEVICE" |
| echo "--------------------------------------------" |
| echo "settings.sh $(sha256sum $SETTINGS)" |
| cat $SETTINGS |
| echo "--------------------------------------------" |
| python3 $TMPDIR/prjxray/htmlgen/htmlgen.py --settings=$SETTINGS |
| echo "--------------------------------------------" |
| cp -a $DEVICE/* ./html/$DEVICE/ |
| echo "--------------------------------------------" |
| echo |
| |
| if [ -d $DEVICE/gridinfo ]; then |
| echo |
| echo "Setting up tile grid viewer JSON for $DEVICE" |
| echo "--------------------------------------------" |
| for F in svg-pan-zoom.js gridinfo.html; do |
| cp -v $TMPDIR/prjxray/gridinfo/$F html/$DEVICE/gridinfo/ |
| done |
| echo "--------------------------------------------" |
| for GRID in html/$DEVICE/gridinfo/*.txt; do |
| DEVICE_GRID="$(basename $GRID .txt)" |
| echo |
| echo "Creating tile grid viewer JSON for $DEVICE_GRID" |
| echo "--------------------------------------------" |
| python3 $TMPDIR/prjxray/gridinfo/gridinfo-txt2json.py html/$DEVICE/gridinfo/$DEVICE_GRID $DEVICE_GRID |
| echo "--------------------------------------------" |
| done |
| fi |
| echo "::endgroup::" |
| |
| done |
| |
| cp LICENSE html/LICENSE |
| |
| # Generate the index page from the Info.md file |
| python3 -m markdown \ |
| -x markdown.extensions.fenced_code \ |
| -x markdown.extensions.tables \ |
| -x markdown.extensions.codehilite \ |
| -x markdown.extensions.toc \ |
| Info.md > html/index.html |
| |
| # Output a summary of the generated stuff |
| ( |
| echo |
| echo "::group::HTML Results" |
| echo "--------------------------------------------" |
| sha256sum $(find html -type f | sort) |
| echo "--------------------------------------------" |
| echo "::endgroup::" |
| echo |
| ) |