Ran last commit from the wrong directory and didn't catch most of the
modified files.
diff --git a/.gitignore b/.gitignore
index 0cb02a5..3c2b7bd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,17 +11,13 @@
 *_migrate.log
 
 # autotools artifacts
-scripts/*
-!scripts/configure
-!scripts/configure.ac
-!scripts/tools.txt
-!scripts/rl
 **/Makefile
 **/Makefile.am
 
 # exceptions for travisCI
 !.travisCI/Makefile
 
-# staged PDKs
-sky130/sky130A
-sky130/sky130A/*
+# local install cache
+/pdks
+/libs
+/tools
\ No newline at end of file
diff --git a/Makefile.in b/Makefile.in
index 1a1c2c7..b0fcdc0 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -35,13 +35,39 @@
 # The following definitions are tied to the contents
 # of this repository and should not be changed.
 
-TECHS       = sky130
+TECHS =
+
+SKY130_SOURCE_PATH = @SKY130_SOURCE_PATH@
+ifneq ($(SKY130_SOURCE_PATH),)
+    TECHS += sky130
+endif
+
+DONE_MESSAGE = "Done."
+ifeq ($(TECHS),)
+	DONE_MESSAGE = "No techs configured."
+endif
+
+TECHS_ALL = $(addprefix tech_,$(TECHS))
+TECHS_INSTALL = $(addprefix install-,$(TECHS))
+TECHS_CLEAN = $(addprefix clean-,$(TECHS))
+TECHS_VERYCLEAN = $(addprefix veryclean-,$(TECHS))
 
 #---------------------------------------------------
 
-all:	${TECHS}
-	for tech in ${TECHS}; do \
-		${MAKE} tech_$$tech; done
+all: $(TECHS_ALL)
+	@echo $(DONE_MESSAGE)
+
+install: $(TECHS_INSTALL)
+	@echo $(DONE_MESSAGE)
+
+clean: $(TECHS_CLEAN)
+	@echo $(DONE_MESSAGE)
+
+veryclean: $(TECHS_VERYCLEAN)
+	@echo $(DONE_MESSAGE)
+
+distclean: $(TECHS_VERYCLEAN)
+	@echo $(DONE_MESSAGE)
 
 #---------------------------------------------------
 
@@ -59,20 +85,4 @@
 veryclean-sky130:
 	(cd sky130 && ${MAKE} veryclean)
 
-#---------------------------------------------------
-
-install:	${TECHS}	
-	for tech in ${TECHS}; do \
-		${MAKE} install-$${tech}; done
-
-clean:		${TECHS}
-	for tech in ${TECHS}; do \
-		${MAKE} clean-$${tech}; done
-
-veryclean:	${TECHS}
-	for tech in ${TECHS}; do \
-		${MAKE} veryclean-$${tech}; done
-
-distclean:	${TECHS}
-	for tech in ${TECHS}; do \
-		${MAKE} veryclean-$${tech}; done
+#---------------------------------------------------
\ No newline at end of file
diff --git a/scripts/.gitignore b/scripts/.gitignore
new file mode 100644
index 0000000..b1083e1
--- /dev/null
+++ b/scripts/.gitignore
@@ -0,0 +1,7 @@
+*
+!.gitignore
+!configure
+!configure.ac
+!tools.txt
+!print_tools_make.pl
+!dl
\ No newline at end of file
diff --git a/scripts/configure b/scripts/configure
index 5841a66..ba4f0c8 100755
--- a/scripts/configure
+++ b/scripts/configure
@@ -587,7 +587,6 @@
 ac_subst_vars='LTLIBOBJS
 LIBOBJS
 EF_STYLE
-MAGIC
 pkgpyexecdir
 pyexecdir
 pkgpythondir
@@ -597,15 +596,19 @@
 PYTHON_PREFIX
 PYTHON_VERSION
 PYTHON
+XSCHEM_PATH
+SKY130_ML_XX_HD_PATH
+OSU_PATH
+MAGIC
 QFLOW_DISABLED
 OPENLANE_DISABLED
 NETGEN_DISABLED
 MAGIC_DISABLED
 KLAYOUT_DISABLED
-SKY130_LINK_TARGETS
 SKY130_DIST_PATH
 SKY130_LOCAL_PATH
 SKY130_SOURCE_PATH
+SKY130_LINK_TARGETS
 target_alias
 host_alias
 build_alias
@@ -647,7 +650,7 @@
 ac_subst_files=''
 ac_user_opts='
 enable_option_checking
-with_sky130_source
+enable_sky130_pdk
 with_sky130_local_path
 with_sky130_dist_path
 with_sky130_link_targets
@@ -656,6 +659,9 @@
 enable_netgen
 enable_openlane
 enable_qflow
+enable_osu_lib
+enable_alpha_lib
+enable_xschem
 with_ef_style
 '
       ac_precious_vars='build_alias
@@ -1271,6 +1277,37 @@
   --disable-option-checking  ignore unrecognized --enable/--with options
   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --enable-sky130-pdk=[/path/to/sky130/] --disable-sky130-pdk
+                          "location of the source files for the sky130 (pdks
+                          with a pdk_url file can automatically download them
+                          if the path is omitted)"
+  --enable-klayout
+                Enable or disable klayout [default=enabled]
+
+
+  --enable-magic
+                Enable or disable magic [default=enabled]
+
+
+  --enable-netgen
+                Enable or disable netgen [default=enabled]
+
+
+  --enable-openlane
+                Enable or disable openlane [default=enabled]
+
+
+  --enable-qflow
+                Enable or disable qflow [default=enabled]
+
+
+  --enable-osu-lib[=path] Install osu. If path is omitted, it'll be
+                          downloaded. [default=disabled]
+  --enable-alpha-lib[=path]
+                          Install sky130_ml_xx_hd. If path is omitted, it'll be
+                          downloaded. [default=disabled]
+  --enable-xschem[=path]  Install xschem. If path is omitted, it'll be
+                          downloaded. [default=disabled]
   --enable-klayout --disable-klayout
                           Enable or disable klayout [default=enabled]
   --enable-magic --disable-magic
@@ -1285,12 +1322,10 @@
 Optional Packages:
   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
   --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
-  --with-sky130-source=/path/to/sky130/source
-                          "location of the source files for sky130"
-  --with-sky130-local-path=/path/to/install/pdks
-                          "run-time location of the PDKs"
-  --with-sky130-dist-path=/path/to/install/pdks
-                          "staging location to install the PDKs for
+  --with-sky130-local-path=/path/to/install/sky130
+                          "run-time location of the PDK"
+  --with-sky130-dist-path=/path/to/install/sky130
+                          "staging location to install the PDK for
                           distribution (optional)"
   --with-sky130-link-targets=none|source
                           "make symbolic links to existing files
@@ -1736,10 +1771,14 @@
 # detect PDKs based on directories that include Makefile.in files
 
 
+# define tools
 # define tools to install setup files for.  This does not imply that the tools are
 # available on the system;  just that open_pdks will install the setup files for them.
+## DO NOT INCLUDE XSCHEM IN THE TOOL LIST. XSCHEM CAN BE INSTALLED IN THE CONFIG SCRIPT
 
 
+mkdir -p ../pdks
+
 # check for the source and install paths for each PDK.
 
 
@@ -1747,31 +1786,102 @@
 $as_echo "$as_me: Found technology directories: sky130" >&6;}
 
 
-    # --with-pdk-source=PDK_SOURCE_PATH
+
+    # --enable-pdk-[pdk]=/path/to/pdk
 
 
-        SKY130_SOURCE_PATH_=""
 
-# Check whether --with-sky130-source was given.
-if test "${with_sky130_source+set}" = set; then :
-  withval=$with_sky130_source; SKY130_SOURCE_PATH_=$withval
+        SKY130_SOURCE_PATH=""
+        SKY130_LOCAL_PATH=""
+        SKY130_DIST_PATH=""
+        SKY130_LINK_TARGETS="none"
+
+        pdk_get() {
+            { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ../sky130/pdk_url" >&5
+$as_echo_n "checking for ../sky130/pdk_url... " >&6; }
+if ${ac_cv_file____sky130_pdk_url+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  test "$cross_compiling" = yes &&
+  as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
+if test -r "../sky130/pdk_url"; then
+  ac_cv_file____sky130_pdk_url=yes
+else
+  ac_cv_file____sky130_pdk_url=no
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file____sky130_pdk_url" >&5
+$as_echo "$ac_cv_file____sky130_pdk_url" >&6; }
+if test "x$ac_cv_file____sky130_pdk_url" = xyes; then :
+
+                { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ../pdks/sky130" >&5
+$as_echo_n "checking for ../pdks/sky130... " >&6; }
+if ${ac_cv_file____pdks_sky130+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  test "$cross_compiling" = yes &&
+  as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
+if test -r "../pdks/sky130"; then
+  ac_cv_file____pdks_sky130=yes
+else
+  ac_cv_file____pdks_sky130=no
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file____pdks_sky130" >&5
+$as_echo "$ac_cv_file____pdks_sky130" >&6; }
+if test "x$ac_cv_file____pdks_sky130" = xyes; then :
+
+                    echo "Using pre-existing sky130 download..."
+
+else
+
+                    mkdir -p ../pdks/sky130
+                    sh dl $(cat "../sky130/pdk_get") ../pdks/sky130.tar.gz;
+                    (echo "Extracting sky130" && cd ../pdks && tar -xf sky130.tar.gz --strip-components 1 -C ../pdks/sky130)
 
 fi
 
+                export SKY130_SOURCE_PATH=../pdks/sky130
 
-	# Require this argument
-        { $as_echo "$as_me:${as_lineno-$LINENO}: Checking whether source path is specified for 'sky130'" >&5
-$as_echo "$as_me: Checking whether source path is specified for 'sky130'" >&6;}
-        if test "x$SKY130_SOURCE_PATH_" == "x" ; then
-	   as_fn_error $? "Option --with-sky130-source=<path> not specified!" "$LINENO" 5
-	fi
+else
 
-	SKY130_SOURCE_PATH=`readlink -f $SKY130_SOURCE_PATH_`
+                as_fn_error $? "PDK sky130 cannot be automatically downloaded and requires a path." "$LINENO" 5
 
-        # basic check that the PDK exists there (the path must exist in any case)
-        { $as_echo "$as_me:${as_lineno-$LINENO}: Checking specified path for 'sky130' at $SKY130_SOURCE_PATH" >&5
+fi
+
+        }
+
+        # Check whether --enable-sky130-sky130 was given.
+if test "${enable_sky130_pdk+set}" = set; then :
+  enableval=$enable_sky130_pdk;
+                if test "$enableval" == "yes" -o "$enableval" == "YES"; then
+                    pdk_get
+                elif test "$enableval" == "no" -o "$enableval" == "NO"; then
+                    echo "Disabling sky130..."
+                else
+                    export SKY130_SOURCE_PATH=$enableval
+                fi
+
+else
+
+                pdk_get
+
+
+fi
+
+	    # # Require this argument
+        # AC_MSG_NOTICE([Checking whether source path is specified for 'pdk'])
+        # if test "x$[]pdkvar[]_SOURCE_PATH" == "x" ; then
+        #     AC_MSG_ERROR([Option --with-pdk-source=<path> not specified!])
+        # fi
+
+        if [ "$SKY130_SOURCE_PATH" != "" ]; then
+            SKY130_SOURCE_PATH=`readlink -f $SKY130_SOURCE_PATH`
+
+            # basic check that the PDK exists there (the path must exist in any case)
+            { $as_echo "$as_me:${as_lineno-$LINENO}: Checking specified path for 'sky130' at $SKY130_SOURCE_PATH" >&5
 $as_echo "$as_me: Checking specified path for 'sky130' at $SKY130_SOURCE_PATH" >&6;}
-        as_ac_File=`$as_echo "ac_cv_file_$SKY130_SOURCE_PATH" | $as_tr_sh`
+            as_ac_File=`$as_echo "ac_cv_file_$SKY130_SOURCE_PATH" | $as_tr_sh`
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $SKY130_SOURCE_PATH" >&5
 $as_echo_n "checking for $SKY130_SOURCE_PATH... " >&6; }
 if eval \${$as_ac_File+:} false; then :
@@ -1790,72 +1900,57 @@
 $as_echo "$ac_res" >&6; }
 if eval test \"x\$"$as_ac_File"\" = x"yes"; then :
 
-           { $as_echo "$as_me:${as_lineno-$LINENO}: 'sky130' source path found at $SKY130_SOURCE_PATH" >&5
+                { $as_echo "$as_me:${as_lineno-$LINENO}: 'sky130' source path found at $SKY130_SOURCE_PATH" >&5
 $as_echo "$as_me: 'sky130' source path found at $SKY130_SOURCE_PATH" >&6;}
 
 else
 
-           as_fn_error $? "Specified path for 'sky130' at $SKY130_SOURCE_PATH not found" "$LINENO" 5
+                as_fn_error $? "Specified path for 'sky130' at $SKY130_SOURCE_PATH not found" "$LINENO" 5
 
 fi
 
 
-
-
-
-    # --with-pdk-local-path=PDK_LOCAL_PATH
-
-
-        SKY130_LOCAL_PATH_=""
+            # --with-pdk-local-path=PDK_LOCAL_PATH
 
 # Check whether --with-sky130-local-path was given.
 if test "${with_sky130_local_path+set}" = set; then :
-  withval=$with_sky130_local_path; SKY130_LOCAL_PATH_=$withval
+  withval=$with_sky130_local_path; SKY130_LOCAL_PATH=$withval
 
 fi
 
-	# Require this argument
-        { $as_echo "$as_me:${as_lineno-$LINENO}: Checking whether local path is specified for 'sky130'" >&5
+
+            # Require this argument
+            { $as_echo "$as_me:${as_lineno-$LINENO}: Checking whether local path is specified for 'sky130'" >&5
 $as_echo "$as_me: Checking whether local path is specified for 'sky130'" >&6;}
-        if test "x$SKY130_LOCAL_PATH_" == "x" ; then
-	   as_fn_error $? "Option --with-sky130-local-path=<path> not specified!" "$LINENO" 5
-	   SKY130_LOCAL_PATH=""
-	else
-	   SKY130_LOCAL_PATH=`readlink -f $SKY130_LOCAL_PATH_`
-	fi
+            if test "x$SKY130_LOCAL_PATH" == "x" ; then
+                as_fn_error $? "Option --with-sky130-local-path=<path> not specified!" "$LINENO" 5
+                SKY130_LOCAL_PATH=""
+            else
+                SKY130_LOCAL_PATH=`readlink -f $SKY130_LOCAL_PATH`
+            fi
 
-
-
-    # --with-pdk-dist-path=PDK_DIST_PATH
-
-
-        SKY130_DIST_PATH_=""
+            # --with-pdk-dist-path=PDK_DIST_PATH
 
 # Check whether --with-sky130-dist-path was given.
 if test "${with_sky130_dist_path+set}" = set; then :
-  withval=$with_sky130_dist_path; SKY130_DIST_PATH_=$withval
+  withval=$with_sky130_dist_path; SKY130_DIST_PATH=$withval
 
 fi
 
-	# Require this argument
-        { $as_echo "$as_me:${as_lineno-$LINENO}: Checking whether distribution path is specified for 'sky130'" >&5
+
+
+            # "Require" this argument
+            { $as_echo "$as_me:${as_lineno-$LINENO}: Checking whether distribution path is specified for 'sky130'" >&5
 $as_echo "$as_me: Checking whether distribution path is specified for 'sky130'" >&6;}
-        if test "x$SKY130_DIST_PATH_" == "x" ; then
-	   { $as_echo "$as_me:${as_lineno-$LINENO}: Option --with-sky130-dist-path=<path> not specified.  Local install only.\"" >&5
-$as_echo "$as_me: Option --with-sky130-dist-path=<path> not specified.  Local install only.\"" >&6;}
-	   SKY130_DIST_PATH=""
-	else
-	   SKY130_DIST_PATH=`readlink -f $SKY130_DIST_PATH_`
-	fi
+            if test "x$SKY130_DIST_PATH" == "x" ; then
+                { $as_echo "$as_me:${as_lineno-$LINENO}: Option --with-sky130-dist-path=<path> not specified.  Local install only." >&5
+$as_echo "$as_me: Option --with-sky130-dist-path=<path> not specified.  Local install only." >&6;}
+                SKY130_DIST_PATH=""
+            else
+                SKY130_DIST_PATH=`readlink -f $SKY130_DIST_PATH`
+            fi
 
-
-
-    # --with-pdk-link-targets=PDK_LINK_TARGETS
-
-
-	# Default link_targets = "none"
-	SKY130_LINK_TARGETS="none"
-
+            # --with-pdk-link-targets=PDK_LINK_TARGETS
 
 # Check whether --with-sky130-link-targets was given.
 if test "${with_sky130_link_targets+set}" = set; then :
@@ -1864,8 +1959,377 @@
 fi
 
 
-        { $as_echo "$as_me:${as_lineno-$LINENO}: Link targets set to $SKY130_LINK_TARGETS" >&5
+            { $as_echo "$as_me:${as_lineno-$LINENO}: Link targets set to $SKY130_LINK_TARGETS" >&5
 $as_echo "$as_me: Link targets set to $SKY130_LINK_TARGETS" >&6;}
+        fi
+
+
+
+
+
+
+
+
+# Set variables for tool setups
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: Found tools: klayout magic netgen openlane qflow" >&5
+$as_echo "$as_me: Found tools: klayout magic netgen openlane qflow" >&6;}
+
+
+
+
+
+        KLAYOUT_DISABLED=0
+        # Check whether --enable-klayout was given.
+if test "${enable_klayout+set}" = set; then :
+  enableval=$enable_klayout;
+                if test "$enableval" == "no" -o "$enableval" == "NO"; then
+                    KLAYOUT_DISABLED=1
+                fi
+
+
+fi
+
+
+
+
+
+        MAGIC_DISABLED=0
+        # Check whether --enable-magic was given.
+if test "${enable_magic+set}" = set; then :
+  enableval=$enable_magic;
+                if test "$enableval" == "no" -o "$enableval" == "NO"; then
+                    MAGIC_DISABLED=1
+                fi
+
+
+fi
+
+
+
+
+
+        NETGEN_DISABLED=0
+        # Check whether --enable-netgen was given.
+if test "${enable_netgen+set}" = set; then :
+  enableval=$enable_netgen;
+                if test "$enableval" == "no" -o "$enableval" == "NO"; then
+                    NETGEN_DISABLED=1
+                fi
+
+
+fi
+
+
+
+
+
+        OPENLANE_DISABLED=0
+        # Check whether --enable-openlane was given.
+if test "${enable_openlane+set}" = set; then :
+  enableval=$enable_openlane;
+                if test "$enableval" == "no" -o "$enableval" == "NO"; then
+                    OPENLANE_DISABLED=1
+                fi
+
+
+fi
+
+
+
+
+
+        QFLOW_DISABLED=0
+        # Check whether --enable-qflow was given.
+if test "${enable_qflow+set}" = set; then :
+  enableval=$enable_qflow;
+                if test "$enableval" == "no" -o "$enableval" == "NO"; then
+                    QFLOW_DISABLED=1
+                fi
+
+
+fi
+
+
+
+
+
+# Magic
+# Extract the first word of "magic", so it can be a program name with args.
+set dummy magic; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_MAGIC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $MAGIC in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_MAGIC="$MAGIC" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_MAGIC="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+MAGIC=$ac_cv_path_MAGIC
+if test -n "$MAGIC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC" >&5
+$as_echo "$MAGIC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+if test -z "$MAGIC"; then
+   as_fn_error $? "You need 'magic' to generate the needed various cell views." "$LINENO" 5
+fi
+
+# Other installations (libraries or tools if applicable)
+mkdir -p ../libs
+mkdir -p ../tools
+
+
+
+
+
+
+
+
+
+    # echo target targetvar flag url location
+
+    OSU_PATH=""
+    OSU_GET() {
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ../libs/osu" >&5
+$as_echo_n "checking for ../libs/osu... " >&6; }
+if ${ac_cv_file____libs_osu+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  test "$cross_compiling" = yes &&
+  as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
+if test -r "../libs/osu"; then
+  ac_cv_file____libs_osu=yes
+else
+  ac_cv_file____libs_osu=no
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file____libs_osu" >&5
+$as_echo "$ac_cv_file____libs_osu" >&6; }
+if test "x$ac_cv_file____libs_osu" = xyes; then :
+
+                echo "Using pre-existing osu download..."
+
+else
+
+                mkdir -p ../libs/osu
+                sh ./download.sh 'https://vlsiarch.ecen.okstate.edu/flows/MOSIS_SCMOS/osu_stdcells_v2.4/osu_stdcells_lib.v2.4.tar.gz' ../libs/osu.tar.gz
+                (echo "Extracting osu..." && cd ../libs && tar -xf osu.tar.gz --strip-components 1 -C ../libs/osu)
+
+
+fi
+
+        export OSU_PATH=../libs/osu
+    }
+
+    # Check whether --enable-osu-lib was given.
+if test "${enable_osu_lib+set}" = set; then :
+  enableval=$enable_osu_lib;
+            if test "$enableval" == "yes" -o "$enableval" == "YES"; then
+                OSU_GET
+                XSCHEM_INST=1
+            elif test "$enableval" == "no" -o "$enableval" == "NO"; then
+                echo "Disabling osu..."
+                XSCHEM_DISABLED=1
+            else
+                OSU_PATH=$enableval
+            fi
+            OSU_PATH=`readlink -f $OSU_PATH`
+
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+    # echo target targetvar flag url location
+
+    SKY130_ML_XX_HD_PATH=""
+    SKY130_ML_XX_HD_GET() {
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ../libs/sky130_ml_xx_hd" >&5
+$as_echo_n "checking for ../libs/sky130_ml_xx_hd... " >&6; }
+if ${ac_cv_file____libs_sky130_ml_xx_hd+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  test "$cross_compiling" = yes &&
+  as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
+if test -r "../libs/sky130_ml_xx_hd"; then
+  ac_cv_file____libs_sky130_ml_xx_hd=yes
+else
+  ac_cv_file____libs_sky130_ml_xx_hd=no
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file____libs_sky130_ml_xx_hd" >&5
+$as_echo "$ac_cv_file____libs_sky130_ml_xx_hd" >&6; }
+if test "x$ac_cv_file____libs_sky130_ml_xx_hd" = xyes; then :
+
+                echo "Using pre-existing sky130_ml_xx_hd download..."
+
+else
+
+                mkdir -p ../libs/sky130_ml_xx_hd
+                sh ./download.sh 'https://github.com/PaulSchulz/sky130_pschulz_xx_hd/archive/master.tar.gz' ../libs/sky130_ml_xx_hd.tar.gz
+                (echo "Extracting sky130_ml_xx_hd..." && cd ../libs && tar -xf sky130_ml_xx_hd.tar.gz --strip-components 1 -C ../libs/sky130_ml_xx_hd)
+
+
+fi
+
+        export SKY130_ML_XX_HD_PATH=../libs/sky130_ml_xx_hd
+    }
+
+    # Check whether --enable-alpha-lib was given.
+if test "${enable_alpha_lib+set}" = set; then :
+  enableval=$enable_alpha_lib;
+            if test "$enableval" == "yes" -o "$enableval" == "YES"; then
+                SKY130_ML_XX_HD_GET
+                XSCHEM_INST=1
+            elif test "$enableval" == "no" -o "$enableval" == "NO"; then
+                echo "Disabling sky130_ml_xx_hd..."
+                XSCHEM_DISABLED=1
+            else
+                SKY130_ML_XX_HD_PATH=$enableval
+            fi
+            SKY130_ML_XX_HD_PATH=`readlink -f $SKY130_ML_XX_HD_PATH`
+
+fi
+
+
+
+
+
+
+
+XSCHEM_DISABLED=0
+XSCHEM_INST=0
+
+
+
+
+
+
+
+    # echo target targetvar flag url location
+
+    XSCHEM_PATH=""
+    XSCHEM_GET() {
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ../tools/xschem" >&5
+$as_echo_n "checking for ../tools/xschem... " >&6; }
+if ${ac_cv_file____tools_xschem+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  test "$cross_compiling" = yes &&
+  as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
+if test -r "../tools/xschem"; then
+  ac_cv_file____tools_xschem=yes
+else
+  ac_cv_file____tools_xschem=no
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file____tools_xschem" >&5
+$as_echo "$ac_cv_file____tools_xschem" >&6; }
+if test "x$ac_cv_file____tools_xschem" = xyes; then :
+
+                echo "Using pre-existing xschem download..."
+
+else
+
+                mkdir -p ../tools/xschem
+                sh ./download.sh 'https://github.com/StefanSchippers/xschem/archive/master.tar.gz' ../tools/xschem.tar.gz
+                (echo "Extracting xschem..." && cd ../tools && tar -xf xschem.tar.gz --strip-components 1 -C ../tools/xschem)
+
+
+fi
+
+        export XSCHEM_PATH=../tools/xschem
+    }
+
+    # Check whether --enable-xschem was given.
+if test "${enable_xschem+set}" = set; then :
+  enableval=$enable_xschem;
+            if test "$enableval" == "yes" -o "$enableval" == "YES"; then
+                XSCHEM_GET
+                XSCHEM_INST=1
+            elif test "$enableval" == "no" -o "$enableval" == "NO"; then
+                echo "Disabling xschem..."
+                XSCHEM_DISABLED=1
+            else
+                XSCHEM_PATH=$enableval
+            fi
+            XSCHEM_PATH=`readlink -f $XSCHEM_PATH`
+
+fi
+
+
+
+    if [ "$XSCHEM_INST" = 1 ]; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ../tools/xschem-install" >&5
+$as_echo_n "checking for ../tools/xschem-install... " >&6; }
+if ${ac_cv_file____tools_xschem_install+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  test "$cross_compiling" = yes &&
+  as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
+if test -r "../tools/xschem-install"; then
+  ac_cv_file____tools_xschem_install=yes
+else
+  ac_cv_file____tools_xschem_install=no
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file____tools_xschem_install" >&5
+$as_echo "$ac_cv_file____tools_xschem_install" >&6; }
+if test "x$ac_cv_file____tools_xschem_install" = xyes; then :
+
+            echo "Using pre-existing xschem installation..."
+
+else
+
+            echo "---"
+            echo "Note: attempting to build xschem. Xschem requires all of Magic's dependencies and further, flex, bison and libxpm."
+            echo "Your build WILL fail if any of these are missing. You can choose to remove --enable-xschem or add a known installation path."
+            sleep 2
+            mkdir -p ../tools/xschem-install
+            XSCHEM_ABSOLUTE=`readlink -f ../tools/xschem-install`
+            (cd ../tools/xschem && ./configure --prefix=$XSCHEM_ABSOLUTE && make && make install)
+            XSCHEM_PATH=$XSCHEM_ABSOLUTE
+
+fi
+
+    fi
+
+
 
 
 
@@ -2238,60 +2702,16 @@
 	fi
 
 
-# Extract the first word of "magic", so it can be a program name with args.
-set dummy magic; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_MAGIC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  case $MAGIC in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_MAGIC="$MAGIC" # Let the user override the test with a path.
-  ;;
-  *)
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_MAGIC="$as_dir/$ac_word$ac_exec_ext"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-  ;;
-esac
-fi
-MAGIC=$ac_cv_path_MAGIC
-if test -n "$MAGIC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC" >&5
-$as_echo "$MAGIC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-if test -z "$MAGIC"; then
-   as_fn_error $? "You need 'magic' to generate the needed various cell views" "$LINENO" 5
-fi
-
 # Check for "--with-ef-style"
 EF_STYLE=0
 
 # Check whether --with-ef-style was given.
 if test "${with_ef_style+set}" = set; then :
   withval=$with_ef_style;
-    pdks_ef_style=$withval
-    if test "$withval" == "yes" -o "$withval" == "YES"; then
-        EF_STYLE=1
-    fi
+        pdks_ef_style=$withval
+        if test "$withval" == "yes" -o "$withval" == "YES"; then
+            EF_STYLE=1
+        fi
 
 fi
 
diff --git a/scripts/configure.ac b/scripts/configure.ac
index b615f48..1c06fcf 100755
--- a/scripts/configure.ac
+++ b/scripts/configure.ac
@@ -1,95 +1,118 @@
 AC_INIT([open_pdks], [1.0], [github.com/RTimothyEdwards/open_pdks])
 
 # detect PDKs based on directories that include Makefile.in files
-m4_define([M4_GET_TECHS], [m4_normalize(m4_esyscmd(cd .. && find * -mindepth 1 -name "Makefile.in" -exec dirname {} \; | tr "\n" " "))])
+m4_define([M4_GET_TECHS], [m4_normalize(m4_esyscmd(cd .. && find * -mindepth 1 -maxdepth 1 -name "Makefile.in" -exec dirname {} \; | tr "\n" " "))])
 
+# define tools
 # define tools to install setup files for.  This does not imply that the tools are
 # available on the system;  just that open_pdks will install the setup files for them.
+## DO NOT INCLUDE XSCHEM IN THE TOOL LIST. XSCHEM CAN BE INSTALLED IN THE CONFIG SCRIPT
 m4_define([M4_GET_TOOLS], [m4_normalize(m4_esyscmd(cat ./tools.txt | tr "\n" " "))])
 
+mkdir -p ../pdks
+
 # check for the source and install paths for each PDK.
-AC_DEFUN([M4_GEN_WITH_PDK_ARGS],
-[
-    # --with-pdk-source=PDK_SOURCE_PATH
+AC_DEFUN([M4_GEN_WITH_PDK_ARGS], [
+
+    # --enable-pdk-[pdk]=/path/to/pdk
     m4_foreach_w(pdk, $1, [
-	m4_define([pdkvar], [m4_normalize(m4_esyscmd(echo pdk | tr "a-z" "A-Z"))])
-        pdkvar[]_SOURCE_PATH_=""
-        AC_ARG_WITH(pdk-source,
-              [AS_HELP_STRING([--with-pdk-source=/path/to/pdk/source], "location of the source files for pdk")],
-              [pdkvar[]_SOURCE_PATH_=$withval]
+        m4_define([pdkvar], [m4_normalize(m4_esyscmd(echo pdk | tr "a-z" "A-Z"))])
+
+        pdkvar[]_SOURCE_PATH=""
+        pdkvar[]_LOCAL_PATH=""
+        pdkvar[]_DIST_PATH=""
+        pdkvar[]_LINK_TARGETS="none"
+
+        pdk_get() {
+            AC_CHECK_FILE(../pdk/[pdk]_url, [
+                AC_CHECK_FILE(../pdks/pdk,[
+                    echo "Using pre-existing pdk download..."
+                ], [
+                    mkdir -p ../pdks/pdk
+                    sh dl $(cat "../pdk/pdk_get") ../pdks/pdk.tar.gz;
+                    (echo "Extracting pdk..." && cd ../pdks && tar -xf pdk.tar.gz --strip-components 1 -C ../pdks/pdk)
+                ])
+                export pdkvar[]_SOURCE_PATH=../pdks/pdk
+            ], [
+                AC_MSG_ERROR([PDK pdk cannot be automatically downloaded and requires a path.])
+            ])
+        }
+
+        AC_ARG_ENABLE(pdk-[pdk],
+            [AS_HELP_STRING([--enable-pdk-[pdk]=@<:@/path/to/pdk/@:>@ --disable-pdk-[pdk]], "location of the source files for the pdk (pdks with a [pdk]_url file can automatically download them if the path is omitted)")],
+            [
+                if test "$enableval" == "yes" -o "$enableval" == "YES"; then
+                    pdk_get
+                elif test "$enableval" == "no" -o "$enableval" == "NO"; then
+                    echo "Disabling pdk..."
+                else
+                    export pdkvar[]_SOURCE_PATH=$enableval
+                fi
+            ], [
+                pdk_get
+            ]
         )
+	    # # Require this argument
+        # AC_MSG_NOTICE([Checking whether source path is specified for 'pdk'])
+        # if test "x$[]pdkvar[]_SOURCE_PATH" == "x" ; then
+        #     AC_MSG_ERROR([Option --with-pdk-source=<path> not specified!])
+        # fi
 
-	# Require this argument
-        AC_MSG_NOTICE([Checking whether source path is specified for 'pdk'])
-        if test "x$[]pdkvar[]_SOURCE_PATH_" == "x" ; then
-	   AC_MSG_ERROR([Option --with-pdk-source=<path> not specified!])
-	fi
+        if @<:@ "$[]pdkvar[]_SOURCE_PATH" != "" @:>@; then
+            pdkvar[]_SOURCE_PATH=`readlink -f $[]pdkvar[]_SOURCE_PATH`
 
-	pdkvar[]_SOURCE_PATH=`readlink -f $[]pdkvar[]_SOURCE_PATH_`
+            # basic check that the PDK exists there (the path must exist in any case)
+            AC_MSG_NOTICE([Checking specified path for 'pdk' at $pdkvar[]_SOURCE_PATH])
+            AC_CHECK_FILE($pdkvar[]_SOURCE_PATH,[
+                AC_MSG_NOTICE(['pdk' source path found at $pdkvar[]_SOURCE_PATH])
+            ], [
+                AC_MSG_ERROR([Specified path for 'pdk' at $pdkvar[]_SOURCE_PATH not found])
+            ])
 
-        # basic check that the PDK exists there (the path must exist in any case)
-        AC_MSG_NOTICE([Checking specified path for 'pdk' at $[]pdkvar[]_SOURCE_PATH])
-        AC_CHECK_FILE($[]pdkvar[]_SOURCE_PATH,
-        [
-           AC_MSG_NOTICE(['pdk' source path found at $[]pdkvar[]_SOURCE_PATH])
-        ],
-        [
-           AC_MSG_ERROR([Specified path for 'pdk' at $[]pdkvar[]_SOURCE_PATH not found])
-        ])
-        AC_SUBST([]pdkvar[]_SOURCE_PATH)
-    ])
+            # --with-pdk-local-path=PDK_LOCAL_PATH
+            AC_ARG_WITH(pdk-local-path,
+                [AS_HELP_STRING([--with-pdk-local-path=/path/to/install/pdk], "run-time location of the PDK")],
+                [pdkvar[]_LOCAL_PATH=$withval]
+            )
+            
+            # Require this argument
+            AC_MSG_NOTICE([Checking whether local path is specified for 'pdk'])
+            if test "x$[]pdkvar[]_LOCAL_PATH" == "x" ; then
+                AC_MSG_ERROR([Option --with-pdk-local-path=<path> not specified!])
+                pdkvar[]_LOCAL_PATH=""
+            else
+                pdkvar[]_LOCAL_PATH=`readlink -f $[]pdkvar[]_LOCAL_PATH`
+            fi
 
+            # --with-pdk-dist-path=PDK_DIST_PATH
+            AC_ARG_WITH(pdk-dist-path,
+                [AS_HELP_STRING([--with-pdk-dist-path=/path/to/install/pdk], "staging location to install the PDK for distribution (optional)")],
+                [pdkvar[]_DIST_PATH=$withval]
+            )
 
-    # --with-pdk-local-path=PDK_LOCAL_PATH
-    m4_foreach_w(pdk, $1, [
-	m4_define([pdkvar], [m4_normalize(m4_esyscmd(echo pdk | tr "a-z" "A-Z"))])
-        pdkvar[]_LOCAL_PATH_=""
-        AC_ARG_WITH(pdk-local-path,
-              [AS_HELP_STRING([--with-pdk-local-path=/path/to/install/pdks], "run-time location of the PDKs")],
-              [pdkvar[]_LOCAL_PATH_=$withval]
-        )
-	# Require this argument
-        AC_MSG_NOTICE([Checking whether local path is specified for 'pdk'])
-        if test "x$[]pdkvar[]_LOCAL_PATH_" == "x" ; then
-	   AC_MSG_ERROR([Option --with-pdk-local-path=<path> not specified!])
-	   pdkvar[]_LOCAL_PATH=""
-	else
-	   pdkvar[]_LOCAL_PATH=`readlink -f $[]pdkvar[]_LOCAL_PATH_`
-	fi
-        AC_SUBST([]pdkvar[]_LOCAL_PATH)
-    ])
+            
+            # "Require" this argument
+            AC_MSG_NOTICE([Checking whether distribution path is specified for 'pdk'])
+            if test "x$[]pdkvar[]_DIST_PATH" == "x" ; then
+                AC_MSG_NOTICE([Option --with-pdk-dist-path=<path> not specified.  Local install only.])
+                pdkvar[]_DIST_PATH=""
+            else
+                pdkvar[]_DIST_PATH=`readlink -f $[]pdkvar[]_DIST_PATH`
+            fi
 
-    # --with-pdk-dist-path=PDK_DIST_PATH
-    m4_foreach_w(pdk, $1, [
-	m4_define([pdkvar], [m4_normalize(m4_esyscmd(echo pdk | tr "a-z" "A-Z"))])
-        pdkvar[]_DIST_PATH_=""
-        AC_ARG_WITH(pdk-dist-path,
-              [AS_HELP_STRING([--with-pdk-dist-path=/path/to/install/pdks], "staging location to install the PDKs for distribution (optional)")],
-              [pdkvar[]_DIST_PATH_=$withval]
-        )
-	# Require this argument
-        AC_MSG_NOTICE([Checking whether distribution path is specified for 'pdk'])
-        if test "x$[]pdkvar[]_DIST_PATH_" == "x" ; then
-	   AC_MSG_NOTICE([Option --with-pdk-dist-path=<path> not specified.  Local install only."])
-	   pdkvar[]_DIST_PATH=""
-	else
-	   pdkvar[]_DIST_PATH=`readlink -f $[]pdkvar[]_DIST_PATH_`
-	fi
-        AC_SUBST([]pdkvar[]_DIST_PATH)
-    ])
+            # --with-pdk-link-targets=PDK_LINK_TARGETS
+            AC_ARG_WITH(pdk-link-targets,
+                [AS_HELP_STRING([--with-pdk-link-targets=none|source], "make symbolic links to existing files @<:@default=none@:>@")],
+                [[]pdkvar[]_LINK_TARGETS=$with_[]pdk[]_link_targets]
+            )
+            AC_SUBST([]pdkvar[]_LINK_TARGETS)
+            AC_MSG_NOTICE([Link targets set to $pdkvar[]_LINK_TARGETS])
+        fi
 
-    # --with-pdk-link-targets=PDK_LINK_TARGETS
-    m4_foreach_w(pdk, $1, [
-	m4_define([pdkvar], [m4_normalize(m4_esyscmd(echo pdk | tr "a-z" "A-Z"))])
-	# Default link_targets = "none"
-	pdkvar[]_LINK_TARGETS="none"
-
-        AC_ARG_WITH(pdk-link-targets,
-              [AS_HELP_STRING([--with-pdk-link-targets=none|source], "make symbolic links to existing files @<:@default=none@:>@")],
-              [[]pdkvar[]_LINK_TARGETS=$with_[]pdk[]_link_targets]
-        )
-        AC_SUBST([]pdkvar[]_LINK_TARGETS)
-        AC_MSG_NOTICE([Link targets set to $[]pdkvar[]_LINK_TARGETS])
+        AC_SUBST(pdkvar[]_SOURCE_PATH)
+        AC_SUBST(pdkvar[]_LOCAL_PATH)
+        AC_SUBST(pdkvar[]_DIST_PATH)
+        AC_SUBST(pdkvar[]_LINK_TARGETS)
     ])
 ])
 
@@ -97,6 +120,110 @@
 
 M4_GEN_WITH_PDK_ARGS(M4_GET_TECHS())
 
+# Set variables for tool setups
+AC_DEFUN([M4_GEN_WITH_TOOLS], [
+    m4_foreach_w(tool, $1, [
+        m4_define([toolvar], [m4_normalize(m4_esyscmd(echo tool | tr "a-z" "A-Z"))])
+
+        toolvar[]_DISABLED=0
+        AC_ARG_ENABLE(tool,
+            AS_HELP_STRING(
+                --enable-tool
+                Enable or disable tool @<:@default=enabled@:>@
+            ), [
+                if test "$enableval" == "no" -o "$enableval" == "NO"; then
+                    toolvar[]_DISABLED=1
+                fi
+            ]
+        )
+        AC_SUBST(toolvar[]_DISABLED)
+    ])
+])
+
+AC_MSG_NOTICE([Found tools: M4_GET_TOOLS()])
+
+M4_GEN_WITH_TOOLS(M4_GET_TOOLS())
+
+# Magic
+AC_PATH_PROG(MAGIC, magic)
+if test -z "$MAGIC"; then
+   AC_MSG_ERROR([You need 'magic' to generate the needed various cell views.])
+fi
+
+# Other installations (libraries or tools if applicable)
+mkdir -p ../libs
+mkdir -p ../tools
+AC_DEFUN([M4_GEN_INSTALLATION], [
+    m4_define([target], $1)
+    m4_define([targetvar], [m4_normalize(m4_esyscmd(echo target | tr "a-z" "A-Z"))])
+    m4_define([flag], $2)
+    m4_define([url], $3)
+    m4_define([location], $4)
+
+    # echo target targetvar flag url location
+
+    targetvar[]_PATH=""
+    targetvar[]_GET() {
+        AC_CHECK_FILE(
+            location/target,
+            [
+                echo "Using pre-existing target download..."
+            ], [
+                mkdir -p location/target
+                sh ./download.sh url location/target.tar.gz
+                (echo "Extracting target..." && cd location && tar -xf target.tar.gz --strip-components 1 -C location/target)
+            ]
+        )
+        export targetvar[]_PATH=location/target
+    }
+
+    AC_ARG_ENABLE(
+        flag,
+        AS_HELP_STRING(
+            [--enable-flag@<:@=path@:>@],
+            [Install target. If path is omitted, it'll be downloaded. @<:@default=disabled@:>@]
+        ), [
+            if test "$enableval" == "yes" -o "$enableval" == "YES"; then
+                targetvar[]_GET
+                XSCHEM_INST=1
+            elif test "$enableval" == "no" -o "$enableval" == "NO"; then
+                echo "Disabling target..."
+                XSCHEM_DISABLED=1
+            else
+                targetvar[]_PATH=$enableval
+            fi
+            targetvar[]_PATH=`readlink -f $[]targetvar[]_PATH`
+        ],
+        []
+    )
+
+    $5
+
+    AC_SUBST(targetvar[]_PATH)
+])
+
+M4_GEN_INSTALLATION(osu, osu-lib, 'https://vlsiarch.ecen.okstate.edu/flows/MOSIS_SCMOS/osu_stdcells_v2.4/osu_stdcells_lib.v2.4.tar.gz', ../libs)
+M4_GEN_INSTALLATION(sky130_ml_xx_hd, alpha-lib, 'https://github.com/PaulSchulz/sky130_pschulz_xx_hd/archive/master.tar.gz', ../libs)
+
+XSCHEM_DISABLED=0
+XSCHEM_INST=0
+M4_GEN_INSTALLATION(xschem, xschem, 'https://github.com/StefanSchippers/xschem/archive/master.tar.gz', ../tools, [
+    if @<:@ "$XSCHEM_INST" = 1 @:>@; then
+        AC_CHECK_FILE(../tools/xschem-install,[
+            echo "Using pre-existing xschem installation..."
+        ], [
+            echo "---"
+            echo "Note: attempting to build xschem. Xschem requires all of Magic's dependencies and further, flex, bison and libxpm."
+            echo "Your build WILL fail if any of these are missing. You can choose to remove --enable-xschem or add a known installation path."
+            sleep 2
+            mkdir -p ../tools/xschem-install
+            XSCHEM_ABSOLUTE=`readlink -f ../tools/xschem-install`
+            (cd ../tools/xschem && ./configure --prefix=$XSCHEM_ABSOLUTE && make && make install)
+            XSCHEM_PATH=$XSCHEM_ABSOLUTE
+        ])
+    fi
+])
+
 AC_DEFUN([M4_GEN_WITH_TOOLS], [
     m4_foreach_w(tool, $1, [
         m4_define([toolvar], [m4_normalize(m4_esyscmd(echo tool | tr "a-z" "A-Z"))])
@@ -126,22 +253,20 @@
 AM_PATH_PYTHON([3.4])
 AX_PYTHON_MODULE([distutils],[])
 
-AC_PATH_PROG(MAGIC, magic)
-if test -z "$MAGIC"; then
-   AC_MSG_ERROR([You need 'magic' to generate the needed various cell views])
-fi
-
 # Check for "--with-ef-style"
 EF_STYLE=0
-AC_ARG_WITH([ef-style],
-  [AS_HELP_STRING([--with-ef-style],
-    [Use efabless style file system structure @<:@default=no@:>@])],
-  [
-    pdks_ef_style=$withval
-    if test "$withval" == "yes" -o "$withval" == "YES"; then
-        EF_STYLE=1
-    fi
-  ], )
+AC_ARG_WITH(
+    [ef-style],
+    AS_HELP_STRING(
+        [--with-ef-style],
+        [Use efabless style file system structure @<:@default=no@:>@]
+    ), [
+        pdks_ef_style=$withval
+        if test "$withval" == "yes" -o "$withval" == "YES"; then
+            EF_STYLE=1
+        fi
+    ],
+)
 
 AC_SUBST(EF_STYLE)
 
diff --git a/scripts/print_tools_make.pl b/scripts/print_tools_make.pl
new file mode 100644
index 0000000..0a54494
--- /dev/null
+++ b/scripts/print_tools_make.pl
@@ -0,0 +1,21 @@
+#!/usr/bin/env perl
+#
+# This is a simple script that generates Makefile "TOOLS" flags. 
+# 
+# This is not used at all during part of any build or CI. It's a convenience
+# tool for open_pdks contributors.
+#
+open(FH, '<', "./tools.txt") or die $!;
+while (<FH>) {
+    chomp $_;
+    my $capitalized = uc $_;
+    my $disable_macro = "$capitalized\_DISABLED";
+    print <<"HD"
+# $disable_macro = 0 | 1
+$disable_macro = \@$disable_macro\@
+ifneq (\${$disable_macro}, 1)
+	TOOLS += $_
+endif
+
+HD
+}
\ No newline at end of file