Resolved merge conflict of sky130/Makefile.in
diff --git a/README.md b/README.md index 89f929f..e5d34ae 100644 --- a/README.md +++ b/README.md
@@ -58,7 +58,7 @@ the need to declare an install target or run "make install". However, it is recommended to declare a target location and install there, using - ./configure --enable-[PDK_name]-pdk=[path] --with-[PDK_name]-local-path=[path] + ./configure --prefix=[/opt/pdks] --enable-[PDK_name]-pdk=[path] followed by "make" and "make install".
diff --git a/common/staging_install.py b/common/staging_install.py index 52dad2e..be8d9e3 100755 --- a/common/staging_install.py +++ b/common/staging_install.py
@@ -1,29 +1,54 @@ #!/usr/bin/env python3 -# -# staging_install.py -# -# This file copies the staging area created by foundry_install.py -# into the target directory area, changing paths to match the target, -# and creating symbolic links where requested and allowed. -# -# Options: -# -link_from <type> Make symbolic links to vendor files from target -# Types are: "none", "source", or a PDK name. -# Default "none" (copy all files from source) -# -ef_format Use efabless naming (libs.ref/techLEF), -# otherwise use generic naming (libs.tech/lef) -# -# -staging <path> Path to staging top level directory -# -target <path> Path to target top level directory -# -local <path> For distributed installs, this is the local -# path to target top level directory. -# -source <path> Path to original source top level directory, -# if link_from is "source". This option may -# be called multiple times if there are multiple -# sources. -# -variable <name> Specify a variable name that is used for the -# target path. This variable name must be enforced -# in setup scripts like .magicrc + +""" +staging_install.py [options...] + +This file copies the staging area created by foundry_install.py +into the target directory area, changing paths to match the target, +and creating symbolic links where requested and allowed. + +Options: + -staging <path> Path to staging top level directory that the files + will be installed from. + + -target <path> Final install path in system file system. + + Normally, '$(prefix)/pdks/<unique pdk name>'. + + If -local is not given, this will be the top level + directory location the files are installed too. + + -local <path> Actual file system location to write the files too. + The result can then be packaged and distributed. + + For usage with things like package managers and other + administrator installation tooling. The resulting + files still need to be installed at '-target' on the + final system. + + Think 'DESTDIR', see + https://www.gnu.org/prep/standards/html_node/DESTDIR.html + + -source <path> Path to original source top level directory, if + link_from is "source". This option may be called + multiple times if there are multiple sources. + + -variable <name> Specify a variable name that is used for the + target path. This variable name must be enforced + in setup scripts like .magicrc + +Less common options: + -link_from <type> Make symbolic links to vendor files from target. + + Types are: "none", "source", or a PDK name. + + Default "none" (copy all files from source) + + -ef_format Use efabless naming (libs.ref/techLEF), + otherwise use generic naming (libs.tech/lef) + +If <target> is unspecified then <name> is used for the target. +""" import re import os @@ -38,20 +63,6 @@ # in Python 3.8 and up ONLY using "dirs_exist_ok=True". from distutils.dir_util import copy_tree -def usage(): - print("staging_install.py [options...]") - print(" -link_from <name> Make symbolic links from target to <name>") - print(" where <name> can be 'source' or a PDK name.") - print(" Default behavior is to copy all files.") - print(" -copy Copy files from source to target (default)") - print(" -ef_format Use efabless naming conventions for local directories") - print("") - print(" -staging <path> Path to top of staging directory tree") - print(" -target <path> Path to top of target directory tree") - print(" -local <path> Local path to top of target directory tree for distributed install") - print("") - print(" If <target> is unspecified then <name> is used for the target.") - def makeuserwritable(filepath): if os.path.exists(filepath): st = os.stat(filepath) @@ -225,7 +236,7 @@ if len(sys.argv) == 1: print("No options given to staging_install.py.") - usage() + print(__doc__) sys.exit(0) optionlist = []
diff --git a/scripts/configure b/scripts/configure index 80d66e5..aed9348 100755 --- a/scripts/configure +++ b/scripts/configure
@@ -585,7 +585,6 @@ PACKAGE_BUGREPORT='github.com/RTimothyEdwards/open_pdks' PACKAGE_URL='' -ac_default_prefix=/usr/share ac_subst_vars='LTLIBOBJS LIBOBJS EF_STYLE @@ -662,8 +661,6 @@ ac_user_opts=' enable_option_checking enable_sky130_pdk -with_sky130_dist_path -with_sky130_local_path with_sky130_link_targets enable_klayout enable_magic @@ -1362,11 +1359,6 @@ Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --with-sky130-dist-path=/path/to/install/sky130 - "staging location to install the PDK for - distribution (optional)" - --with-sky130-local-path=/path/to/install/sky130 - "run-time location of the PDK" --with-sky130-link-targets=none|source "make symbolic links to existing files [default=none]" @@ -1933,7 +1925,7 @@ if ${am_cv_python_version+:} false; then : $as_echo_n "(cached) " >&6 else - am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[:3])"` + am_cv_python_version=`$PYTHON -c "import sys; print('%u.%u' % sys.version_info[:2])"` fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_version" >&5 $as_echo "$am_cv_python_version" >&6; } @@ -2205,7 +2197,7 @@ SKY130_SOURCE_PATH="" - SKY130_LOCAL_PATH="/usr/share/pdk" + SKY130_LOCAL_PATH="${datadir}/pdk" SKY130_DIST_PATH="" SKY130_LINK_TARGETS="none" SKY130_AUTO="0" @@ -2270,50 +2262,6 @@ $as_echo "$as_me: PDK 'sky130' will be downloaded automatically during make." >&6;} fi - # --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 - -fi - - - # "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=`realpath $SKY130_DIST_PATH` - fi - - # --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 - -fi - - - # 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 - { $as_echo "$as_me:${as_lineno-$LINENO}: Install path for 'sky130' is $SKY130_LOCAL_PATH" >&5 -$as_echo "$as_me: Install path for 'sky130' is $SKY130_LOCAL_PATH" >&6;} - # If dist-path is specified then do not try to expand local-path - if test "$SKY130_DIST_PATH" == "" ; then - SKY130_LOCAL_PATH=`realpath $SKY130_LOCAL_PATH` - fi - fi - # --with-pdk-link-targets=PDK_LINK_TARGETS # Check whether --with-sky130-link-targets was given.
diff --git a/scripts/configure.ac b/scripts/configure.ac index 972bd37..5fdc3ef 100755 --- a/scripts/configure.ac +++ b/scripts/configure.ac
@@ -1,6 +1,6 @@ AC_INIT([open_pdks], [1.0], [github.com/RTimothyEdwards/open_pdks]) -AC_PREFIX_DEFAULT(/usr/share) +AC_CONFIG_MACRO_DIR(m4) ## REQUIRES: https://www.gnu.org/software/autoconf-archive/ax_python_module.html#ax_python_module AM_PATH_PYTHON([3.4]) @@ -36,8 +36,6 @@ m4_define([pdkvar], [m4_normalize(m4_esyscmd(echo pdk | tr "a-z-" "A-Z_"))]) pdkvar[]_SOURCE_PATH="" - pdkvar[]_LOCAL_PATH="/usr/share/[pdk]" - pdkvar[]_DIST_PATH="" pdkvar[]_LINK_TARGETS="none" pdkvar[]_AUTO="0" @@ -55,7 +53,6 @@ ], [ ] ) - # # Require this argument if @<:@ "$[]pdkvar[]_SOURCE_PATH" != "" @:>@; then pdkvar[]_SOURCE_PATH=`realpath $[]pdkvar[]_SOURCE_PATH` @@ -76,40 +73,6 @@ AC_MSG_NOTICE([PDK 'pdk' will be downloaded automatically during make.]) 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] - ) - - # "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=`realpath $[]pdkvar[]_DIST_PATH` - fi - - # --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 - AC_MSG_NOTICE([Install path for 'pdk' is $[]pdkvar[]_LOCAL_PATH]) - # If dist-path is specified then do not try to expand local-path - if test "$[]pdkvar[]_DIST_PATH" == "" ; then - pdkvar[]_LOCAL_PATH=`realpath $[]pdkvar[]_LOCAL_PATH` - fi - fi - # --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@:>@")], @@ -120,8 +83,6 @@ fi AC_SUBST(pdkvar[]_SOURCE_PATH) - AC_SUBST(pdkvar[]_LOCAL_PATH) - AC_SUBST(pdkvar[]_DIST_PATH) AC_SUBST(pdkvar[]_LINK_TARGETS) ]) ])
diff --git a/scripts/m4/ax_python_module.m4 b/scripts/m4/ax_python_module.m4 new file mode 100644 index 0000000..f0f873d --- /dev/null +++ b/scripts/m4/ax_python_module.m4
@@ -0,0 +1,56 @@ +# =========================================================================== +# https://www.gnu.org/software/autoconf-archive/ax_python_module.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_PYTHON_MODULE(modname[, fatal, python]) +# +# DESCRIPTION +# +# Checks for Python module. +# +# If fatal is non-empty then absence of a module will trigger an error. +# The third parameter can either be "python" for Python 2 or "python3" for +# Python 3; defaults to Python 3. +# +# LICENSE +# +# Copyright (c) 2008 Andrew Collier +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 9 + +AU_ALIAS([AC_PYTHON_MODULE], [AX_PYTHON_MODULE]) +AC_DEFUN([AX_PYTHON_MODULE],[ + if test -z $PYTHON; + then + if test -z "$3"; + then + PYTHON="python3" + else + PYTHON="$3" + fi + fi + PYTHON_NAME=`basename $PYTHON` + AC_MSG_CHECKING($PYTHON_NAME module: $1) + $PYTHON -c "import $1" 2>/dev/null + if test $? -eq 0; + then + AC_MSG_RESULT(yes) + eval AS_TR_CPP(HAVE_PYMOD_$1)=yes + else + AC_MSG_RESULT(no) + eval AS_TR_CPP(HAVE_PYMOD_$1)=no + # + if test -n "$2" + then + AC_MSG_ERROR(failed to find required module $1) + exit 1 + fi + fi +])
diff --git a/sky130/Makefile.in b/sky130/Makefile.in index 883b80e..6576f3c 100644 --- a/sky130/Makefile.in +++ b/sky130/Makefile.in
@@ -21,18 +21,6 @@ # downloaded and installed to <repo root>/pdks. # If explicitly disabled, sky130 is skipped over entirely. # -# --with-sky130-local-path=<path> -# where <path> is the run-time location of the installed PDK -# files generated by open_pdks. This option is mandatory and -# has no default. -# -# --with-sky130-dist-path=<path> -# where <path> is the install-time location of the installed -# PDK files generated by open_pdks, with the expectation that -# <path> is something like a git repository that is then -# distributed across a system. If this option is not specified, -# then files are installed to the local path. -# # --with-sky130-link-targets=<value> # where <value> is one of "none" or "source". If set to "source", # then where possible, the installed files are symbolic links @@ -129,15 +117,10 @@ # SKYWATER_PATH: points to vendor sources # EF_STYLE: 1 for efabless style, 0 otherwise # LINK_TARGETS: link back to source or link to 1st PDK when possible -# DIST_PATH: install location for distributed install -# LOCAL_PATH: install location for local install or runtime location -# for distributed install # # Run "make" to stage the PDK for tool setup and vendor libraries # -# Run "make install" to install all staged files. The installation is -# either local or distributed, depending on whether --with-sky130-dist-path -# has been set when running configure. +# Run "make install" to install all staged files. # # Run "make clean" to remove all staging files. # @@ -156,6 +139,10 @@ MV = mv SED = @SED@ +prefix = @prefix@ +datarootdir = @datarootdir@ +datadir = @datadir@ + # Use git revision if this is a cloned repo; otherwise get the revision # from the VERSION file in the directory above. GITREV = $(shell git describe --long) @@ -184,6 +171,8 @@ STAGING_PATH = $(shell pwd)/build +SHARED_PDKS_PATH = $(datadir)/pdks + # If LINK_TARGETS is set to "none", then files are copied # from the SkyWater sources to the target. If set to "source", # symbolic links are made in the target directories pointing @@ -227,24 +216,18 @@ # Once updated in git, the git project can be distributed to all hosts. # ifeq (${EF_STYLE}, 1) - LOCAL_PATH = @SKY130_LOCAL_PATH@ CONFIG_DIR = .ef-config REV_DIR = ${REVISION} else - # LOCAL_PATH = /usr/local/share/vlsi/SkyWater - LOCAL_PATH = @SKY130_LOCAL_PATH@ CONFIG_DIR = .config REV_DIR = . endif -# DIST_PATH = ~/gits/ef-skywater-${TECH} -DIST_PATH = @SKY130_DIST_PATH@ - # EF process nodes created from the master sources SKY130A = sky130A ifeq (${LINK_TARGETS}, ${SKY130A}) - DIST_LINK_TARGETS = ${LOCAL_PATH}/${LINK_TARGETS} + DIST_LINK_TARGETS = ${SHARED_PDKS_PATH}/${LINK_TARGETS} else DIST_LINK_TARGETS = ${LINK_TARGETS} endif @@ -391,13 +374,17 @@ # The following script in the ../common directory does most of the work of # copying or linking the foundry vendor files to the target directory. STAGE = set -f ; ../common/foundry_install.py ${EF_FORMAT} +ifneq ($(DESTDIR), ) +INSTALL = ../common/staging_install.py -local $(DESTDIR) +else INSTALL = ../common/staging_install.py ${EF_FORMAT} +endif # The script(s) below are used for custom changes to the vendor PDK files ADDPROP = ../common/insert_property.py ${EF_FORMAT} # List the EDA tools to install local setup files for -TOOLS = +TOOLS = # KLAYOUT_DISABLED = 0 | 1 KLAYOUT_DISABLED = @KLAYOUT_DISABLED@ @@ -1133,56 +1120,23 @@ options=custom/scripts/gds_import_setup.tcl \ -library digital sky130_osu_sc_18t_ls 2>&1 | tee -a ${SKY130A}_make.log -install: - if test "x${DIST_PATH}" == "x" ; then \ - ${MAKE} install-local ; \ - else \ - ${MAKE} install-dist; \ - fi +install: install-a -install-local: install-local-a - -install-local-a: +install-a: echo "Starting SKY130 PDK migration on "`date` > ${SKY130A}_install.log - ${INSTALL} -source ${STAGING_PATH}/${SKY130A} \ - -target ${LOCAL_PATH}/${SKY130A} \ + ${INSTALL} \ + -source ${STAGING_PATH}/${SKY130A} \ + -target ${SHARED_PDKS_PATH}/${SKY130A} \ -variable PDKPATH \ -link_from ${LINK_TARGETS} 2>&1 | tee -a ${SKY130A}_install.log echo "Ended SKY130 PDK migration on "`date` >> ${SKY130A}_install.log -install-dist: install-dist-a +uninstall: uninstall-a -install-dist-a: - echo "Starting SKY130 PDK migration on "`date` > ${SKY130A}_install.log - ${INSTALL} -source ${STAGING_PATH}/${SKY130A} \ - -target ${DIST_PATH}/${SKY130A} \ - -variable PDKPATH \ - -local ${LOCAL_PATH}/${SKY130A} \ - -link_from ${DIST_LINK_TARGETS} 2>&1 | tee -a ${SKY130A}_install.log - echo "Ended SKY130 PDK migration on "`date` >> ${SKY130A}_install.log - -uninstall: - if test "x${DIST_PATH}" == "x" ; then \ - ${MAKE} uninstall-local ; \ - else \ - ${MAKE} uninstall-dist; \ - fi - -uninstall-local: uninstall-local-a - -uninstall-local-a: - echo "Uninstalling SKY130 PDK from ${LOCAL_PATH}" - if test "x${LOCAL_PATH}" != "x" ; then \ - ${RM} -rf ${LOCAL_PATH}/${SKY130A} ; \ - fi - echo "Finished SKY130 PDK uninstall" - -uninstall-dist: uninstall-dist-a - -uninstall-dist-a: - echo "Uninstalling SKY130 PDK from ${DIST_PATH}" - if test "x${DIST_PATH}" != "x" ; then \ - ${RM} -rf ${DIST_PATH}/${SKY130A} ; \ +uninstall-a: + echo "Uninstalling SKY130 PDK from ${SHARED_PDKS_PATH}" + if test "x${SHARED_PDKS_PATH}" != "x" ; then \ + ${RM} -rf ${SHARED_PDKS_PATH}/${SKY130A} ; \ fi echo "Finished SKY130 PDK uninstall" @@ -1199,4 +1153,32 @@ # Legacy name ${RM} ${SKY130A}_migrate.log +# Old aliases for compatibility +# ------------------------------------------------------------------------------------- +install-dist: + $(warning "'make install-dist' has been replaced with 'make install'") + make install +install-local: + $(warning "'make install-local' has been replaced with 'make install'") + make install +uninstall-dist: + $(warning "'make uninstall-dist' has been replaced with 'make uninstall'") + make uninstall +uninstall-local: + $(warning "'make uninstall-local' has been replaced with 'make uninstall'") + make uninstall + +install-dist-a: + $(warning "'make install-dist-a' has been replaced with 'make install'") + make install +install-local-a: + $(warning "'make install-local-a' has been replaced with 'make install'") + make install + +uninstall-dist-a: + $(warning "'make uninstall-dist-a' has been replaced with 'make uninstall'") + make uninstall +uninstall-local-a: + $(warning "'make uninstall-local-a' has been replaced with 'make uninstall'") + make uninstall