Separated out the different libraries into individual Makefile
recipes.  This avoids creating directories and throwing errors
when attempting to build a library submodule that has not been
initialized in the skywater-pdk repository.  Also added a missing
install line for custom GDS files in the HS and HVL digital
libraries.
diff --git a/sky130/Makefile.in b/sky130/Makefile.in
index f5747a9..8162567 100644
--- a/sky130/Makefile.in
+++ b/sky130/Makefile.in
@@ -787,8 +787,32 @@
 	# assumes that the same library version is used for all libraries, which
 	# is fine with "latest" but otherwise probably invalid.
 	if test -d ${SKYWATER_LIBS_PATH}/sky130_fd_sc_hd/latest/cells ; then \
-		echo "Building digital standard cell libraries" ;\
-		make digital-a ;\
+		echo "Building digital high-density standard cell library" ;\
+		make digital-hd-a ;\
+	fi
+	if test -d ${SKYWATER_LIBS_PATH}/sky130_fd_sc_hvl/latest/cells ; then \
+		echo "Building digital high-voltage standard cell library" ;\
+		make digital-hvl-a ;\
+	fi
+	if test -d ${SKYWATER_LIBS_PATH}/sky130_fd_sc_hdll/latest/cells ; then \
+		echo "Building digital high-density low-leakage standard cell library" ;\
+		make digital-hdll-a ;\
+	fi
+	if test -d ${SKYWATER_LIBS_PATH}/sky130_fd_sc_lp/latest/cells ; then \
+		echo "Building digital low-power standard cell library" ;\
+		make digital-lp-a ;\
+	fi
+	if test -d ${SKYWATER_LIBS_PATH}/sky130_fd_sc_hs/latest/cells ; then \
+		echo "Building digital high-speed standard cell library" ;\
+		make digital-hs-a ;\
+	fi
+	if test -d ${SKYWATER_LIBS_PATH}/sky130_fd_sc_ms/latest/cells ; then \
+		echo "Building digital medium-speed standard cell library" ;\
+		make digital-ms-a ;\
+	fi
+	if test -d ${SKYWATER_LIBS_PATH}/sky130_fd_sc_ls/latest/cells ; then \
+		echo "Building digital low-speed standard cell library" ;\
+		make digital-ls-a ;\
 	fi
 	if test "x${ALPHA_PATH}" != "x" ; then \
 		echo "Building alphanumeric layout libraries" ;\
@@ -945,7 +969,7 @@
 	${ADDPROP} ${STAGING_PATH}/${SKY130A} sky130_fd_io sky130_fd_io__top_gpiov2 \
 		"MASKHINTS_HVI 1346 17198 5828 19224 13700 1890 15920 2360 24 17522 1778 20612" -mag
 
-digital-a:
+digital-hd-a:
 	# Install custom additions to standard cell libraries
 	${STAGE} -source ./custom -target ${STAGING_PATH}/${SKY130A} \
 		-gds %l/gds/*.gds options=custom/scripts/gds_import_setup.tcl \
@@ -974,39 +998,88 @@
 		-verilog %l/latest/cells/*/*.v exclude=*.*.v,primitives.v \
 			compile-only filter=custom/scripts/inc_verilog.py \
 			sort=../common/sort_pdkfiles.py \
-		-library digital sky130_fd_sc_hd \
-		-library digital sky130_fd_sc_hdll \
-		-library digital sky130_fd_sc_hvl \
-		-library digital sky130_fd_sc_hs \
-		-library digital sky130_fd_sc_ls \
-		-library digital sky130_fd_sc_ms \
-		-library digital sky130_fd_sc_lp 2>&1 | tee -a ${SKY130A}_make.log
-	# Add a maskhint set for the tap cell .ag view to prevent problems writing
+		-library digital sky130_fd_sc_hd 2>&1 | tee -a ${SKY130A}_make.log
+	# Add a maskhint set for the tap cell .mag view to prevent problems writing
 	# when writing NSDM and PSDM to GDS during hierarchical adjustments.
 	${ADDPROP} ${STAGING_PATH}/${SKY130A} sky130_fd_sc_hd sky130_fd_sc_hd__tapvpwrvgnd_1 \
 		"MASKHINTS_PSDM 0 38 92 196" -mag
 	${ADDPROP} ${STAGING_PATH}/${SKY130A} sky130_fd_sc_hd sky130_fd_sc_hd__tapvpwrvgnd_1 \
 		"MASKHINTS_NSDM 0 280 92 506" -mag
