Merge pull request #1927 from daniestevez/patch-1

fuzzers: fix typo in 011-clb-ffconfig README
diff --git a/.github/autolabeler.yml b/.github/autolabeler.yml
index da07a7b..816b125 100644
--- a/.github/autolabeler.yml
+++ b/.github/autolabeler.yml
@@ -3,6 +3,6 @@
 parts-minitests: ["minitests"]
 parts-experiments: ["experiments"]
 parts-docs: ["docs", "*.md", "COPYING"]
-parts-infra: [".travis.yml", ".github", ".style.yapf", "vagrant", "download-latest-db.sh"]
+parts-infra: [".github", ".style.yapf", "vagrant", "download-latest-db.sh"]
 parts-tools: ["tools", "utils", "htmlgen"]
 parts-third-party: ["third_party", ".gitmodules"]
diff --git a/.github/kokoro/ctest2junit.xsl b/.github/ctest2junit.xsl
similarity index 100%
rename from .github/kokoro/ctest2junit.xsl
rename to .github/ctest2junit.xsl
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index c4125e4..14e73a8 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -1,8 +1,13 @@
 version: 2
 updates:
 - package-ecosystem: gitsubmodule
-  directory: "/"
+  directory: /
   schedule:
     interval: weekly
     day: saturday
   open-pull-requests-limit: 10
