Ran last commit from the wrong directory and didn't catch most of the
modified files.
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)