+	# Remove the base verilog files which have already been included into
+	# the libraries
+	${RM} ${STAGING_PATH}/${SKY130A}/libs.ref/${HD_VERILOG}/*.*.v
+	# Apply extra PDK patches until they get fixed properly in the source
+	patch -p1 -f -d ${STAGING_PATH}/${SKY130A}/libs.ref/${HD_TECHLEF} \
+		< custom/patches/hd_minenclosed.squeaky.patch \
+		2>&1 | tee -a ${SKY130A}_make.log || true
+
+digital-hdll-a:
+	# Install all SkyWater digital standard cells.
+	${STAGE} -source ${SKYWATER_LIBS_PATH} -target ${STAGING_PATH}/${SKY130A} \
+		-techlef %l/latest/tech/*.tlef \
+		-spice %l/latest/cells/*/*.spice compile-only \
+			sort=../common/sort_pdkfiles.py \
+			filter=custom/scripts/fix_device_models.py \
+		-cdl %l/latest/cells/*/*.cdl ignore=topography compile-only \
+			sort=../common/sort_pdkfiles.py \
+		-lef %l/latest/cells/*/*.magic.lef compile-only \
+			sort=../common/sort_pdkfiles.py \
+		-doc %l/latest/cells/*/*.pdf \
+		-lib %l/latest/timing/*.lib \
+		-gds %l/latest/cells/*/*.gds compile-only \
+			options=custom/scripts/gds_import_setup.tcl \
+			sort=../common/sort_pdkfiles.py \
+		-verilog %l/latest/models/*/*.v exclude=*.*.v compile-only \
+			rename=primitives filter=custom/scripts/inc_verilog.py \
+			sort=../common/sort_pdkfiles.py \
+		-verilog %l/latest/cells/*/*.*.v \
+		-verilog %l/latest/cells/*/*.v exclude=*.*.v,primitives.v \
+			compile-only filter=custom/scripts/inc_verilog.py \
+			sort=../common/sort_pdkfiles.py \
+		-library digital sky130_fd_sc_hdll 2>&1 | tee -a ${SKY130A}_make.log
+	# Remove the base verilog files which have already been included into
+	# the libraries
+	${RM} ${STAGING_PATH}/${SKY130A}/libs.ref/${HDLL_VERILOG}/*.*.v
+	# Apply extra PDK patches until they get fixed properly in the source
+	patch -p1 -f -d ${STAGING_PATH}/${SKY130A}/libs.ref/${HDLL_TECHLEF} \
+		< custom/patches/hdll_minenclosed.squeaky.patch \
+		2>&1 | tee -a ${SKY130A}_make.log || true
+
+digital-hvl-a:
+	# Install custom additions to standard cell libraries
+	${STAGE} -source ./custom -target ${STAGING_PATH}/${SKY130A} \
+		-gds %l/gds/*.gds options=custom/scripts/gds_import_setup.tcl \
+		-library digital sky130_fd_sc_hvl 2>&1 | tee -a ${SKY130A}_make.log
+	# Install all SkyWater digital standard cells.
+	${STAGE} -source ${SKYWATER_LIBS_PATH} -target ${STAGING_PATH}/${SKY130A} \
+		-techlef %l/latest/tech/*.tlef \
+		-spice %l/latest/cells/*/*.spice compile-only \
+			sort=../common/sort_pdkfiles.py \
+			filter=custom/scripts/fix_device_models.py \
+		-cdl %l/latest/cells/*/*.cdl ignore=topography compile-only \
+			sort=../common/sort_pdkfiles.py \
+		-lef %l/latest/cells/*/*.magic.lef compile-only \
+			sort=../common/sort_pdkfiles.py \
+		-doc %l/latest/cells/*/*.pdf \
+		-lib %l/latest/timing/*.lib \
+		-gds %l/latest/cells/*/*.gds compile-only \
+			options=custom/scripts/gds_import_setup.tcl \
+			sort=../common/sort_pdkfiles.py \
+		-verilog %l/latest/models/*/*.v exclude=*.*.v compile-only \
+			rename=primitives filter=custom/scripts/inc_verilog.py \
+			sort=../common/sort_pdkfiles.py \
+		-verilog %l/latest/cells/*/*.*.v \
+		-verilog %l/latest/cells/*/*.v exclude=*.*.v,primitives.v \
+			compile-only filter=custom/scripts/inc_verilog.py \
+			sort=../common/sort_pdkfiles.py \
+		-library digital sky130_fd_sc_hvl 2>&1 | tee -a ${SKY130A}_make.log
 	# Add a maskhint to the HVL level shifter to represent the HVI layer as
 	# drawn in the GDS, and so eliminate the HVI-to-nwell DRC error.
 	${ADDPROP} ${STAGING_PATH}/${SKY130A} sky130_fd_sc_hvl sky130_fd_sc_hvl__lsbufhv2lv_1 \
 		"MASKHINTS_HVI 22 34 706 1316" -mag
 	# Remove the base verilog files which have already been included into
 	# the libraries
-	${RM} ${STAGING_PATH}/${SKY130A}/libs.ref/${HD_VERILOG}/*.*.v
-	${RM} ${STAGING_PATH}/${SKY130A}/libs.ref/${HDLL_VERILOG}/*.*.v
 	${RM} ${STAGING_PATH}/${SKY130A}/libs.ref/${HVL_VERILOG}/*.*.v
-	${RM} ${STAGING_PATH}/${SKY130A}/libs.ref/${HS_VERILOG}/*.*.v
-	${RM} ${STAGING_PATH}/${SKY130A}/libs.ref/${MS_VERILOG}/*.*.v
-	${RM} ${STAGING_PATH}/${SKY130A}/libs.ref/${LS_VERILOG}/*.*.v
-	${RM} ${STAGING_PATH}/${SKY130A}/libs.ref/${LP_VERILOG}/*.*.v
-	# Apply extra PDK patches until they get fixed properly in the source
-	patch -p1 -f -d ${STAGING_PATH}/${SKY130A}/libs.ref/${HD_TECHLEF} \
-		< custom/patches/hd_minenclosed.squeaky.patch \
-		2>&1 | tee -a ${SKY130A}_make.log || true
-	patch -p1 -f -d ${STAGING_PATH}/${SKY130A}/libs.ref/${HDLL_TECHLEF} \
-		< custom/patches/hdll_minenclosed.squeaky.patch \
-		2>&1 | tee -a ${SKY130A}_make.log || true
 	# Custom:  Patch the HVL library to correct the resistor device names
 	patch -p3 -f -d ${STAGING_PATH}/${SKY130A}/libs.ref/${HVL_SPICE} \
 		< custom/patches/sky130_fd_pr_${HVL_PATCH4}.patch \
@@ -1015,6 +1088,123 @@
 		< custom/patches/sky130_fd_pr_6.patch \
 		2>&1 | tee -a ${SKY130A}_make.log || true
 
+digital-lp-a:
+	# Install all SkyWater digital standard cells.
+	${STAGE} -source ${SKYWATER_LIBS_PATH} -target ${STAGING_PATH}/${SKY130A} \
+		-techlef %l/latest/tech/*.tlef \
+		-spice %l/latest/cells/*/*.spice compile-only \
+			sort=../common/sort_pdkfiles.py \
+			filter=custom/scripts/fix_device_models.py \
+		-cdl %l/latest/cells/*/*.cdl ignore=topography compile-only \
+			sort=../common/sort_pdkfiles.py \
+		-lef %l/latest/cells/*/*.magic.lef compile-only \
+			sort=../common/sort_pdkfiles.py \
+		-doc %l/latest/cells/*/*.pdf \
+		-lib %l/latest/timing/*.lib \
+		-gds %l/latest/cells/*/*.gds compile-only \
+			options=custom/scripts/gds_import_setup.tcl \
+			sort=../common/sort_pdkfiles.py \
+		-verilog %l/latest/models/*/*.v exclude=*.*.v compile-only \
+			rename=primitives filter=custom/scripts/inc_verilog.py \
+			sort=../common/sort_pdkfiles.py \
+		-verilog %l/latest/cells/*/*.*.v \
+		-verilog %l/latest/cells/*/*.v exclude=*.*.v,primitives.v \
+			compile-only filter=custom/scripts/inc_verilog.py \
+			sort=../common/sort_pdkfiles.py \
+		-library digital sky130_fd_sc_lp 2>&1 | tee -a ${SKY130A}_make.log
+	# Remove the base verilog files which have already been included into
+	# the libraries
+	${RM} ${STAGING_PATH}/${SKY130A}/libs.ref/${LP_VERILOG}/*.*.v
+
+digital-hs-a:
+	# Install custom additions to standard cell libraries
+	${STAGE} -source ./custom -target ${STAGING_PATH}/${SKY130A} \
+		-gds %l/gds/*.gds options=custom/scripts/gds_import_setup.tcl \
+		-library digital sky130_fd_sc_hs 2>&1 | tee -a ${SKY130A}_make.log
+	# Install all SkyWater digital standard cells.
+	${STAGE} -source ${SKYWATER_LIBS_PATH} -target ${STAGING_PATH}/${SKY130A} \
+		-techlef %l/latest/tech/*.tlef \
+		-spice %l/latest/cells/*/*.spice compile-only \
+			sort=../common/sort_pdkfiles.py \
+			filter=custom/scripts/fix_device_models.py \
+		-cdl %l/latest/cells/*/*.cdl ignore=topography compile-only \
+			sort=../common/sort_pdkfiles.py \
+		-lef %l/latest/cells/*/*.magic.lef compile-only \
+			sort=../common/sort_pdkfiles.py \
+		-doc %l/latest/cells/*/*.pdf \
+		-lib %l/latest/timing/*.lib \
+		-gds %l/latest/cells/*/*.gds compile-only \
+			exclude=sky130_fd_sc_hs__decap_8.gds \
+			options=custom/scripts/gds_import_setup.tcl \
+			sort=../common/sort_pdkfiles.py \
+		-verilog %l/latest/models/*/*.v exclude=*.*.v compile-only \
+			rename=primitives filter=custom/scripts/inc_verilog.py \
+			sort=../common/sort_pdkfiles.py \
+		-verilog %l/latest/cells/*/*.*.v \
+		-verilog %l/latest/cells/*/*.v exclude=*.*.v,primitives.v \
+			compile-only filter=custom/scripts/inc_verilog.py \
+			sort=../common/sort_pdkfiles.py \
+		-library digital sky130_fd_sc_hs 2>&1 | tee -a ${SKY130A}_make.log
+	# Remove the base verilog files which have already been included into
+	# the libraries
+	${RM} ${STAGING_PATH}/${SKY130A}/libs.ref/${HS_VERILOG}/*.*.v
+
+digital-ms-a:
+	# Install all SkyWater digital standard cells.
+	${STAGE} -source ${SKYWATER_LIBS_PATH} -target ${STAGING_PATH}/${SKY130A} \
+		-techlef %l/latest/tech/*.tlef \
+		-spice %l/latest/cells/*/*.spice compile-only \
+			sort=../common/sort_pdkfiles.py \
+			filter=custom/scripts/fix_device_models.py \
+		-cdl %l/latest/cells/*/*.cdl ignore=topography compile-only \
+			sort=../common/sort_pdkfiles.py \
+		-lef %l/latest/cells/*/*.magic.lef compile-only \
+			sort=../common/sort_pdkfiles.py \
+		-doc %l/latest/cells/*/*.pdf \
+		-lib %l/latest/timing/*.lib \
+		-gds %l/latest/cells/*/*.gds compile-only \
+			options=custom/scripts/gds_import_setup.tcl \
+			sort=../common/sort_pdkfiles.py \
+		-verilog %l/latest/models/*/*.v exclude=*.*.v compile-only \
+			rename=primitives filter=custom/scripts/inc_verilog.py \
+			sort=../common/sort_pdkfiles.py \
+		-verilog %l/latest/cells/*/*.*.v \
+		-verilog %l/latest/cells/*/*.v exclude=*.*.v,primitives.v \
+			compile-only filter=custom/scripts/inc_verilog.py \
+			sort=../common/sort_pdkfiles.py \
+		-library digital sky130_fd_sc_ms 2>&1 | tee -a ${SKY130A}_make.log
+	# Remove the base verilog files which have already been included into
+	# the libraries
+	${RM} ${STAGING_PATH}/${SKY130A}/libs.ref/${MS_VERILOG}/*.*.v
+
+digital-ls-a:
+	# Install all SkyWater digital standard cells.
+	${STAGE} -source ${SKYWATER_LIBS_PATH} -target ${STAGING_PATH}/${SKY130A} \
+		-techlef %l/latest/tech/*.tlef \
+		-spice %l/latest/cells/*/*.spice compile-only \
+			sort=../common/sort_pdkfiles.py \
+			filter=custom/scripts/fix_device_models.py \
+		-cdl %l/latest/cells/*/*.cdl ignore=topography compile-only \
+			sort=../common/sort_pdkfiles.py \
+		-lef %l/latest/cells/*/*.magic.lef compile-only \
+			sort=../common/sort_pdkfiles.py \
+		-doc %l/latest/cells/*/*.pdf \
+		-lib %l/latest/timing/*.lib \
+		-gds %l/latest/cells/*/*.gds compile-only \
+			options=custom/scripts/gds_import_setup.tcl \
+			sort=../common/sort_pdkfiles.py \
+		-verilog %l/latest/models/*/*.v exclude=*.*.v compile-only \
+			rename=primitives filter=custom/scripts/inc_verilog.py \
+			sort=../common/sort_pdkfiles.py \
+		-verilog %l/latest/cells/*/*.*.v \
+		-verilog %l/latest/cells/*/*.v exclude=*.*.v,primitives.v \
+			compile-only filter=custom/scripts/inc_verilog.py \
+			sort=../common/sort_pdkfiles.py \
+		-library digital sky130_fd_sc_ls 2>&1 | tee -a ${SKY130A}_make.log
+	# Remove the base verilog files which have already been included into
+	# the libraries
+	${RM} ${STAGING_PATH}/${SKY130A}/libs.ref/${LS_VERILOG}/*.*.v
+
 alpha-a:
 	# Install alphanumeric library.
 	${STAGE} -source ${ALPHA_PATH}/.. -target ${STAGING_PATH}/${SKY130A} \