Added the OSU standard cell library to the set of configuration
targets for GF180MCU.  Revised the netgen setup file for GF180MCU
to declare which standard cells to ignore and to allows cells like
decap and fill to be parallelized.  Added an update script to run
"git pull" on cloned source repositories, which was missing.
diff --git a/VERSION b/VERSION
index 8f22796..e333f82 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.0.339
+1.0.340
diff --git a/gf180mcu/Makefile.in b/gf180mcu/Makefile.in
index c543511..1971ffa 100644
--- a/gf180mcu/Makefile.in
+++ b/gf180mcu/Makefile.in
@@ -155,9 +155,11 @@
 GF180MCU_SC_7T5V0_PATH = @GF180MCU_FD_SC_MCU7T5V0_PATH@
 GF180MCU_SC_9T5V0_PATH = @GF180MCU_FD_SC_MCU9T5V0_PATH@
 GF180MCU_SRAM_PATH = @GF180MCU_FD_IP_SRAM_PATH@
+GF180MCU_OSU_SC_PATH = @GF180MCU_OSU_SC_PATH@
 
 # Path to GF180MCU library sources
 PDK_URL = https://github.com/google
+OSU_URL = https://github.com/stineje
 
 # Names of library repositories
 PDK_LIB_PR =       ${PDK_URL}/globalfoundries-pdk-libs-gf180mcu_fd_pr
@@ -165,6 +167,7 @@
 PDK_LIB_SC_7T5V0 = ${PDK_URL}/globalfoundries-pdk-libs-gf180mcu_fd_sc_mcu7t5v0
 PDK_LIB_SC_9T5V0 = ${PDK_URL}/globalfoundries-pdk-libs-gf180mcu_fd_sc_mcu9t5v0
 PDK_LIB_SRAM =     ${PDK_URL}/globalfoundries-pdk-ip-gf180mcu_fd_ip_sram
+PDK_LIB_OSU_SC =   ${OSU_URL}/globalfoundries-pdk-libs-gf180mcu_osu_sc
 
 # NOTE:  Install destination is the git repository of the technology platform.
 # Once updated in git, the git project can be distributed to all hosts.
@@ -433,7 +436,7 @@
 all: $(foreach var, ${VARIANTS}, all-$(var))
 
 # Handle prerequisites
-prerequisites: pr-repo io-repo sc-7t-repo sc-9t-repo sram-repo
+prerequisites: pr-repo io-repo sc-7t-repo sc-9t-repo sram-repo osu-sc-repo
 
 pr-repo:
 	if test "x${GF180MCU_PR_PATH}" != "x" ; then \
@@ -485,37 +488,53 @@
 		fi ; \
 	fi
 
+osu-sc-repo:
+	if test "x${GF180MCU_OSU_SC_PATH}" != "x" ; then \
+		if test -d "${GF180MCU_OSU_SC_PATH}" ; then \
+			echo "Using existing installation of OSU 3.3V standard cell library from ${GF180MCU_OSU_SC_PATH}" ; \
+		else \
+			echo "Downloading OSU 3.3V standard cell library from ${GF180MCU_OSU_SC_PATH}" ; \
+			../scripts/download.sh ${PDK_LIB_OSU_SC} ${GF180MCU_OSU_SC_PATH} ; \
+		fi ; \
+	fi
+
 # Update prerequisites
-update: update-pr-repo update-io-repo update-sc-7t-repo update-sc-9t-repo update-ream-repo
+update: update-pr-repo update-io-repo update-sc-7t-repo update-sc-9t-repo update-sram-repo update-osu-sc-repo
 
 update-pr-repo:
 	if test "x${GF180MCU_PR_PATH}" != "x" ; then \
 		echo "Updating GF180MCU primitive library from ${PDK_LIB_PR}" ; \
-		custom/scripts/pdk_update.sh ${GF180MCU_PR_PATH} ; \
+		../scripts/update.sh ${GF180MCU_PR_PATH} ; \
 	fi
 
 update-io-repo:
 	if test "x${GF180MCU_IO_PATH}" != "x" ; then \
 		echo "Updating GF180MCU I/O library from ${PDK_LIB_IO}" ; \