+- package-ecosystem: github-actions
+  directory: /
+  schedule:
+    interval: weekly
+  open-pull-requests-limit: 99
diff --git a/.github/kokoro/continuous-db-artix7.cfg b/.github/kokoro/continuous-db-artix7.cfg
deleted file mode 100644
index e58de2f..0000000
--- a/.github/kokoro/continuous-db-artix7.cfg
+++ /dev/null
@@ -1,44 +0,0 @@
-# Format: //devtools/kokoro/config/proto/build.proto
-
-build_file: "symbiflow-prjxray-continuous-db-artix7/.github/kokoro/db-full.sh"
-
-timeout_mins: 4320
-
-action {
-  define_artifacts {
-    # File types
-    regex: "**/diff.html"
-    regex: "**/diff.json"
-    regex: "**/diff.patch"
-    regex: "**/*result*.xml"
-    regex: "**/*sponge_log.xml"
-    regex: "**/fuzzers/*.tgz"
-    # Whole directories
-    # regex: "**/build/**" - Currently kokoro dies on number of artifacts.
-    regex: "**/build/*.log"
-    regex: "**/logs_*/**"
-    # The database
-    regex: "**/database/artix7/**"
-    strip_prefix: "github/symbiflow-prjxray-continuous-db-artix7/"
-  }
-}
-
-env_vars {
-  key: "KOKORO_TYPE"
-  value: "continuous"
-}
-
-env_vars {
-  key: "KOKORO_DIR"
-  value: "symbiflow-prjxray-continuous-db-artix7"
-}
-
-env_vars {
-  key: "XRAY_SETTINGS"
-  value: "artix7"
-}
-
-env_vars {
-  key: "XRAY_BUILD_TYPE"
-  value: "full"
-}
diff --git a/.github/kokoro/continuous-db-kintex7.cfg b/.github/kokoro/continuous-db-kintex7.cfg
deleted file mode 100644
index 946d62f..0000000
--- a/.github/kokoro/continuous-db-kintex7.cfg
+++ /dev/null
@@ -1,53 +0,0 @@
-# Format: //devtools/kokoro/config/proto/build.proto
-
-build_file: "symbiflow-prjxray-continuous-db-kintex7/.github/kokoro/db-full.sh"
-
-timeout_mins: 4320
-
-action {
-  define_artifacts {
-    # File types
-    regex: "**/diff.html"
-    regex: "**/diff.json"
-    regex: "**/diff.patch"
-    regex: "**/*result*.xml"
-    regex: "**/*sponge_log.xml"
-    regex: "**/fuzzers/*.tgz"
-    # Whole directories
-    # regex: "**/build/**" - Currently kokoro dies on number of artifacts.
-    regex: "**/build/*.log"
-    regex: "**/logs_*/**"
-    # The database
-    regex: "**/database/kintex7/**"
-    strip_prefix: "github/symbiflow-prjxray-continuous-db-kintex7/"
-  }
-}
-
-env_vars {
-  key: "KOKORO_TYPE"
-  value: "continuous"
-}
-
-env_vars {
-  key: "KOKORO_DIR"
-  value: "symbiflow-prjxray-continuous-db-kintex7"
-}
-
-env_vars {
-  key: "XRAY_SETTINGS"
-  value: "kintex7"
-}
-
-env_vars {
-  key: "XRAY_BUILD_TYPE"
-  value: "full"
-}
-
-before_action {
-  fetch_keystore {
-    keystore_resource {
-      keystore_config_id: 74045
-      keyname: "foss-fpga-tools_xilinx-license"
-    }
-  }
-}
diff --git a/.github/kokoro/continuous-db-spartan7.cfg b/.github/kokoro/continuous-db-spartan7.cfg
deleted file mode 100644
index ebb7e3c..0000000
--- a/.github/kokoro/continuous-db-spartan7.cfg
+++ /dev/null
@@ -1,44 +0,0 @@
-# Format: //devtools/kokoro/config/proto/build.proto
-
-build_file: "symbiflow-prjxray-continuous-db-spartan7/.github/kokoro/db-full.sh"
-
-timeout_mins: 4320
-
-action {
-  define_artifacts {
-    # File types
-    regex: "**/diff.html"
-    regex: "**/diff.json"
-    regex: "**/diff.patch"
-    regex: "**/*result*.xml"
-    regex: "**/*sponge_log.xml"
-    regex: "**/fuzzers/*.tgz"
-    # Whole directories
-    # regex: "**/build/**" - Currently kokoro dies on number of artifacts.
-    regex: "**/build/*.log"
-    regex: "**/logs_*/**"
-    # The database
-    regex: "**/database/spartan7/**"
-    strip_prefix: "github/symbiflow-prjxray-continuous-db-spartan7/"
-  }
-}
-
-env_vars {
-  key: "KOKORO_TYPE"
-  value: "continuous"
-}
-
-env_vars {
-  key: "KOKORO_DIR"
-  value: "symbiflow-prjxray-continuous-db-spartan7"
-}
-
-env_vars {
-  key: "XRAY_SETTINGS"
-  value: "spartan7"
-}
-
-env_vars {
-  key: "XRAY_BUILD_TYPE"
-  value: "full"
-}
diff --git a/.github/kokoro/continuous-db-zynq7.cfg b/.github/kokoro/continuous-db-zynq7.cfg
deleted file mode 100644
index 272b49a..0000000
--- a/.github/kokoro/continuous-db-zynq7.cfg
+++ /dev/null
@@ -1,44 +0,0 @@
-# Format: //devtools/kokoro/config/proto/build.proto
-
-build_file: "symbiflow-prjxray-continuous-db-zynq7/.github/kokoro/db-full.sh"
-
-timeout_mins: 4320
-
-action {
-  define_artifacts {
-    # File types
-    regex: "**/diff.html"
-    regex: "**/diff.json"
-    regex: "**/diff.patch"
-    regex: "**/*result*.xml"
-    regex: "**/*sponge_log.xml"
-    regex: "**/fuzzers/*.tgz"
-    # Whole directories
-    # regex: "**/build/**" - Currently kokoro dies on number of artifacts.
-    regex: "**/build/*.log"
-    regex: "**/logs_*/**"
-    # The database
-    regex: "**/database/zynq7/**"
-    strip_prefix: "github/symbiflow-prjxray-continuous-db-zynq7/"
-  }
-}
-
-env_vars {
-  key: "KOKORO_TYPE"
-  value: "continuous"
-}
-
-env_vars {
-  key: "KOKORO_DIR"
-  value: "symbiflow-prjxray-continuous-db-zynq7"
-}
-
-env_vars {
-  key: "XRAY_SETTINGS"
-  value: "zynq7"
-}
-
-env_vars {
-  key: "XRAY_BUILD_TYPE"
-  value: "full"
-}
diff --git a/.github/kokoro/database.cfg b/.github/kokoro/database.cfg
deleted file mode 100644
index ebc11d8..0000000
--- a/.github/kokoro/database.cfg
+++ /dev/null
@@ -1,16 +0,0 @@
-build_file: "symbiflow-prjxray-db/.github/kokoro/database.sh"
-
-timeout_mins: 10
-
-action {
-  define_artifacts {
-    regex: "**/*result*.xml"
-    regex: "**/build/*.log"
-    regex: "**/logs/*.log"
-    regex: "**/logs/*.xml"
-    regex: "**/build/**"
-    regex: "**/diff.*"
-    regex: "**/database/**"
-    strip_prefix: "github/symbiflow-prjxray-db/"
-  }
-}
diff --git a/.github/kokoro/db-full.sh b/.github/kokoro/db-full.sh
deleted file mode 100755
index 319d3fa..0000000
--- a/.github/kokoro/db-full.sh
+++ /dev/null
@@ -1,216 +0,0 @@
-#!/bin/bash
-# Copyright (C) 2017-2020  The Project X-Ray Authors.
-#
-# Use of this source code is governed by a ISC-style
-# license that can be found in the LICENSE file or at
-# https://opensource.org/licenses/ISC
-#
-# SPDX-License-Identifier: ISC
-
-set -e
-
-cd github/$KOKORO_DIR/
-
-source ./.github/kokoro/steps/hostcheck.sh
-source ./.github/kokoro/steps/hostsetup.sh
-source ./.github/kokoro/steps/hostinfo.sh
-source ./.github/kokoro/steps/git.sh
-
-source ./.github/kokoro/steps/xilinx.sh
-
-source ./.github/kokoro/steps/prjxray-env.sh
-
-echo
-echo "========================================"
-echo "Downloading current database"
-echo "----------------------------------------"
-(
-	script --return --flush --command "./download-latest-db.sh" -
-)
-echo "----------------------------------------"
-
-echo
-echo "========================================"
-echo "Preparing database"
-echo "----------------------------------------"
-(
-	make db-prepare-${XRAY_SETTINGS}
-)
-echo "----------------------------------------"
-
-source settings/$XRAY_SETTINGS.sh
-
-echo
-echo "========================================"
-echo "Cleaning out current database"
-echo "----------------------------------------"
-(
-	cd database
-	make clean-${XRAY_SETTINGS}-db
-)
-echo "----------------------------------------"
-
-echo
-echo "========================================"
-echo "Running Database build"
-echo "----------------------------------------"
-(
-	# Output which fuzzers we are going to run
-	echo "make --dry-run"
-	make --dry-run db-${XRAY_SETTINGS}-all
-	echo "----------------------------------------"
-
-	# Run the fuzzers
-	set -x +e
-	tmp=`mktemp`
-	script --return --flush --command "make -j $CORES MAX_VIVADO_PROCESS=$MAX_VIVADO_PROCESS db-${XRAY_SETTINGS}-all" $tmp
-	DATABASE_RET=$?
-	set +x -e
-
-	if [[ $DATABASE_RET != 0 ]] ; then
-		# Collect the Vivado logs into one tgz archive
-		echo "Packing failing test cases"
-		grep "recipe for target" $tmp | awk 'match($0,/recipe for target.*'\''(.*)\/run\..*ok'\''/,res) {print "fuzzers/" res[1]}' | xargs tar -zcf fuzzers/fails.tgz
-		echo "----------------------------------------"
-		echo "A failure occurred during Database build."
-		echo "----------------------------------------"
-		rm $tmp
-
-		echo "========================================"
-		echo " Disk space in failure path"
-		echo "----------------------------------------"
-		du -sh
-
-		exit $DATABASE_RET
-	fi
-)
-echo "----------------------------------------"
-
-# Format the database
-make db-format-${XRAY_SETTINGS}
-# Update the database/Info.md file
-make db-info
-
-# Output if the database has differences
-echo
-echo "========================================"
-echo " Database Differences"
-echo "----------------------------------------"
-(
-	cd database
-	# Update the index with any new files
-	git add \
-		--verbose \
-		--all \
-		--ignore-errors \
-		.
-
-	# Output what git status
-	echo
-	echo "----------------------------------------"
-	echo " Database Status"
-	echo "----------------------------------------"
-	git status
-	echo "----------------------------------------"
-
-
-	# Output a summary of how the files have changed
-	echo
-	echo "----------------------------------------"
-	echo " Database Diff Summary"
-	echo "----------------------------------------"
-	git diff --stat --irreversible-delete --find-renames --find-copies --ignore-all-space origin/master
-
-	# Save the diff to be uploaded as an artifact
-	echo
-	echo "----------------------------------------"
-	echo " Saving diff output"
-	echo "----------------------------------------"
-	# Patch file
-	git diff \
-		--patch-with-stat --no-color --irreversible-delete --find-renames --find-copies origin/master \
-		> diff.patch
-
-	MAX_DIFF_LINES=50000
-	DIFF_LINES="$(wc -l diff.patch | sed -e's/ .*$//')"
-	if [ $DIFF_LINES -gt $MAX_DIFF_LINES ]; then
-		echo
-		echo "----------------------------------------"
-		echo " Database Diff"
-		echo "----------------------------------------"
-		echo "diff has $DIFF_LINES lines which is too large to display!"
-
-		echo
-		echo "----------------------------------------"
-		echo " Generating pretty diff output"
-		echo "----------------------------------------"
-		echo "diff has $DIFF_LINES lines which is too large for HTML output!"
-	else
-		# Output the actually diff
-		echo
-		echo "----------------------------------------"
-		echo " Database Diff"
-		echo "----------------------------------------"
-		git diff --color --irreversible-delete --find-renames --find-copies --ignore-all-space origin/master
-
-		echo
-		echo "----------------------------------------"
-		echo " Generating pretty diff output"
-		echo "----------------------------------------"
-		(
-			# Allow the diff2html to fail.
-			set +e
-
-			# Pretty HTML file version
-			diff2html --summary=open --file diff.html --format html \
-				-- \
-				--irreversible-delete --find-renames --find-copies \
-				--ignore-all-space origin/master || true
-
-			# Programmatic JSON version
-			diff2html --file diff.json --format json \
-				-- \
-				--irreversible-delete --find-renames --find-copies \
-				--ignore-all-space origin/master || true
-		) || true
-	fi
-)
-echo "----------------------------------------"
-
-# Check the database and fail if it is broken.
-set -x +e
-make db-check-${XRAY_SETTINGS}
-CHECK_RET=$?
-set +x -e
-
-echo
-echo "========================================"
-echo " Testing HTML generation"
-echo "----------------------------------------"
-(
-	cd htmlgen
-	source htmlgen.sh $XRAY_SETTINGS
-)
-
-# If we get here, then all the fuzzers completed fine. Hence we are
-# going to assume we don't want to keep all the build / logs / etc (as
-# they are quite large). Thus do a clean to get rid of them.
-echo
-echo "========================================"
-echo " Cleaning up after success"
-echo "----------------------------------------"
-(
-	cd fuzzers
-	echo
-	echo "Cleaning up so CI doesn't save all the excess data."
-	make clean_fuzzers
-	make clean_piplists
-)
-echo "----------------------------------------"
-
-echo "========================================"
-echo " Final disk space after cleanup"
-echo "----------------------------------------"
-du -sh
-
-exit $CHECK_RET
diff --git a/.github/kokoro/db-quick.sh b/.github/kokoro/db-quick.sh
deleted file mode 100755
index 7f063de..0000000
--- a/.github/kokoro/db-quick.sh
+++ /dev/null
@@ -1,57 +0,0 @@
-#!/bin/bash
-# Copyright (C) 2017-2020  The Project X-Ray Authors.
-#
-# Use of this source code is governed by a ISC-style
-# license that can be found in the LICENSE file or at
-# https://opensource.org/licenses/ISC
-#
-# SPDX-License-Identifier: ISC
-
-set -e
-
-cd github/$KOKORO_DIR/
-
-source ./.github/kokoro/steps/hostcheck.sh
-source ./.github/kokoro/steps/hostsetup.sh
-source ./.github/kokoro/steps/hostinfo.sh
-source ./.github/kokoro/steps/git.sh
-
-source ./.github/kokoro/steps/xilinx.sh
-
-source ./.github/kokoro/steps/prjxray-env.sh
-
-echo
-echo "========================================"
-echo "Downloading current database"
-echo "----------------------------------------"
-(
-	./download-latest-db.sh
-)
-echo "----------------------------------------"
-
-echo
-echo "========================================"
-echo "Preparing database"
-echo "----------------------------------------"
-(
-	make db-prepare-${XRAY_SETTINGS}
-)
-echo "----------------------------------------"
-
-source settings/$XRAY_SETTINGS.sh
-
-echo
-echo "========================================"
-echo "Running quick fuzzer sanity check"
-echo "----------------------------------------"
-(
-	cd fuzzers
-	echo "make --dry-run"
-	make --dry-run
-	echo "----------------------------------------"
-	export MAX_VIVADO_PROCESS=$CORES
-	set -x
-	script --return --flush --command "make -j $CORES MAX_VIVADO_PROCESS=$CORES QUICK=y" -
-	set +x
-)
-echo "----------------------------------------"
diff --git a/.github/kokoro/kokoro-cfg.py b/.github/kokoro/kokoro-cfg.py
deleted file mode 100755
index 58376d9..0000000
--- a/.github/kokoro/kokoro-cfg.py
+++ /dev/null
@@ -1,80 +0,0 @@
-#!/usr/bin/env python3
-# -*- coding: utf-8 -*-
-#
-# Copyright (C) 2017-2020  The Project X-Ray Authors.
-#
-# Use of this source code is governed by a ISC-style
-# license that can be found in the LICENSE file or at
-# https://opensource.org/licenses/ISC
-#
-# SPDX-License-Identifier: ISC
-
-db_full = """\
-# Format: //devtools/kokoro/config/proto/build.proto
-
-build_file: "symbiflow-prjxray-%(kokoro_type)s-db-%(part)s/.github/kokoro/%(script)s"
-
-timeout_mins: 4320
-
-action {
-  define_artifacts {
-    # File types
-    regex: "**/diff.html"
-    regex: "**/diff.json"
-    regex: "**/diff.patch"
-    regex: "**/*result*.xml"
-    regex: "**/*sponge_log.xml"
-    regex: "**/fuzzers/*.tgz"
-    # Whole directories
-    # regex: "**/build/**" - Currently kokoro dies on number of artifacts.
-    regex: "**/build/*.log"
-    regex: "**/logs_*/**"
-    # The database
-    regex: "**/database/%(part)s/**"
-    strip_prefix: "github/symbiflow-prjxray-%(kokoro_type)s-db-%(part)s/"
-  }
-}
-
-env_vars {
-  key: "KOKORO_TYPE"
-  value: "%(kokoro_type)s"
-}
-
-env_vars {
-  key: "KOKORO_DIR"
-  value: "symbiflow-prjxray-%(kokoro_type)s-db-%(part)s"
-}
-
-env_vars {
-  key: "XRAY_SETTINGS"
-  value: "%(part)s"
-}
-
-env_vars {
-  key: "XRAY_BUILD_TYPE"
-  value: "full"
-}
-"""
-
-for part in ['artix7', 'kintex7', 'zynq7', 'spartan7']:
-    if part != 'spartan7':
-        script = 'db-full.sh'
-    else:
-        # Emit dummy script for spartan7 for now until it is working.
-        script = 'nothing.sh'
-
-    with open("continuous-db-%s.cfg" % part, "w") as f:
-        f.write(
-            db_full % {
-                'part': part,
-                'kokoro_type': 'continuous',
-                'script': script,
-            })
-
-    with open("presubmit-db-%s.cfg" % part, "w") as f:
-        f.write(
-            db_full % {
-                'part': part,
-                'kokoro_type': 'presubmit',
-                'script': script,
-            })
diff --git a/.github/kokoro/nothing.sh b/.github/kokoro/nothing.sh
deleted file mode 100755
index edc8fa3..0000000
--- a/.github/kokoro/nothing.sh
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/bash
-# Copyright (C) 2017-2020  The Project X-Ray Authors.
-#
-# Use of this source code is governed by a ISC-style
-# license that can be found in the LICENSE file or at
-# https://opensource.org/licenses/ISC
-#
-# SPDX-License-Identifier: ISC
-echo "Doing nothing!"
-true
diff --git a/.github/kokoro/presubmit-db-artix7.cfg b/.github/kokoro/presubmit-db-artix7.cfg
deleted file mode 100644
index 38b62d2..0000000
--- a/.github/kokoro/presubmit-db-artix7.cfg
+++ /dev/null
@@ -1,44 +0,0 @@
-# Format: //devtools/kokoro/config/proto/build.proto
-
-build_file: "symbiflow-prjxray-presubmit-db-artix7/.github/kokoro/db-full.sh"
-
-timeout_mins: 4320
-
-action {
-  define_artifacts {
-    # File types
-    regex: "**/diff.html"
-    regex: "**/diff.json"
-    regex: "**/diff.patch"
-    regex: "**/*result*.xml"
-    regex: "**/*sponge_log.xml"
-    regex: "**/fuzzers/*.tgz"
-    # Whole directories
-    # regex: "**/build/**" - Currently kokoro dies on number of artifacts.
-    regex: "**/build/*.log"
-    regex: "**/logs_*/**"
-    # The database
-    regex: "**/database/artix7/**"
-    strip_prefix: "github/symbiflow-prjxray-presubmit-db-artix7/"
-  }
-}
-
-env_vars {
-  key: "KOKORO_TYPE"
-  value: "presubmit"
-}
-
-env_vars {
-  key: "KOKORO_DIR"
-  value: "symbiflow-prjxray-presubmit-db-artix7"
-}
-
-env_vars {
-  key: "XRAY_SETTINGS"
-  value: "artix7"
-}
-
-env_vars {
-  key: "XRAY_BUILD_TYPE"
-  value: "full"
-}
diff --git a/.github/kokoro/presubmit-db-kintex7.cfg b/.github/kokoro/presubmit-db-kintex7.cfg
deleted file mode 100644
index 5c948e5..0000000
--- a/.github/kokoro/presubmit-db-kintex7.cfg
+++ /dev/null
@@ -1,53 +0,0 @@
-# Format: //devtools/kokoro/config/proto/build.proto
-
-build_file: "symbiflow-prjxray-presubmit-db-kintex7/.github/kokoro/db-full.sh"
-
-timeout_mins: 4320
-
-action {
-  define_artifacts {
-    # File types
-    regex: "**/diff.html"
-    regex: "**/diff.json"
-    regex: "**/diff.patch"
-    regex: "**/*result*.xml"
-    regex: "**/*sponge_log.xml"
-    regex: "**/fuzzers/*.tgz"
-    # Whole directories
-    # regex: "**/build/**" - Currently kokoro dies on number of artifacts.
-    regex: "**/build/*.log"
-    regex: "**/logs_*/**"
-    # The database
-    regex: "**/database/kintex7/**"
-    strip_prefix: "github/symbiflow-prjxray-presubmit-db-kintex7/"
-  }
-}
-
-env_vars {
-  key: "KOKORO_TYPE"
-  value: "presubmit"
-}
-
-env_vars {
-  key: "KOKORO_DIR"
-  value: "symbiflow-prjxray-presubmit-db-kintex7"
-}
-
-env_vars {
-  key: "XRAY_SETTINGS"
-  value: "kintex7"
-}
-
-env_vars {
-  key: "XRAY_BUILD_TYPE"
-  value: "full"
-}
-
-before_action {
-  fetch_keystore {
-    keystore_resource {
-      keystore_config_id: 74045
-      keyname: "foss-fpga-tools_xilinx-license"
-    }
-  }
-}
diff --git a/.github/kokoro/presubmit-db-spartan7.cfg b/.github/kokoro/presubmit-db-spartan7.cfg
deleted file mode 100644
index 39caf3a..0000000
--- a/.github/kokoro/presubmit-db-spartan7.cfg
+++ /dev/null
@@ -1,44 +0,0 @@
-# Format: //devtools/kokoro/config/proto/build.proto
-
-build_file: "symbiflow-prjxray-presubmit-db-spartan7/.github/kokoro/db-full.sh"
-
-timeout_mins: 4320
-
-action {
-  define_artifacts {
-    # File types
-    regex: "**/diff.html"
-    regex: "**/diff.json"
-    regex: "**/diff.patch"
-    regex: "**/*result*.xml"
-    regex: "**/*sponge_log.xml"
-    regex: "**/fuzzers/*.tgz"
-    # Whole directories
-    # regex: "**/build/**" - Currently kokoro dies on number of artifacts.
-    regex: "**/build/*.log"
-    regex: "**/logs_*/**"
-    # The database
-    regex: "**/database/spartan7/**"
-    strip_prefix: "github/symbiflow-prjxray-presubmit-db-spartan7/"
-  }
-}
-
-env_vars {
-  key: "KOKORO_TYPE"
-  value: "presubmit"
-}
-
-env_vars {
-  key: "KOKORO_DIR"
-  value: "symbiflow-prjxray-presubmit-db-spartan7"
-}
-
-env_vars {
-  key: "XRAY_SETTINGS"
-  value: "spartan7"
-}
-
-env_vars {
-  key: "XRAY_BUILD_TYPE"
-  value: "full"
-}
diff --git a/.github/kokoro/presubmit-db-zynq7.cfg b/.github/kokoro/presubmit-db-zynq7.cfg
deleted file mode 100644
index f6e994b..0000000
--- a/.github/kokoro/presubmit-db-zynq7.cfg
+++ /dev/null
@@ -1,44 +0,0 @@
-# Format: //devtools/kokoro/config/proto/build.proto
-
-build_file: "symbiflow-prjxray-presubmit-db-zynq7/.github/kokoro/db-full.sh"
-
-timeout_mins: 4320
-
-action {
-  define_artifacts {
-    # File types
-    regex: "**/diff.html"
-    regex: "**/diff.json"
-    regex: "**/diff.patch"
-    regex: "**/*result*.xml"
-    regex: "**/*sponge_log.xml"
-    regex: "**/fuzzers/*.tgz"
-    # Whole directories
-    # regex: "**/build/**" - Currently kokoro dies on number of artifacts.
-    regex: "**/build/*.log"
-    regex: "**/logs_*/**"
-    # The database
-    regex: "**/database/zynq7/**"
-    strip_prefix: "github/symbiflow-prjxray-presubmit-db-zynq7/"
-  }
-}
-
-env_vars {
-  key: "KOKORO_TYPE"
-  value: "presubmit"
-}
-
-env_vars {
-  key: "KOKORO_DIR"
-  value: "symbiflow-prjxray-presubmit-db-zynq7"
-}
-
-env_vars {
-  key: "XRAY_SETTINGS"
-  value: "zynq7"
-}
-
-env_vars {
-  key: "XRAY_BUILD_TYPE"
-  value: "full"
-}
diff --git a/.github/kokoro/steps/git.sh b/.github/kokoro/steps/git.sh
deleted file mode 100755
index 779348e..0000000
--- a/.github/kokoro/steps/git.sh
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/bin/bash
-# Copyright (C) 2017-2020  The Project X-Ray Authors.
-#
-# Use of this source code is governed by a ISC-style
-# license that can be found in the LICENSE file or at
-# https://opensource.org/licenses/ISC
-#
-# SPDX-License-Identifier: ISC
-
-set -e
-
-echo
-echo "========================================"
-echo "Git log"
-echo "----------------------------------------"
-echo "----------------------------------------"
-
-echo
-echo "========================================"
-echo "Git fetching tags"
-echo "----------------------------------------"
-git fetch --tags || true
-echo "----------------------------------------"
-
-echo
-echo "========================================"
-echo "Git version info"
-echo "----------------------------------------"
-git log -n1
-echo "----------------------------------------"
-git describe --tags || true
-echo "----------------------------------------"
-git describe --tags --always || true
-echo "----------------------------------------"
diff --git a/.github/kokoro/steps/hostcheck.sh b/.github/kokoro/steps/hostcheck.sh
deleted file mode 100755
index de37427..0000000
--- a/.github/kokoro/steps/hostcheck.sh
+++ /dev/null
@@ -1,94 +0,0 @@
-#!/bin/bash
-# Copyright (C) 2017-2021  The Project X-Ray Authors.
-#
-# Use of this source code is governed by a ISC-style
-# license that can be found in the LICENSE file or at
-# https://opensource.org/licenses/ISC
-#
-# SPDX-License-Identifier: ISC
-
-set -e
-
-echo
-echo "========================================"
-echo "Waiting for storage"
-echo "----------------------------------------"
-STORAGE_CHECK_ATTEMPTS=1
-while true; do
-       # Check that tmpfs has been mounted correctly.
-       set -x +e
-       mount | grep /tmpfs
-       MOUNT_RET=$?
-       set +x -e
-       if [[ $MOUNT_RET == 0 ]] ; then
-              break;
-       else
-              echo "----------------------------------------"
-              echo "Error: No storage is mounted on /tmpfs."
-              echo "----------------------------------------"
-              echo ""
-       fi
-
-       # Dump debugging information.
-       echo "========================================"
-       echo "Mount output"
-       echo "----------------------------------------"
-       mount
-
-       echo "========================================"
-       echo "Dmesg dump"
-       echo "----------------------------------------"
-       dmesg
-
-       echo "========================================"
-       echo "Partition information"
-       echo "----------------------------------------"
-       echo ""
-       echo "partprobe"
-       echo "----------------------------------------"
-       partprobe -s
-       echo ""
-       echo "cat /proc/partitions"
-       echo "----------------------------------------"
-       cat /proc/partitions
-       echo ""
-       echo "cat /etc/fstab"
-       echo "----------------------------------------"
-       cat /etc/fstab
-       echo ""
-       echo "cat /etc/mtab"
-       echo "----------------------------------------"
-       cat /etc/mtab
-       echo ""
-       echo "lsblk"
-       echo "----------------------------------------"
-       lsblk --list --output 'NAME,KNAME,FSTYPE,MOUNTPOINT,LABEL,UUID,PARTTYPE,PARTLABEL,PARTUUID'
-       echo ""
-       echo "sfdisk"
-       echo "----------------------------------------"
-       sudo sfdisk --list
-       echo ""
-       echo "systemctl | grep mount"
-       echo "----------------------------------------"
-       systemctl | grep mount
-       echo ""
-       echo "systemctl | grep dev"
-       echo "----------------------------------------"
-       systemctl | grep dev
-
-       # Fail if we have waited to long.
-       if [[ $STORAGE_CHECK_ATTEMPTS -gt 10 ]]; then
-              echo "=============================="
-              echo " ERROR: Storage check timeout"
-              echo "=============================="
-              exit $MOUNT_RET
-       else
-              STORAGE_CHECK_ATTEMPTS=$(( $STORAGE_CHECK_ATTEMPTS + 1 ))
-       fi
-
-       # Wait for a bit before rechecking.
-       SLEEP_FOR=$(( STORAGE_CHECK_ATTEMPTS * 10 ))
-       echo ""
-       echo "Sleeping for $SLEEP_FOR seconds before trying again..."
-       sleep $SLEEP_FOR
-done
diff --git a/.github/kokoro/steps/hostinfo.sh b/.github/kokoro/steps/hostinfo.sh
deleted file mode 100755
index 8e69c99..0000000
--- a/.github/kokoro/steps/hostinfo.sh
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/bin/bash
-# Copyright (C) 2017-2020  The Project X-Ray Authors.
-#
-# Use of this source code is governed by a ISC-style
-# license that can be found in the LICENSE file or at
-# https://opensource.org/licenses/ISC
-#
-# SPDX-License-Identifier: ISC
-
-set -e
-
-echo
-echo "========================================"
-echo "Host Environment"
-echo "----------------------------------------"
-export
-echo "----------------------------------------"
-
-echo
-echo "========================================"
-echo "Host CPU"
-echo "----------------------------------------"
-export CORES=$(nproc --all)
-echo "Cores: $CORES"
-echo
-echo "Memory"
-echo "----------------------------------------"
-cat /proc/meminfo
-echo "----------------------------------------"
-export MEM_GB=$(($(awk '/MemTotal/ {print $2}' /proc/meminfo)/(1024*1024)))
-echo "Total Memory (GB): $MEM_GB"
-
-# Approx memory per grid process
-export MEM_PER_RUN=8
-export MAX_GRID_CPU=$(($MEM_GB/$MEM_PER_RUN))
-export MAX_VIVADO_PROCESS=$(($MEM_GB/$MEM_PER_RUN))
-
-echo
-echo "========================================"
-echo "Host files"
-echo "----------------------------------------"
-echo $PWD
-echo "----------------------------------------"
-find . | sort
-echo "----------------------------------------"
diff --git a/.github/kokoro/steps/hostsetup.sh b/.github/kokoro/steps/hostsetup.sh
deleted file mode 100755
index 91cc230..0000000
--- a/.github/kokoro/steps/hostsetup.sh
+++ /dev/null
@@ -1,123 +0,0 @@
-#!/bin/bash
-# Copyright (C) 2017-2020  The Project X-Ray Authors.
-#
-# Use of this source code is governed by a ISC-style
-# license that can be found in the LICENSE file or at
-# https://opensource.org/licenses/ISC
-#
-# SPDX-License-Identifier: ISC
-
-set -e
-
-echo
-echo "========================================"
-echo "Removing older packages"
-echo "----------------------------------------"
-sudo apt-get remove -y cmake
-echo "----------------------------------------"
-
-echo
-echo "========================================"
-echo "Update the CA certificates"
-echo "----------------------------------------"
-sudo apt-get install -y ca-certificates
-echo "----------------------------------------"
-sudo update-ca-certificates
-echo "----------------------------------------"
-
-echo
-echo "========================================"
-echo "Remove the expire letsencrypt.org cert "
-echo "----------------------------------------"
-wget https://helloworld.letsencrypt.org/ || true
-echo "----------------------------------------"
-sudo rm /usr/share/ca-certificates/mozilla/DST_Root_CA_X3.crt
-echo "----------------------------------------"
-sudo update-ca-certificates
-echo "----------------------------------------"
-wget https://helloworld.letsencrypt.org/ || true
-echo "----------------------------------------"
-
-
-echo
-echo "========================================"
-echo "Host adding PPAs"
-echo "----------------------------------------"
-wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | sudo apt-key add -
-sudo apt-add-repository 'deb https://apt.kitware.com/ubuntu/ xenial main'
-sudo add-apt-repository ppa:deadsnakes/ppa
-echo "----------------------------------------"
-
-echo
-echo "========================================"
-echo "Host updating packages"
-echo "----------------------------------------"
-sudo apt-get update
-echo "----------------------------------------"
-
-echo
-echo "========================================"
-echo "Host remove packages"
-echo "----------------------------------------"
-sudo apt-get remove -y \
-	python-pytest \
-
-
-sudo apt-get autoremove -y
-
-echo "----------------------------------------"
-echo
-echo "========================================"
-echo "Host install packages"
-echo "----------------------------------------"
-sudo apt-get install -y \
-        bash \
-        bison \
-        build-essential \
-        ca-certificates \
-        clang-format \
-        cmake \
-        colordiff \
-        coreutils \
-        curl \
-        flex \
-        fontconfig \
-        git \
-        jq \
-        lsb \
-        nodejs \
-        psmisc \
-        python3 \
-        python3-dev \
-        python3-venv
-
-echo "========================================"
-echo "Enter virtual env for python 3.8"
-echo "----------------------------------------"
-python3 -mvenv startup_python
-source startup_python/bin/activate
-which python
-python --version
-which python3
-python3 --version
-
-echo "----------------------------------------"
-
-(
-	cd /tmp
-	# Upgrade pstree to support the -T flag.
-	wget https://storage.googleapis.com/prjxray-deps-debs/psmisc_23.2-1_amd64.deb
-	sudo dpkg --install psmisc_23.2-1_amd64.deb
-	which pstree
-	pstree --help || true
-)
-
-echo "----------------------------------------"
-
-echo
-echo "========================================"
-echo "Getting diff2html to produce pretty database diffs"
-echo "----------------------------------------"
-(
-	sudo npm install -g diff2html-cli
-)
diff --git a/.github/kokoro/steps/prjxray-env.sh b/.github/kokoro/steps/prjxray-env.sh
deleted file mode 100755
index 95d9515..0000000
--- a/.github/kokoro/steps/prjxray-env.sh
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/bin/bash
-# Copyright (C) 2017-2020  The Project X-Ray Authors.
-#
-# Use of this source code is governed by a ISC-style
-# license that can be found in the LICENSE file or at
-# https://opensource.org/licenses/ISC
-#
-# SPDX-License-Identifier: ISC
-
-set -e
-
-echo
-echo "========================================"
-echo "Build the C++ tools"
-echo "----------------------------------------"
-make build --output-sync=target --warn-undefined-variables -j $CORES
-echo "----------------------------------------"
-
-echo
-echo "========================================"
-echo "Setup the Python environment"
-echo "----------------------------------------"
-make env --output-sync=target --warn-undefined-variables
diff --git a/.github/kokoro/steps/xilinx.sh b/.github/kokoro/steps/xilinx.sh
deleted file mode 100755
index a4a80c2..0000000
--- a/.github/kokoro/steps/xilinx.sh
+++ /dev/null
@@ -1,103 +0,0 @@
-#!/bin/bash
-# Copyright (C) 2017-2020  The Project X-Ray Authors.
-#
-# Use of this source code is governed by a ISC-style
-# license that can be found in the LICENSE file or at
-# https://opensource.org/licenses/ISC
-#
-# SPDX-License-Identifier: ISC
-
-echo
-echo "========================================"
-echo "Xilinx proprietary toolchain setup."
-echo "----------------------------------------"
-
-echo
-echo "Fix up the Xilinx configuration directory"
-echo "----------------------------------------"
-ls -l ~/.Xilinx
-sudo chown -R $USER ~/.Xilinx
-
-export XILINX_LOCAL_USER_DATA=no
-echo "----------------------------------------"
-
-echo
-echo "Select Xilinx Vivado version"
-echo "----------------------------------------"
-(
-	set -e
-	cd /opt
-	if [ x"$XRAY_SETTINGS" = x"kintex7" ]; then
-		echo "Using Xilinx Vivado Design Edition for $XRAY_SETTINGS build."
-		echo
-		echo "Making /opt mount rw"
-		sudo mount -o remount,rw /opt
-		echo
-		echo "Replacing /opt/Xilinx link."
-		sudo rm -f Xilinx
-		sudo ln -s Xilinx-design Xilinx
-		ls -l Xilinx
-		echo
-		echo "Making /opt mount ro"
-		sudo mount -o remount,ro /opt
-		echo
-	else
-		echo "Using Xilinx Vivado WebPack Edition for $XRAY_SETTINGS build."
-		ls -l Xilinx
-	fi
-)
-echo "----------------------------------------"
-
-
-echo
-echo "List /opt directory"
-echo "----------------------------------------"
-ls -l /opt
-echo "----------------------------------------"
-
-# Create a tunnel to the server which has the Xilinx licenses and port forward
-# them.
-echo
-echo "Setting up license server tunnel"
-echo "----------------------------------------"
-
-LICENSE_TUNNEL_KEY=$KOKORO_KEYSTORE_DIR/74045_foss-fpga-tools_xilinx-license
-echo "SSH Key for license server tunnel should be found @ $LICENSE_TUNNEL_KEY"
-ls -l $LICENSE_TUNNEL_KEY || true
-
-if [ -f $LICENSE_TUNNEL_KEY ]; then
-	echo
-	echo "Xilinx license server ssh key found, setting up tunnel"
-
-	chmod 600 $LICENSE_TUNNEL_KEY
-	cat <<EOF > ssh_config
-Host xilinx-license
-  HostName 10.128.15.194
-  User kokoro
-  IdentityFile $LICENSE_TUNNEL_KEY
-  StrictHostKeyChecking no
-  ExitOnForwardFailure yes
-  # SessionType none
-  LocalForward localhost:2100 172.18.0.3:2100
-  LocalForward localhost:2101 172.18.0.3:2101
-EOF
-	echo "127.0.0.1 xlic.int" | sudo tee -a /etc/hosts
-
-	export GIT_SSH_COMMAND="ssh -F $(pwd)/ssh_config -f -N"
-	${GIT_SSH_COMMAND} xilinx-license
-
-	(
-		source /opt/Xilinx/Vivado/2017.2/settings64.sh
-		export PATH=/opt/Xilinx/Vivado/2017.2/bin/unwrapped/lnx64.o:$PATH
-		echo "-----"
-		lmutil lmstat -a -c 2100@localhost -i || true
-		echo "-----"
-	)
-
-	export XILINXD_LICENSE_FILE=2100@localhost
-
-else
-	echo
-	echo "**No** Xilinx license server ssh key found."
-fi
-echo "----------------------------------------"
diff --git a/.github/kokoro/tests.cfg b/.github/kokoro/tests.cfg
deleted file mode 100644
index 93b8528..0000000
--- a/.github/kokoro/tests.cfg
+++ /dev/null
@@ -1,19 +0,0 @@
-build_file: "symbiflow-prjxray-tests/.github/kokoro/tests.sh"
-
-timeout_mins: 10
-
-action {
-  define_artifacts {
-    regex: "**/*.log"
-    regex: "**/*sponge_log.xml"
-    regex: "**/build/**/*.xml"
-    regex: "**/build/*.xml"
-    regex: "*result*.xml"
-    strip_prefix: "github/symbiflow-prjxray-tests/"
-  }
-}
-
-env_vars {
-  key: "KOKORO_DIR"
-  value: "symbiflow-prjxray-tests"
-}
diff --git a/.github/kokoro/tests.sh b/.github/kokoro/tests.sh
deleted file mode 100755
index 5722445..0000000
--- a/.github/kokoro/tests.sh
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/bin/bash
-# Copyright (C) 2017-2020  The Project X-Ray Authors.
-#
-# Use of this source code is governed by a ISC-style
-# license that can be found in the LICENSE file or at
-# https://opensource.org/licenses/ISC
-#
-# SPDX-License-Identifier: ISC
-
-set -e
-
-cd github/$KOKORO_DIR/
-
-source ./.github/kokoro/steps/hostsetup.sh
-source ./.github/kokoro/steps/hostinfo.sh
-source ./.github/kokoro/steps/git.sh
-
-source ./.github/kokoro/steps/prjxray-env.sh
-
-echo
-echo "========================================"
-echo "Running tests"
-echo "----------------------------------------"
-(
-	make test --output-sync=target --warn-undefined-variables
-)
-echo "----------------------------------------"
-
-echo
-echo "========================================"
-echo "Copying tests logs"
-echo "----------------------------------------"
-(
-	cat build/*test_results.xml
-	mkdir build/py
-	cp build/py_test_results.xml build/py/sponge_log.xml
-	mkdir build/cpp
-	cp build/cpp_test_results.xml build/cpp/sponge_log.xml
-)
-echo "----------------------------------------"
diff --git a/.github/workflows/Automerge.yml b/.github/workflows/Automerge.yml
index cdb61b1..7acc0e3 100644
--- a/.github/workflows/Automerge.yml
+++ b/.github/workflows/Automerge.yml
@@ -1,5 +1,9 @@
 name: Automerge
 
+concurrency:
+  group: ${{ github.repository }}-${{ github.workflow }}-${{ github.ref }}
+  cancel-in-progress: true
+
 on:
   pull_request:
   push:
@@ -13,6 +17,8 @@
   Pipeline:
     if: ${{ !(github.event_name != 'pull_request' && github.actor == 'dependabot[bot]') }}
     uses: ./.github/workflows/Pipeline.yml
+    secrets:
+      LICENSE_TUNNEL_KEY_DATA: ${{ secrets.LICENSE_TUNNEL_KEY_DATA }}
 
 
   Automerge:
diff --git a/.github/workflows/Pipeline.yml b/.github/workflows/Pipeline.yml
index b38fa03..e45a4c9 100644
--- a/.github/workflows/Pipeline.yml
+++ b/.github/workflows/Pipeline.yml
@@ -2,12 +2,15 @@
 
 on:
   workflow_call:
+    secrets:
+      LICENSE_TUNNEL_KEY_DATA:
+        required: false
 
 jobs:
 
 
   BuildDatabase:
-    container: ubuntu:bionic
+    container: ubuntu:focal
 
     runs-on: [self-hosted, Linux, X64]
 
@@ -17,22 +20,52 @@
         family: ['artix7', 'zynq7', 'kintex7', 'spartan7']
 
     env:
+      GHA_SSH_TUNNEL_KEY: "${{ secrets.LICENSE_TUNNEL_KEY_DATA }}"
+      GHA_SSH_TUNNEL_CONFIG: "${{ secrets.LICENSE_TUNNEL_SSH_CONFIG }}"
+      GHA_SSH_TUNNEL_CONFIG_SECRET_NAME: "xilinx_license_server_config"
+      GHA_SSH_TUNNEL_KEY_SECRET_NAME: "xilinx_license_server_key"
       ALLOW_ROOT: true
       GHA_EXTERNAL_DISK: "tools"
       XILINX_LOCAL_USER_DATA: "no"
 
     steps:
 
-      - uses: actions/checkout@v2
+      - uses: actions/checkout@v3
         with:
           submodules: recursive
 
       - name: Install
         run: |
-          apt update
-          apt install -y \
-            bash bison build-essential ca-certificates clang-format cmake psmisc \
-            colordiff coreutils git flex python3 python3-dev python3-venv xsltproc
+          DEBIAN_FRONTEND=noninteractive apt update -qq
+          DEBIAN_FRONTEND=noninteractive apt install -qq -y \
+            bash \
+            bison \
+            build-essential \
+            ca-certificates \
+            clang-format \
+            cmake \
+            colordiff \
+            coreutils \
+            flex \
+            git \
+            iproute2 \
+            iputils-ping \
+            libtinfo5 \
+            netcat-openbsd \
+            psmisc \
+            python3 \
+            python3-dev \
+            python3-venv \
+            xsltproc \
+            sudo \
+
+      - name: Xilinx Setup
+        run: |
+          git config --global --add safe.directory /root/prjxray/prjxray
+          .github/workflows/scripts/xilinx.sh
+        env:
+          USE_LICENSE_SERVER: "true"
+          XRAY_SETTINGS: ${{ matrix.family }}
 
       - name: Build
         run: make build --output-sync=target --warn-undefined-variables -j$(nproc)
@@ -45,7 +78,7 @@
         env:
           XRAY_SETTINGS: ${{ matrix.family }}
 
-      - uses: actions/upload-artifact@v2
+      - uses: actions/upload-artifact@v3
         if: ${{ always() }}
         with:
           name: ${{ matrix.family }}
@@ -61,7 +94,7 @@
 
 
   Tests:
-    container: ubuntu:bionic
+    container: ubuntu:focal
 
     runs-on: [self-hosted, Linux, X64]
 
@@ -70,16 +103,16 @@
 
     steps:
 
-      - uses: actions/checkout@v2
+      - uses: actions/checkout@v3
         with:
           submodules: recursive
 
       - name: Install
         run: |
-          apt update
-          apt install -y \
+          DEBIAN_FRONTEND=noninteractive apt update -qq
+          DEBIAN_FRONTEND=noninteractive apt install -qq -y \
             bash bison build-essential ca-certificates clang-format cmake psmisc \
-            colordiff coreutils git flex python3 python3-dev python3-venv xsltproc
+            colordiff coreutils git flex python3 python3-dev python3-venv xsltproc libtinfo5
 
       - name: Build
         run: make build --output-sync=target --warn-undefined-variables -j$(nproc)
@@ -90,7 +123,7 @@
       - name: Run Test
         run: make test --output-sync=target --warn-undefined-variables
 
-      - uses: actions/upload-artifact@v2
+      - uses: actions/upload-artifact@v3
         if: ${{ always() }}
         with:
           path: |
diff --git a/.github/workflows/scripts/db.sh b/.github/workflows/scripts/db.sh
index 82ad251..ab94616 100755
--- a/.github/workflows/scripts/db.sh
+++ b/.github/workflows/scripts/db.sh
@@ -15,7 +15,6 @@
 echo "======================================="
 echo "Creating Vivado Symbolic Link"
 echo "---------------------------------------"
-ln -s /mnt/aux/Xilinx /opt/Xilinx
 ls /opt/Xilinx/Vivado
 source /opt/Xilinx/Vivado/2017.2/settings64.sh
 vivado -version
diff --git a/.github/workflows/scripts/xilinx.sh b/.github/workflows/scripts/xilinx.sh
new file mode 100755
index 0000000..2290d08
--- /dev/null
+++ b/.github/workflows/scripts/xilinx.sh
@@ -0,0 +1,77 @@
+#!/bin/bash
+# Copyright (C) 2017-2022  The Project X-Ray Authors.
+#
+# Use of this source code is governed by a ISC-style
+# license that can be found in the LICENSE file or at
+# https://opensource.org/licenses/ISC
+#
+# SPDX-License-Identifier: ISC
+
+echo
+echo "========================================"
+echo "Xilinx proprietary toolchain setup."
+echo "----------------------------------------"
+
+echo
+echo "Fix up the Xilinx configuration directory"
+echo "----------------------------------------"
+mkdir -p ~/.Xilinx
+ls -l ~/.Xilinx
+mkdir ~/.ssh
+echo
+echo "Fixing loader to be able to run lmutils"
+echo "----------------------------------------"
+ln -s /lib64/ld-linux-x86-64.so.2 /lib64/ld-lsb-x86-64.so.3
+
+export XILINX_LOCAL_USER_DATA=no
+echo "----------------------------------------"
+
+echo
+echo "Select Xilinx Vivado version"
+echo "----------------------------------------"
+(
+	set -e
+	cd /opt
+	if [ x"$XRAY_SETTINGS" = x"kintex7" ]; then
+		echo "Using Xilinx Vivado Design Edition for $XRAY_SETTINGS build."
+		echo
+		ln -s /mnt/aux/Xilinx-design /opt/Xilinx
+		ls -l Xilinx
+		echo
+	else
+		ln -s /mnt/aux/Xilinx /opt/Xilinx
+		echo "Using Xilinx Vivado WebPack Edition for $XRAY_SETTINGS build."
+		ls -l Xilinx
+	fi
+)
+echo "----------------------------------------"
+
+
+echo
+echo "List /opt directory"
+echo "----------------------------------------"
+ls -l /opt
+echo "----------------------------------------"
+
+echo $GHA_SSH_TUNNEL_CONFIG_SECRET_NAME
+if [[ ! -z "$USE_LICENSE_SERVER" ]]; then
+
+	echo
+	echo "Xilinx license server ssh key found, checking the license"
+	echo
+
+	echo "127.0.0.1 xlic.int" | sudo tee -a /etc/hosts
+
+	source /opt/Xilinx/Vivado/2017.2/settings64.sh
+	export PATH=/opt/Xilinx/Vivado/2017.2/bin/unwrapped/lnx64.o:$PATH
+	echo "-----"
+	lmutil lmstat -a -c 2100@localhost -i || true
+	echo "-----"
+
+	export XILINXD_LICENSE_FILE=2100@localhost
+
+else
+	echo
+	echo "**No** Xilinx license server ssh key found."
+fi
+echo "----------------------------------------"
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index 5a0ef70..0000000
--- a/.travis.yml
+++ /dev/null
@@ -1,39 +0,0 @@
-os: linux
-dist: trusty
-language: python
-python: 3.6
-addons:
-  apt:
-    sources:
-      - ubuntu-toolchain-r-test
-      - llvm-toolchain-trusty-5.0
-    packages:
-      - clang-format-5.0
-      - g++-6
-      - xsltproc
-
-install:
-  - export CC=gcc-6
-  - export CXX=g++-6
-  - make env
-
-
-jobs:
-  include:
-    # State 1 - Tests
-    - stage: "Tests"
-      name: "C++ Tests"
-      script: make test-cpp
-
-    - name: "Python Tests"
-      script: make test-py
-
-    - name: "Format"
-      script:
-        - make format
-        - test $(git status --porcelain | wc -l) -eq 0 || { git diff; false; }
-
-    - name: "License Checks"
-      script:
-        - ./.github/check_license.sh
-        - ./.github/check_python_scripts.sh
diff --git a/Makefile b/Makefile
index acb7f42..a331094 100644
--- a/Makefile
+++ b/Makefile
@@ -63,7 +63,7 @@
 	cd build && cmake -DPRJXRAY_BUILD_TESTING=ON ..
 	cd build && $(MAKE) -s
 	cd build && ctest --no-compress-output -T Test -C RelWithDebInfo --output-on-failure
-	xsltproc .github/kokoro/ctest2junit.xsl build/Testing/*/Test.xml > build/cpp_test_results.xml
+	xsltproc .github/ctest2junit.xsl build/Testing/*/Test.xml > build/cpp_test_results.xml
 
 test-tools:
 	$(MAKE) -f Makefile.tools_tests
@@ -189,7 +189,7 @@
 
 ARTIX_PARTS=artix7_50t artix7_200t
 ZYNQ_PARTS=zynq7010
-KINTEX_PARTS=
+KINTEX_PARTS=kintex7_160t
 SPARTAN_PARTS=
 
 XRAY_PARTS=${ARTIX_PARTS} ${ZYNQ_PARTS} ${KINTEX_PARTS} ${SPARTAN_PARTS}
diff --git a/docs/db_dev_process/parts.rst b/docs/db_dev_process/parts.rst
index be6dc0d..53ec472 100644
--- a/docs/db_dev_process/parts.rst
+++ b/docs/db_dev_process/parts.rst
@@ -4,3 +4,58 @@
 `SymbiFlow/prjxray/tools/`
 
 Here, you can find various programs to work with bitstreams, mainly to assist building fuzzers.
+
+bitread:
+    Used to read a bitstream file to output a readable bitfile that can be than used
+    to get the various FASM features.
+segmatch:
+    Used in the fuzzing process to correlate the different bits and find which one belong to which feature.
+gen_part_base_yaml:
+    Used to get a high level information on the device structure (number of
+    configuration rows/columns and maximum frame addresses)
+xc7frames2bit:
+    Used to write a bitstream file starting from a frames one. Where, in turn,
+    the frames file can be generated starting from a FASM file.
+xc7patch:
+    Used to patch a pre-existing bitstream with additional bits.
+bittool:
+    ???
+bits2rbt:
+    ???
+frame_address_decoder:
+    ???
+
+segmatch
+--------
+This tools takes input files of the format:
+
+code::
+    seg 00000000_050
+    bit 38_15
+    bit 39_14
+    <....>
+    tag HCLK_IOI3.LVDS_25_IN_USE 0
+    tag HCLK_IOI3.ONLY_DIFF_IN_USE 0
+    <...>
+    seg 00001C80_050
+    bit 38_15
+    bit 38_26
+
+where `seg <base_frame_address>_<tile_offset>` indicates how to address the tile,
+and `bit <frame_address_offset>_<bit_position>` indicates the position of the bit
+within the tile.
+
+base_frame_address:
+  The frame address of the first frame that configures the tile.
+
+tile_offset:
+  The word index of the first word that configures the tile within a frame.
+
+frame_address_offset:
+  frame_address - base_frame_address
+
+bit_position:
+  The index of the bit within the words of this frame that configure this tile.
+
+The `prjxray.segmaker.Segmaker` is a helper class that can be used to write these
+files inside the fuzzer's `generate.py`.
diff --git a/fuzzers/005-tilegrid/Makefile b/fuzzers/005-tilegrid/Makefile
index a880d07..f0ad42b 100644
--- a/fuzzers/005-tilegrid/Makefile
+++ b/fuzzers/005-tilegrid/Makefile
@@ -49,8 +49,11 @@
 
 # Kintex7 only fuzzers
 ifeq (${XRAY_DATABASE}, kintex7)
+# These kintex parts give an empty design
+ifneq (${XRAY_FABRIC}, $(filter ${XRAY_FABRIC}, xc7k160t xc7k325t xc7k480t))
 TILEGRID_TDB_DEPENDENCIES += orphan_int_column/$(BUILD_FOLDER)/segbits_tilegrid.tdb
 endif
+endif
 
 BASICDB_TILEGRID=$(BUILD_FOLDER)/basicdb/${XRAY_FABRIC}/tilegrid.json
 
diff --git a/fuzzers/074-dump_all/ignored_wires/kintex7/xc7k160tffg676-2_ignored_wires.txt b/fuzzers/074-dump_all/ignored_wires/kintex7/xc7k160tffg676-2_ignored_wires.txt
new file mode 100644
index 0000000..3c8095b
--- /dev/null
+++ b/fuzzers/074-dump_all/ignored_wires/kintex7/xc7k160tffg676-2_ignored_wires.txt
@@ -0,0 +1,176 @@
+CMT_TOP_L_LOWER_T_X181Y122/CMT_PHASER_DOWN_DQS_TO_PHASER_A
+CMT_TOP_L_LOWER_T_X181Y18/CMT_PHASER_DOWN_DQS_TO_PHASER_A
+CMT_TOP_L_LOWER_T_X181Y70/CMT_PHASER_DOWN_DQS_TO_PHASER_A
+CMT_TOP_L_UPPER_B_X181Y135/CMT_PHASER_UP_DQS_TO_PHASER_D
+CMT_TOP_L_UPPER_B_X181Y31/CMT_PHASER_UP_DQS_TO_PHASER_D
+CMT_TOP_L_UPPER_B_X181Y83/CMT_PHASER_UP_DQS_TO_PHASER_D
+CMT_TOP_R_LOWER_T_X8Y122/CMT_PHASER_DOWN_DQS_TO_PHASER_A
+CMT_TOP_R_LOWER_T_X8Y174/CMT_PHASER_DOWN_DQS_TO_PHASER_A
+CMT_TOP_R_LOWER_T_X8Y18/CMT_PHASER_DOWN_DQS_TO_PHASER_A
+CMT_TOP_R_LOWER_T_X8Y226/CMT_PHASER_DOWN_DQS_TO_PHASER_A
+CMT_TOP_R_LOWER_T_X8Y70/CMT_PHASER_DOWN_DQS_TO_PHASER_A
+CMT_TOP_R_UPPER_B_X8Y135/CMT_PHASER_UP_DQS_TO_PHASER_D
+CMT_TOP_R_UPPER_B_X8Y187/CMT_PHASER_UP_DQS_TO_PHASER_D
+CMT_TOP_R_UPPER_B_X8Y239/CMT_PHASER_UP_DQS_TO_PHASER_D
+CMT_TOP_R_UPPER_B_X8Y31/CMT_PHASER_UP_DQS_TO_PHASER_D
+CMT_TOP_R_UPPER_B_X8Y83/CMT_PHASER_UP_DQS_TO_PHASER_D
+LIOI3_TBYTESRC_X0Y107/LIOI_I2GCLK_BOT1
+LIOI3_TBYTESRC_X0Y107/LIOI_I2GCLK_TOP1
+LIOI3_TBYTESRC_X0Y119/LIOI_I2GCLK_BOT1
+LIOI3_TBYTESRC_X0Y119/LIOI_I2GCLK_TOP1
+LIOI3_TBYTESRC_X0Y131/LIOI_I2GCLK_BOT1
+LIOI3_TBYTESRC_X0Y131/LIOI_I2GCLK_TOP1
+LIOI3_TBYTESRC_X0Y143/LIOI_I2GCLK_BOT1
+LIOI3_TBYTESRC_X0Y143/LIOI_I2GCLK_TOP1
+LIOI3_TBYTESRC_X0Y157/LIOI_I2GCLK_BOT1
+LIOI3_TBYTESRC_X0Y157/LIOI_I2GCLK_TOP1
+LIOI3_TBYTESRC_X0Y169/LIOI_I2GCLK_BOT1
+LIOI3_TBYTESRC_X0Y169/LIOI_I2GCLK_TOP1
+LIOI3_TBYTESRC_X0Y181/LIOI_I2GCLK_BOT1
+LIOI3_TBYTESRC_X0Y181/LIOI_I2GCLK_TOP1
+LIOI3_TBYTESRC_X0Y19/LIOI_I2GCLK_BOT1
+LIOI3_TBYTESRC_X0Y19/LIOI_I2GCLK_TOP1
+LIOI3_TBYTESRC_X0Y193/LIOI_I2GCLK_BOT1
+LIOI3_TBYTESRC_X0Y193/LIOI_I2GCLK_TOP1
+LIOI3_TBYTESRC_X0Y207/LIOI_I2GCLK_BOT1
+LIOI3_TBYTESRC_X0Y207/LIOI_I2GCLK_TOP1
+LIOI3_TBYTESRC_X0Y219/LIOI_I2GCLK_BOT1
+LIOI3_TBYTESRC_X0Y219/LIOI_I2GCLK_TOP1
+LIOI3_TBYTESRC_X0Y231/LIOI_I2GCLK_BOT1
+LIOI3_TBYTESRC_X0Y231/LIOI_I2GCLK_TOP1
+LIOI3_TBYTESRC_X0Y243/LIOI_I2GCLK_BOT1
+LIOI3_TBYTESRC_X0Y243/LIOI_I2GCLK_TOP1
+LIOI3_TBYTESRC_X0Y31/LIOI_I2GCLK_BOT1
+LIOI3_TBYTESRC_X0Y31/LIOI_I2GCLK_TOP1
+LIOI3_TBYTESRC_X0Y43/LIOI_I2GCLK_BOT1
+LIOI3_TBYTESRC_X0Y43/LIOI_I2GCLK_TOP1
+LIOI3_TBYTESRC_X0Y57/LIOI_I2GCLK_BOT1
+LIOI3_TBYTESRC_X0Y57/LIOI_I2GCLK_TOP1
+LIOI3_TBYTESRC_X0Y69/LIOI_I2GCLK_BOT1
+LIOI3_TBYTESRC_X0Y69/LIOI_I2GCLK_TOP1
+LIOI3_TBYTESRC_X0Y7/LIOI_I2GCLK_BOT1
+LIOI3_TBYTESRC_X0Y7/LIOI_I2GCLK_TOP1
+LIOI3_TBYTESRC_X0Y81/LIOI_I2GCLK_BOT1
+LIOI3_TBYTESRC_X0Y81/LIOI_I2GCLK_TOP1
+LIOI3_TBYTESRC_X0Y93/LIOI_I2GCLK_BOT1
+LIOI3_TBYTESRC_X0Y93/LIOI_I2GCLK_TOP1
+LIOI3_TBYTETERM_X0Y113/LIOI_I2GCLK_BOT1
+LIOI3_TBYTETERM_X0Y113/LIOI_I2GCLK_TOP1
+LIOI3_TBYTETERM_X0Y13/LIOI_I2GCLK_BOT1
+LIOI3_TBYTETERM_X0Y13/LIOI_I2GCLK_TOP1
+LIOI3_TBYTETERM_X0Y137/LIOI_I2GCLK_BOT1
+LIOI3_TBYTETERM_X0Y137/LIOI_I2GCLK_TOP1
+LIOI3_TBYTETERM_X0Y163/LIOI_I2GCLK_BOT1
+LIOI3_TBYTETERM_X0Y163/LIOI_I2GCLK_TOP1
+LIOI3_TBYTETERM_X0Y187/LIOI_I2GCLK_BOT1
+LIOI3_TBYTETERM_X0Y187/LIOI_I2GCLK_TOP1
+LIOI3_TBYTETERM_X0Y213/LIOI_I2GCLK_BOT1
+LIOI3_TBYTETERM_X0Y213/LIOI_I2GCLK_TOP1
+LIOI3_TBYTETERM_X0Y237/LIOI_I2GCLK_BOT1
+LIOI3_TBYTETERM_X0Y237/LIOI_I2GCLK_TOP1
+LIOI3_TBYTETERM_X0Y37/LIOI_I2GCLK_BOT1
+LIOI3_TBYTETERM_X0Y37/LIOI_I2GCLK_TOP1
+LIOI3_TBYTETERM_X0Y63/LIOI_I2GCLK_BOT1
+LIOI3_TBYTETERM_X0Y63/LIOI_I2GCLK_TOP1
+LIOI3_TBYTETERM_X0Y87/LIOI_I2GCLK_BOT1
+LIOI3_TBYTETERM_X0Y87/LIOI_I2GCLK_TOP1
+LIOI3_X0Y105/LIOI_I2GCLK_TOP1
+LIOI3_X0Y109/LIOI_I2GCLK_BOT1
+LIOI3_X0Y117/LIOI_I2GCLK_TOP1
+LIOI3_X0Y121/LIOI_I2GCLK_BOT1
+LIOI3_X0Y129/LIOI_I2GCLK_TOP1
+LIOI3_X0Y133/LIOI_I2GCLK_BOT1
+LIOI3_X0Y141/LIOI_I2GCLK_TOP1
+LIOI3_X0Y145/LIOI_I2GCLK_BOT1
+LIOI3_X0Y155/LIOI_I2GCLK_TOP1
+LIOI3_X0Y159/LIOI_I2GCLK_BOT1
+LIOI3_X0Y167/LIOI_I2GCLK_TOP1
+LIOI3_X0Y17/LIOI_I2GCLK_TOP1
+LIOI3_X0Y171/LIOI_I2GCLK_BOT1
+LIOI3_X0Y179/LIOI_I2GCLK_TOP1
+LIOI3_X0Y183/LIOI_I2GCLK_BOT1
+LIOI3_X0Y191/LIOI_I2GCLK_TOP1
+LIOI3_X0Y195/LIOI_I2GCLK_BOT1
+LIOI3_X0Y205/LIOI_I2GCLK_TOP1
+LIOI3_X0Y209/LIOI_I2GCLK_BOT1
+LIOI3_X0Y21/LIOI_I2GCLK_BOT1
+LIOI3_X0Y217/LIOI_I2GCLK_TOP1
+LIOI3_X0Y221/LIOI_I2GCLK_BOT1
+LIOI3_X0Y229/LIOI_I2GCLK_TOP1
+LIOI3_X0Y233/LIOI_I2GCLK_BOT1
+LIOI3_X0Y241/LIOI_I2GCLK_TOP1
+LIOI3_X0Y245/LIOI_I2GCLK_BOT1
+LIOI3_X0Y29/LIOI_I2GCLK_TOP1
+LIOI3_X0Y33/LIOI_I2GCLK_BOT1
+LIOI3_X0Y41/LIOI_I2GCLK_TOP1
+LIOI3_X0Y45/LIOI_I2GCLK_BOT1
+LIOI3_X0Y5/LIOI_I2GCLK_TOP1
+LIOI3_X0Y55/LIOI_I2GCLK_TOP1
+LIOI3_X0Y59/LIOI_I2GCLK_BOT1
+LIOI3_X0Y67/LIOI_I2GCLK_TOP1
+LIOI3_X0Y71/LIOI_I2GCLK_BOT1
+LIOI3_X0Y79/LIOI_I2GCLK_TOP1
+LIOI3_X0Y83/LIOI_I2GCLK_BOT1
+LIOI3_X0Y9/LIOI_I2GCLK_BOT1
+LIOI3_X0Y91/LIOI_I2GCLK_TOP1
+LIOI3_X0Y95/LIOI_I2GCLK_BOT1
+RIOI_TBYTESRC_X73Y107/RIOI_I2GCLK_BOT1
+RIOI_TBYTESRC_X73Y107/RIOI_I2GCLK_TOP1
+RIOI_TBYTESRC_X73Y119/RIOI_I2GCLK_BOT1
+RIOI_TBYTESRC_X73Y119/RIOI_I2GCLK_TOP1
+RIOI_TBYTESRC_X73Y131/RIOI_I2GCLK_BOT1
+RIOI_TBYTESRC_X73Y131/RIOI_I2GCLK_TOP1
+RIOI_TBYTESRC_X73Y143/RIOI_I2GCLK_BOT1
+RIOI_TBYTESRC_X73Y143/RIOI_I2GCLK_TOP1
+RIOI_TBYTESRC_X73Y19/RIOI_I2GCLK_BOT1
+RIOI_TBYTESRC_X73Y19/RIOI_I2GCLK_TOP1
+RIOI_TBYTESRC_X73Y31/RIOI_I2GCLK_BOT1
+RIOI_TBYTESRC_X73Y31/RIOI_I2GCLK_TOP1
+RIOI_TBYTESRC_X73Y43/RIOI_I2GCLK_BOT1
+RIOI_TBYTESRC_X73Y43/RIOI_I2GCLK_TOP1
+RIOI_TBYTESRC_X73Y57/RIOI_I2GCLK_BOT1
+RIOI_TBYTESRC_X73Y57/RIOI_I2GCLK_TOP1
+RIOI_TBYTESRC_X73Y69/RIOI_I2GCLK_BOT1
+RIOI_TBYTESRC_X73Y69/RIOI_I2GCLK_TOP1
+RIOI_TBYTESRC_X73Y7/RIOI_I2GCLK_BOT1
+RIOI_TBYTESRC_X73Y7/RIOI_I2GCLK_TOP1
+RIOI_TBYTESRC_X73Y81/RIOI_I2GCLK_BOT1
+RIOI_TBYTESRC_X73Y81/RIOI_I2GCLK_TOP1
+RIOI_TBYTESRC_X73Y93/RIOI_I2GCLK_BOT1
+RIOI_TBYTESRC_X73Y93/RIOI_I2GCLK_TOP1
+RIOI_TBYTETERM_X73Y113/RIOI_I2GCLK_BOT1
+RIOI_TBYTETERM_X73Y113/RIOI_I2GCLK_TOP1
+RIOI_TBYTETERM_X73Y13/RIOI_I2GCLK_BOT1
+RIOI_TBYTETERM_X73Y13/RIOI_I2GCLK_TOP1
+RIOI_TBYTETERM_X73Y137/RIOI_I2GCLK_BOT1
+RIOI_TBYTETERM_X73Y137/RIOI_I2GCLK_TOP1
+RIOI_TBYTETERM_X73Y37/RIOI_I2GCLK_BOT1
+RIOI_TBYTETERM_X73Y37/RIOI_I2GCLK_TOP1
+RIOI_TBYTETERM_X73Y63/RIOI_I2GCLK_BOT1
+RIOI_TBYTETERM_X73Y63/RIOI_I2GCLK_TOP1
+RIOI_TBYTETERM_X73Y87/RIOI_I2GCLK_BOT1
+RIOI_TBYTETERM_X73Y87/RIOI_I2GCLK_TOP1
+RIOI_X73Y105/RIOI_I2GCLK_TOP1
+RIOI_X73Y109/RIOI_I2GCLK_BOT1
+RIOI_X73Y117/RIOI_I2GCLK_TOP1
+RIOI_X73Y121/RIOI_I2GCLK_BOT1
+RIOI_X73Y129/RIOI_I2GCLK_TOP1
+RIOI_X73Y133/RIOI_I2GCLK_BOT1
+RIOI_X73Y141/RIOI_I2GCLK_TOP1
+RIOI_X73Y145/RIOI_I2GCLK_BOT1
+RIOI_X73Y17/RIOI_I2GCLK_TOP1
+RIOI_X73Y21/RIOI_I2GCLK_BOT1
+RIOI_X73Y29/RIOI_I2GCLK_TOP1
+RIOI_X73Y33/RIOI_I2GCLK_BOT1
+RIOI_X73Y41/RIOI_I2GCLK_TOP1
+RIOI_X73Y45/RIOI_I2GCLK_BOT1
+RIOI_X73Y5/RIOI_I2GCLK_TOP1
+RIOI_X73Y55/RIOI_I2GCLK_TOP1
+RIOI_X73Y59/RIOI_I2GCLK_BOT1
+RIOI_X73Y67/RIOI_I2GCLK_TOP1
+RIOI_X73Y71/RIOI_I2GCLK_BOT1
+RIOI_X73Y79/RIOI_I2GCLK_TOP1
+RIOI_X73Y83/RIOI_I2GCLK_BOT1
+RIOI_X73Y9/RIOI_I2GCLK_BOT1
+RIOI_X73Y91/RIOI_I2GCLK_TOP1
+RIOI_X73Y95/RIOI_I2GCLK_BOT1
diff --git a/settings/kintex7/devices.yaml b/settings/kintex7/devices.yaml
index e889e78..9b1e792 100644
--- a/settings/kintex7/devices.yaml
+++ b/settings/kintex7/devices.yaml
@@ -1,3 +1,6 @@
 # device to fabric mapping
 "xc7k70t":
   fabric: "xc7k70t"
+"xc7k160t":
+  fabric: "xc7k160t"
+
diff --git a/settings/kintex7_160t.sh b/settings/kintex7_160t.sh
new file mode 100644
index 0000000..05a806c
--- /dev/null
+++ b/settings/kintex7_160t.sh
@@ -0,0 +1,36 @@
+# Copyright (C) 2017-2020  The Project X-Ray Authors.
+#
+# Use of this source code is governed by a ISC-style
+# license that can be found in the LICENSE file or at
+# https://opensource.org/licenses/ISC
+#
+# SPDX-License-Identifier: ISC
+export XRAY_DATABASE="kintex7"
+export XRAY_PART="xc7k160tffg676-2"
+export XRAY_ROI_FRAMES="0x00000000:0xffffffff"
+
+# All CLB's in the part, all BRAM's in the part, all DSP's in the part.
+# those are site coordinats: bottom half rectangle / top half rectangle for each site type
+export XRAY_ROI_TILEGRID="SLICE_X0Y0:SLICE_X109Y149 SLICE_X0Y150:SLICE_X101Y249 DSP48_X0Y0:DSP48_X5Y59 DSP48_X0Y60:DSP48_X5Y99 RAMB18_X0Y0:RAMB18_X6Y59 RAMB18_X0Y60:RAMB18_X5Y99 RAMB36_X0Y0:RAMB36_X6Y29 RAMB36_X0Y30:RAMB36_X5Y49"
+
+export XRAY_EXCLUDE_ROI_TILEGRID=""
+
+export XRAY_IOI3_TILES="LIOI3_X0Y9"
+
+# These settings must remain in sync
+export XRAY_ROI="SLICE_X0Y100:SLICE_X19Y149 DSP48_X0Y40:DSP48_X0Y59 RAMB18_X0Y40:RAMB18_X0Y59 RAMB36_X0Y20:RAMB36_X0Y29 IOB_X0Y100:IOB_X0Y149"
+# Part of CMT X0Y1
+export XRAY_ROI_GRID_X1="0"
+export XRAY_ROI_GRID_X2="68"
+# Include VBRK / VTERM
+export XRAY_ROI_GRID_Y1="154"
+export XRAY_ROI_GRID_Y2="206"
+
+source $(dirname ${BASH_SOURCE[0]})/../utils/environment.sh
+
+env=$(python3 ${XRAY_UTILS_DIR}/create_environment.py)
+ENV_RET=$?
+if [[ $ENV_RET != 0 ]] ; then
+	return $ENV_RET
+fi
+eval $env
diff --git a/third_party/abseil-cpp b/third_party/abseil-cpp
index bcefbdc..1b97698 160000
--- a/third_party/abseil-cpp
+++ b/third_party/abseil-cpp
@@ -1 +1 @@
-Subproject commit bcefbdcdf6ad85046ccacee0aeffba5404d3e528
+Subproject commit 1b976982d8cdbfd8320f34209b065bae7adefb09
diff --git a/third_party/cctz b/third_party/cctz
index a272110..83ffd88 160000
--- a/third_party/cctz
+++ b/third_party/cctz
@@ -1 +1 @@
-Subproject commit a272110719c3abd28e468661132d0ddffb57e72f
+Subproject commit 83ffd88d7c9a48d1dc61f04cb649cd52966d2fff
diff --git a/third_party/fasm b/third_party/fasm
index 052f629..ffafe82 160000
--- a/third_party/fasm
+++ b/third_party/fasm
@@ -1 +1 @@
-Subproject commit 052f629217119b699ea83e03c412bc6fafb2313a
+Subproject commit ffafe821bae68637fe46e36bcfd2a01b97cdf6f2
diff --git a/third_party/googletest b/third_party/googletest
index bf66935..912db74 160000
--- a/third_party/googletest
+++ b/third_party/googletest
@@ -1 +1 @@
-Subproject commit bf66935e07825318ae519675d73d0f3e313b3ec6
+Subproject commit 912db742531bf82efb01194bc08140416e3b3467
diff --git a/third_party/python-sdf-timing b/third_party/python-sdf-timing
index 0afbbfe..119eee0 160000
--- a/third_party/python-sdf-timing
+++ b/third_party/python-sdf-timing
@@ -1 +1 @@
-Subproject commit 0afbbfe5cec97330b3261d811a4d604a471a5d98
+Subproject commit 119eee06c5a8700da594c5e066259a96858ececa
diff --git a/third_party/yaml-cpp b/third_party/yaml-cpp
index 420c982..1b50109 160000
--- a/third_party/yaml-cpp
+++ b/third_party/yaml-cpp
@@ -1 +1 @@
-Subproject commit 420c98231094b1cd2e5de3a714c4e3ee9b4f1118
+Subproject commit 1b50109f7bea60bd382d8ea7befce3d2bd67da5f
diff --git a/third_party/yosys b/third_party/yosys
index 29c0a59..31c15e5 160000
--- a/third_party/yosys
+++ b/third_party/yosys
@@ -1 +1 @@
-Subproject commit 29c0a595892f36ca8755386c448105f8e2f499d6
+Subproject commit 31c15e5fa60b8cb47e7785fc420d90e860708034
diff --git a/utils/environment.sh b/utils/environment.sh
index fdb0b66..6e246cf 100644
--- a/utils/environment.sh
+++ b/utils/environment.sh
@@ -49,7 +49,7 @@
 # Verify an approved version is in use
 export XRAY_VIVADO_SETTINGS="${XRAY_VIVADO_SETTINGS:-/opt/Xilinx/Vivado/2017.2/settings64.sh}"
 # Vivado v2017.2 (64-bit)
-if [ $(${XRAY_VIVADO} -h |grep Vivado |cut -d\  -f 2) != "v2017.2" ] ; then
+if [ "$(${XRAY_VIVADO} -h |grep Vivado |cut -d\  -f 2)" != "v2017.2" ] ; then
     echo "Requires Vivado 2017.2. See https://github.com/SymbiFlow/prjxray/issues/14"
     # Can't exit since sourced script
     # Trash a key environment variable to preclude use