blob: da57f44e2199f36e2453e020729a6ddb8cca0dce [file] [log] [blame] [edit]
#! /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
)