-		custom/scripts/pdk_update.sh ${GF180MCU_IO_PATH} ; \
+		../scripts/update.sh ${GF180MCU_IO_PATH} ; \
 	fi
 
 update-sc-7t-repo:
 	if test "x${GF180MCU_SC_7T5V0_PATH}" != "x" ; then \
 		echo "Updating GF180MCU 7-track standard cell library from ${PDK_LIB_SC_7T5V0}" ; \
-		custom/scripts/pdk_update.sh ${GF180MCU_SC_7T5V0_PATH} ; \
+		../scripts/update.sh ${GF180MCU_SC_7T5V0_PATH} ; \
 	fi
 
 update-sc-9t-repo:
 	if test "x${GF180MCU_SC_9T5V0_PATH}" != "x" ; then \
 		echo "Updating GF180MCU 9-track standard cell library from ${PDK_LIB_SC_9T5V0}" ; \
-		custom/scripts/pdk_update.sh ${GF180MCU_SC_9T5V0_PATH} ; \
+		../scripts/update.sh ${GF180MCU_SC_9T5V0_PATH} ; \
 	fi
 
 update-sram-repo:
 	if test "x${GF180MCU_SRAM_PATH}" != "x" ; then \
 		echo "Updating GF180MCU SRAM macro library from ${PDK_LIB_SRAM}" ; \
-		custom/scripts/pdk_update.sh ${GF180MCU_SRAM_PATH} ; \
+		../scripts/update.sh ${GF180MCU_SRAM_PATH} ; \
+	fi
+
+update-osu-sc-repo:
+	if test "x${GF180MCU_OSU_SC_PATH}" != "x" ; then \
+		echo "Updating GF180MCU OSU 3.3V standard cell library from ${PDK_LIB_OSU_SC}" ; \
+		../scripts/update.sh ${GF180MCU_OSU_SC_PATH} ; \
 	fi
 
 all-%: prerequisites
@@ -669,11 +688,11 @@
 		${OPENLANE_STAGING_$*}/rules.openrcx.gf180mcu$*.max.magic ;\
 	fi
 
-vendor-A: primitive-build-A digital-7t5v0-build-A digital-9t5v0-build-A io-build-A sram-build-A
+vendor-A: primitive-build-A digital-7t5v0-build-A digital-9t5v0-build-A io-build-A sram-build-A digital-osu-build-A
 
-vendor-B: primitive-build-B digital-7t5v0-build-B digital-9t5v0-build-B io-build-B sram-build-B
+vendor-B: primitive-build-B digital-7t5v0-build-B digital-9t5v0-build-B io-build-B sram-build-B digital-osu-build-B
 
-vendor-C: primitive-build-C digital-7t5v0-build-C digital-9t5v0-build-C io-build-C sram-build-C
+vendor-C: primitive-build-C digital-7t5v0-build-C digital-9t5v0-build-C io-build-C sram-build-C digital-osu-build-C
 
 primitive-build-%:
 	if test -d ${GF180MCU_PR_PATH} ; then \
@@ -705,6 +724,12 @@
 		make sram-$* ;\
 	fi
 
+digital-osu-build-%:
+	if test -d ${GF180MCU_OSU_SC_PATH} ; then \
+		echo "Building OSU 3.3V digital standard cell libraries" ;\
+		make digital-osu-$* ;\
+	fi
+
 primitive-%:
         # Install tech LEF and primitive devices from vendor files
 	${STAGE} -source ${GF180MCU_PR_PATH} \
@@ -829,6 +854,39 @@
 		-library digital gf180mcu_fd_sc_mcu7t5v0 2>&1 | \
 		tee -a ${GF180MCU$*}_make.log
 
+digital-osu-%:
+        # Install OSU 3.3V digital standard cells from vendor files
+	# NOTE: Work in progress (to be completed)
+	${STAGE} -source ${GF180MCU_OSU_SC_PATH} \
+		-target ${STAGING_PATH}/${GF180MCU$*} \
+		-techlef lib/9T/tlef/gf180mcu_*_tech.lef \
+			rename=gf180mcu_osu_sc_9T.tlef \
+		-liberty char/techfiles/gf180mcu_9T_TT_3P3_25C*.lib \
+			rename=gf180mcu_osu_sc_9T__tt_025C_3v30 \
+		-verilog lib/9T/verilog/*.v \
+			rename=gf180mcu_osu_sc_9T \
+		-lef lib/9T/lef/*.lef \
+		-gds lib/9T/gds/*.gds compile-only \
+		-spice lib/9T/ngspice/*.spice compile-only \
+		-xschem lib/9T/schematics/*.sch \
+		-library digital gf180mcu_osu_sc_9T 2>&1 | \
+		tee -a ${GF180MCU$*}_make.log
+
+	${STAGE} -source ${GF180MCU_OSU_SC_PATH} \
+		-target ${STAGING_PATH}/${GF180MCU$*} \
+		-techlef lib/12T/tlef/gf180mcu_*_tech.lef \
+			rename=gf180mcu_osu_sc_12T.tlef \
+		-liberty char/techfiles/gf180mcu_12T_TT_3P3_25C*.lib \
+			rename=gf180mcu_osu_sc_12T__tt_025C_3v30 \
+		-verilog lib/12T/verilog/*.v \
+			rename=gf180mcu_osu_sc_12T \
+		-lef lib/12T/lef/*.lef \
+		-gds lib/12T/gds/*.gds compile-only \
+		-spice lib/12T/ngspice/*.spice compile-only \
+		-xschem lib/12T/schematics/*.sch \
+		-library digital gf180mcu_osu_sc_12T 2>&1 | \
+		tee -a ${GF180MCU$*}_make.log
+
 io-%:
         # Install I/O cells from vendor files
 	# Note:  Do not use GF LEF views.  Annotate only.  LEF is being renamed
diff --git a/gf180mcu/netgen/gf180mcu_setup.tcl b/gf180mcu/netgen/gf180mcu_setup.tcl
index e59db6e..5de5581 100644
--- a/gf180mcu/netgen/gf180mcu_setup.tcl
+++ b/gf180mcu/netgen/gf180mcu_setup.tcl
@@ -10,6 +10,9 @@
 property default
 property parallel none
 
+# Allow override of default #columns in the output format.
+catch {format $env(NETGEN_COLUMNS)}
+
 #---------------------------------------------------------------
 # For the following, get the cell lists from
 # circuit1 and circuit2.
@@ -26,13 +29,25 @@
 # Resistors (except metal)
 #-------------------------------------------
 
-set devices {nwell_1p5 ppolyf_u npolyf_u ppolyf_s nplus_u pplus_u nw1a_6p0}
-lappend devices npolyf_s pfield_1p5 pf1va_6p0
+set devices {}
+lappend devices nwell_1p5
+lappend devices ppolyf_u
+lappend devices npolyf_u
+lappend devices ppolyf_s
+lappend devices nplus_u
+lappend devices pplus_u
+lappend devices nw1a_6p0
+
+lappend devices npolyf_s
+lappend devices pfield_1p5
+lappend devices pf1va_6p0
 #ifdef HRPOLY1K
-lappend devices ppolyf_u_1k ppolyf_u_1k_6p0
+lappend devices ppolyf_u_1k
+lappend devices ppolyf_u_1k_6p0
 #endif
 #ifdef HRPOLY2K
-lappend devices ppolyf_u_2k ppolyf_u_2k_6p0
+lappend devices ppolyf_u_2k
+lappend devices ppolyf_u_2k_6p0
 #endif
 
 foreach dev $devices {
@@ -60,7 +75,9 @@
 # RM (metal) resistors
 #-------------------------------------------
 
-set devices {rm1 rm2}
+set devices {}
+lappend devices rm1
+lappend devices rm2
 #ifdef METALS4 || METALS5 || METALS6 || METALS7
 lappend devices rm3
 #endif (METALS4 || METALS5 || METALS6 || METALS7)
@@ -101,7 +118,13 @@
 # (MOS) transistors
 #-------------------------------------------
 
-set devices {nmos_1p5 pmos_1p5 nmos_6p0 pmos_6p0 nmoscap_1p5 nmoscap_6p0}
+set devices {}
+lappend devices nmos_1p5
+lappend devices pmos_1p5
+lappend devices nmos_6p0
+lappend devices pmos_6p0
+lappend devices nmoscap_1p5
+lappend devices nmoscap_6p0
 
 foreach dev $devices {
     if {[lsearch $cells1 $dev] >= 0} {
@@ -126,7 +149,13 @@
 # diodes
 #-------------------------------------------
 
-set devices {np_1p5 pn_1p5 np_6p0 pn_6p0 nwp_1p5 nwp_6p0}
+set devices {}
+lappend devices np_1p5
+lappend devices pn_1p5
+lappend devices np_6p0
+lappend devices pn_6p0
+lappend devices nwp_1p5
+lappend devices nwp_6p0
 
 foreach dev $devices {
     if {[lsearch $cells1 $dev] >= 0} {
@@ -151,8 +180,14 @@
 # sandwich (MoM) capacitors, and MiM capacitors
 #-----------------------------------------------
 
-set devices {vnpn_lv_2p5x2p5 vnpn_lv_5x5 vnpn_lv_10x10}
-lappend devices vnpn_mv_2p5x2p5 vnpn_mv_5x5 vnpn_mv_10x10
+set devices {}
+lappend devices vnpn_lv_2p5x2p5
+lappend devices vnpn_lv_5x5
+lappend devices vnpn_lv_10x10
+
+lappend devices vnpn_mv_2p5x2p5
+lappend devices vnpn_mv_5x5
+lappend devices vnpn_mv_10x10
 lappend devices apmom_bb
 #ifdef MIM
 lappend devices mim_sm_bb
@@ -175,70 +210,79 @@
 }
 
 #---------------------------------------------------------------
-# D_CELLS_SC9 (ignore FILL cells)
+# Digital cells (ignore decap, fill, and tap cells)
+# Make a separate list for each supported library
 #---------------------------------------------------------------
-# e.g., ignore class "-circuit2 FILL5"
+# e.g., ignore class "-circuit2 gf180mcu_fd_sc_mcu7t5v0__endcap"
 #---------------------------------------------------------------
 
 foreach cell $cells1 {
-    if {[regexp "FILL\[0-9\]+" $cell match]} {
+#   if {[regexp {gf180mcu_fd_sc_mcu[^_]__fillcap_[[:digit:]]+} $cell match]} {
+#       ignore class "-circuit1 $cell"
+#   }
+    if {[regexp {gf180mcu_fd_sc_mcu[^_]__endcap} $cell match]} {
+        ignore class "-circuit1 $cell"
+    }
+    if {[regexp {gf180mcu_fd_sc_mcu[^_]__fill_[[:digit:]]+} $cell match]} {
+        ignore class "-circuit1 $cell"
+    }
+    if {[regexp {gf180mcu_fd_sc_mcu[^_]__filltie} $cell match]} {
         ignore class "-circuit1 $cell"
     }
 }
+
 foreach cell $cells2 {
-    if {[regexp "FILL\[0-9\]+" $cell match]} {
+#   if {[regexp {gf180mcu_fd_sc_mcu[^_]__fillcap_[[:digit:]]+} $cell match]} {
+#       ignore class "-circuit2 $cell"
+#   }
+    if {[regexp {gf180mcu_fd_sc_mcu[^_]__endcap} $cell match]} {
+        ignore class "-circuit2 $cell"
+    }
+    if {[regexp {gf180mcu_fd_sc_mcu[^_]__fill_[[:digit:]]+} $cell match]} {
+        ignore class "-circuit2 $cell"
+    }
+    if {[regexp {gf180mcu_fd_sc_mcu[^_]__filltie} $cell match]} {
         ignore class "-circuit2 $cell"
     }
 }
 
 #---------------------------------------------------------------
-# ICPIO_5P0 (ignore FILL cells)
+# Allow the fill, decap, etc., cells to be parallelized
 #---------------------------------------------------------------
-# e.g., ignore class "-circuit1 GF_CI_FILL5"
-#---------------------------------------------------------------
-foreach cell $cells1 {
-    if {[regexp "GF_CI_FILL.*" $cell match]} {
-        ignore class "-circuit1 $cell"
-    }
-}
-foreach cell $cells2 {
-    if {[regexp "GF_CI_FILL.*" $cell match]} {
-        ignore class "-circuit2 $cell"
-    }
-}
 
-#---------------------------------------------------------------
-# Handle cells captured from Electric
-#
-# Find cells of the form "<library>__<cellname>" in the netlist
-# from Electric where the extracted layout netlist has only
-# "<cellname>".  Cross-check by ensuring that the full name
-# "<library>__<cellname>" does not exist in both cells, and that
-# the truncated name "<cellname>" does not exist in both cells.
-#---------------------------------------------------------------
-# e.g., hydra_spi_controller__hydra_spi_controller
-#---------------------------------------------------------------
 foreach cell $cells1 {
-    if {[regexp "(.+)__(.+)" $cell match library cellname]} {
-        if {([lsearch $cells2 $cell] < 0) && \
-                ([lsearch $cells2 $cellname] >= 0) && \
-                ([lsearch $cells1 $cellname] < 0)} {
-            equate classes "-circuit1 $cell" "-circuit2 $cellname"
-	    puts stdout "Matching pins of $cell in circuit 1 and $cellname in circuit 2"
-	    equate pins "-circuit1 $cell" "-circuit2 $cellname"
-        }
+    if {[regexp {gr180mcu_fd_sc_mcu[^_]+__fillcap_[[:digit:]]+} $cell match]} {
+        property "-circuit1 $cell" parallel enable
+    }
+    if {[regexp {gf180mcu_fd_sc_mcu[^_]__endcap} $cell match]} {
+        property "-circuit1 $cell" parallel enable
+    }
+    if {[regexp {gf180mcu_fd_sc_mcu[^_]__fill_[[:digit:]]+} $cell match]} {
+        property "-circuit1 $cell" parallel enable
+    }
+    if {[regexp {gf180mcu_fd_sc_mcu[^_]__filltie} $cell match]} {
+        property "-circuit1 $cell" parallel enable
+    }
+    if {[regexp {gf180mcu_fd_sc_mcu[^_]__antenna} $cell match]} {
+        property "-circuit1 $cell" parallel enable
     }
 }
 
 foreach cell $cells2 {
-    if {[regexp "(.+)__(.+)" $cell match library cellname]} {
-        if {([lsearch $cells1 $cell] < 0) && \
-                ([lsearch $cells1 $cellname] >= 0) && \
-                ([lsearch $cells2 $cellname] < 0)} {
-            equate classes "-circuit1 $cellname" "-circuit2 $cell"
-	    puts stdout "Matching pins of $cellname in circuit 1 and $cell in circuit 2"
-	    equate pins "-circuit1 $cellname" "-circuit2 $cell"
-        }
+    if {[regexp {gr180mcu_fd_sc_mcu[^_]+__fillcap_[[:digit:]]+} $cell match]} {
+        property "-circuit2 $cell" parallel enable
+    }
+    if {[regexp {gf180mcu_fd_sc_mcu[^_]__endcap} $cell match]} {
+        property "-circuit2 $cell" parallel enable
+    }
+    if {[regexp {gf180mcu_fd_sc_mcu[^_]__fill_[[:digit:]]+} $cell match]} {
+        property "-circuit2 $cell" parallel enable
+    }
+    if {[regexp {gf180mcu_fd_sc_mcu[^_]__filltie} $cell match]} {
+        property "-circuit2 $cell" parallel enable
+    }
+    if {[regexp {gf180mcu_fd_sc_mcu[^_]__antenna} $cell match]} {
+        property "-circuit2 $cell" parallel enable
     }
 }
 
diff --git a/scripts/configure b/scripts/configure
index 2ecf8b7..b5f03f5 100755
--- a/scripts/configure
+++ b/scripts/configure
@@ -590,6 +590,7 @@
 OPENPDKS_TOP
 ENABLED_TECHS
 EF_STYLE
+GF180MCU_OSU_SC_PATH
 GF180MCU_FD_IP_SRAM_PATH
 GF180MCU_FD_SC_MCU9T5V0_PATH
 GF180MCU_FD_SC_MCU7T5V0_PATH
@@ -697,6 +698,7 @@
 enable_sc_7t5v0_gf180mcu
 enable_sc_9t5v0_gf180mcu
 enable_sram_gf180mcu
+enable_osu_sc_gf180mcu
 with_ef_style
 '
       ac_precious_vars='build_alias
@@ -1394,6 +1396,9 @@
   --enable-sram-gf180mcu[=path]
                           Install gf180mcu_fd_ip_sram. If path is omitted, the repository
                           will be downloaded. [default=enabled]
+  --enable-osu-sc-gf180mcu[=path]
+                          Install gf180mcu_osu_sc. If path is omitted, the repository
+                          will be downloaded. [default=enabled]
 
 Optional Packages:
   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
@@ -3205,6 +3210,50 @@
 
 
 # GlobalFoundries gf180mcu optional
+
+
+
+
+
+
+    # echo target targetvar flag location
+
+    GF180MCU_OSU_SC_PATH=""
+
+    # Check whether --enable-osu-sc-gf180mcu was given.
+if test "${enable_osu_sc_gf180mcu+set}" = set; then :
+  enableval=$enable_osu_sc_gf180mcu;
+            if test "$enableval" == "yes" -o "$enableval" == "YES"; then
+                { $as_echo "$as_me:${as_lineno-$LINENO}: Package 'gf180mcu_osu_sc' will be installed automatically during make." >&5
+$as_echo "$as_me: Package 'gf180mcu_osu_sc' will be installed automatically during make." >&6;}
+        	export GF180MCU_OSU_SC_PATH=../sources/gf180mcu_osu_sc
+            elif test "$enableval" == "no" -o "$enableval" == "NO"; then
+                { $as_echo "$as_me:${as_lineno-$LINENO}: Disabling package 'gf180mcu_osu_sc'" >&5
+$as_echo "$as_me: Disabling package 'gf180mcu_osu_sc'" >&6;}
+    		export GF180MCU_OSU_SC_PATH=""
+            else
+                GF180MCU_OSU_SC_PATH=$enableval
+                { $as_echo "$as_me:${as_lineno-$LINENO}: Enabling package 'gf180mcu_osu_sc' at $GF180MCU_OSU_SC_PATH" >&5
+$as_echo "$as_me: Enabling package 'gf180mcu_osu_sc' at $GF180MCU_OSU_SC_PATH" >&6;}
+            fi
+            GF180MCU_OSU_SC_PATH=`realpath $GF180MCU_OSU_SC_PATH`
+
+else
+
+            { $as_echo "$as_me:${as_lineno-$LINENO}: Package 'gf180mcu_osu_sc' will be installed automatically during make." >&5
+$as_echo "$as_me: Package 'gf180mcu_osu_sc' will be installed automatically during make." >&6;}
+	    GF180MCU_OSU_SC_PATH=../sources/gf180mcu_osu_sc
+
+
+fi
+
+
+
+
+
+
+
+# GlobalFoundries gf180mcu optional
 # (None yet)
 
 
diff --git a/scripts/configure.ac b/scripts/configure.ac
index 77e73da..ce8662a 100755
--- a/scripts/configure.ac
+++ b/scripts/configure.ac
@@ -248,6 +248,9 @@
 M4_GEN_INSTALLATION(gf180mcu_fd_ip_sram, sram-gf180mcu, ../sources)
 
 # GlobalFoundries gf180mcu optional
+M4_GEN_INSTALLATION(gf180mcu_osu_sc, osu-sc-gf180mcu, ../sources)
+
+# GlobalFoundries gf180mcu optional
 # (None yet)
 
 AC_DEFUN([M4_GEN_WITH_TOOLS], [
diff --git a/scripts/download.sh b/scripts/download.sh
index 2a5e3a2..56af3ea 100755
--- a/scripts/download.sh
+++ b/scripts/download.sh
@@ -2,7 +2,8 @@
 #
 # download.sh --
 #	Download a tarball from the specified URL to the specified target
-#	directory, untar it, and remove the tarball file.
+#	directory, untar it, and remove the tarball file.  If the URL is
+#	a repository and not a file, then clone it.
 #
 #	Usage:  download.sh <url> <target_dir> [<strip>]
 #