Ahmed Ghazy | 6dc7ebf | 2020-07-29 16:52:14 +0200 | [diff] [blame] | 1 | AC_INIT([open_pdks], [1.0], [github.com/RTimothyEdwards/open_pdks]) |
| 2 | |
Tim Edwards | 66e53e5 | 2021-01-24 21:21:36 -0500 | [diff] [blame] | 3 | ## REQUIRES: https://www.gnu.org/software/autoconf-archive/ax_python_module.html#ax_python_module |
| 4 | AM_PATH_PYTHON([3.4]) |
| 5 | AX_PYTHON_MODULE([distutils],[]) |
| 6 | |
| 7 | realpath() { |
| 8 | # Cross-platform, handles ~ |
| 9 | python3 -c 'import os,sys;print(os.path.realpath(os.path.expanduser(sys.argv@<:@1@:>@)))' $1 |
| 10 | } |
| 11 | |
Ahmed Ghazy | 6dc7ebf | 2020-07-29 16:52:14 +0200 | [diff] [blame] | 12 | # detect PDKs based on directories that include Makefile.in files |
Tim Edwards | 8292c90 | 2020-12-24 16:25:25 -0500 | [diff] [blame] | 13 | m4_define([M4_GET_TECHS], [m4_normalize(m4_esyscmd(cd .. && find * -mindepth 1 -maxdepth 1 -name "Makefile.in" -exec dirname {} \; | tr "\n" " "))]) |
Ahmed Ghazy | 6dc7ebf | 2020-07-29 16:52:14 +0200 | [diff] [blame] | 14 | |
Tim Edwards | 8292c90 | 2020-12-24 16:25:25 -0500 | [diff] [blame] | 15 | # define tools |
Tim Edwards | ccaea72 | 2020-12-24 10:59:42 -0500 | [diff] [blame] | 16 | # define tools to install setup files for. This does not imply that the tools are |
| 17 | # available on the system; just that open_pdks will install the setup files for them. |
| 18 | m4_define([M4_GET_TOOLS], [m4_normalize(m4_esyscmd(cat ./tools.txt | tr "\n" " "))]) |
| 19 | |
Tim Edwards | 7cbaaba | 2020-08-05 12:19:18 -0400 | [diff] [blame] | 20 | # check for the source and install paths for each PDK. |
Tim Edwards | 8292c90 | 2020-12-24 16:25:25 -0500 | [diff] [blame] | 21 | AC_DEFUN([M4_GEN_WITH_PDK_ARGS], [ |
| 22 | |
| 23 | # --enable-pdk-[pdk]=/path/to/pdk |
Ahmed Ghazy | 6dc7ebf | 2020-07-29 16:52:14 +0200 | [diff] [blame] | 24 | m4_foreach_w(pdk, $1, [ |
Tim Edwards | 1168a8b | 2021-02-10 22:06:54 -0500 | [diff] [blame] | 25 | echo "Checking technology pdk..." |
| 26 | m4_define([pdkvar], [m4_normalize(m4_esyscmd(echo pdk | tr "a-z-" "A-Z_"))]) |
Tim Edwards | 8292c90 | 2020-12-24 16:25:25 -0500 | [diff] [blame] | 27 | |
| 28 | pdkvar[]_SOURCE_PATH="" |
Tim Edwards | 7e0a644 | 2021-02-11 15:37:42 -0500 | [diff] [blame] | 29 | pdkvar[]_LOCAL_PATH="/usr/share/[pdk]" |
Tim Edwards | 8292c90 | 2020-12-24 16:25:25 -0500 | [diff] [blame] | 30 | pdkvar[]_DIST_PATH="" |
| 31 | pdkvar[]_LINK_TARGETS="none" |
Tim Edwards | 7e0a644 | 2021-02-11 15:37:42 -0500 | [diff] [blame] | 32 | pdkvar[]_AUTO="0" |
Tim Edwards | debc0a4 | 2020-12-28 22:11:40 -0500 | [diff] [blame] | 33 | |
Tim Edwards | 8292c90 | 2020-12-24 16:25:25 -0500 | [diff] [blame] | 34 | AC_ARG_ENABLE(pdk-[pdk], |
| 35 | [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)")], |
| 36 | [ |
| 37 | if test "$enableval" == "yes" -o "$enableval" == "YES"; then |
Tim Edwards | 7e0a644 | 2021-02-11 15:37:42 -0500 | [diff] [blame] | 38 | export pdkvar[]_SOURCE_PATH=../sources/pdk-[pdk] |
| 39 | pdkvar[]_AUTO="1" |
Tim Edwards | 8292c90 | 2020-12-24 16:25:25 -0500 | [diff] [blame] | 40 | elif test "$enableval" == "no" -o "$enableval" == "NO"; then |
| 41 | echo "Disabling pdk..." |
| 42 | else |
Tim Edwards | bb8ab29 | 2021-01-22 10:19:40 -0500 | [diff] [blame] | 43 | pdkvar[]_SOURCE_PATH=$enableval |
Tim Edwards | 8292c90 | 2020-12-24 16:25:25 -0500 | [diff] [blame] | 44 | fi |
| 45 | ], [ |
Tim Edwards | 8292c90 | 2020-12-24 16:25:25 -0500 | [diff] [blame] | 46 | ] |
Ahmed Ghazy | 6dc7ebf | 2020-07-29 16:52:14 +0200 | [diff] [blame] | 47 | ) |
Tim Edwards | 8292c90 | 2020-12-24 16:25:25 -0500 | [diff] [blame] | 48 | # # Require this argument |
Tim Edwards | 7cbaaba | 2020-08-05 12:19:18 -0400 | [diff] [blame] | 49 | |
Tim Edwards | 8292c90 | 2020-12-24 16:25:25 -0500 | [diff] [blame] | 50 | if @<:@ "$[]pdkvar[]_SOURCE_PATH" != "" @:>@; then |
Tim Edwards | 66e53e5 | 2021-01-24 21:21:36 -0500 | [diff] [blame] | 51 | pdkvar[]_SOURCE_PATH=`realpath $[]pdkvar[]_SOURCE_PATH` |
| 52 | pdkvar[]_BASENAME=`basename $[]pdkvar[]_SOURCE_PATH` |
| 53 | if @<:@ "$[]pdkvar[]_BASENAME" = "libraries" @:>@; then |
| 54 | pdkvar[]_SOURCE_PATH=`dirname $[]pdkvar[]_SOURCE_PATH` |
| 55 | fi |
Tim Edwards | 6ee1153 | 2021-02-11 12:29:33 -0500 | [diff] [blame] | 56 | # Basic check that the PDK path exists, unless depending on Makefile |
| 57 | # to download it automatically. |
Tim Edwards | 7e0a644 | 2021-02-11 15:37:42 -0500 | [diff] [blame] | 58 | if @<:@ "$[]pdkvar[]_AUTO" = "0" @:>@; then |
Tim Edwards | 6ee1153 | 2021-02-11 12:29:33 -0500 | [diff] [blame] | 59 | AC_MSG_NOTICE([Checking specified path for 'pdk' at $[]pdkvar[]_SOURCE_PATH]) |
| 60 | AC_CHECK_FILE($pdkvar[]_SOURCE_PATH,[ |
| 61 | AC_MSG_NOTICE(['pdk' source path found at $pdkvar[]_SOURCE_PATH]) |
| 62 | ], [ |
| 63 | AC_MSG_ERROR([Specified path for 'pdk' at $pdkvar[]_SOURCE_PATH not found]) |
| 64 | ]) |
| 65 | else |
| 66 | AC_MSG_NOTICE([PDK 'pdk' will be downloaded automatically during make.]) |
| 67 | fi |
Tim Edwards | 7cbaaba | 2020-08-05 12:19:18 -0400 | [diff] [blame] | 68 | |
Tim Edwards | 8292c90 | 2020-12-24 16:25:25 -0500 | [diff] [blame] | 69 | # --with-pdk-local-path=PDK_LOCAL_PATH |
| 70 | AC_ARG_WITH(pdk-local-path, |
| 71 | [AS_HELP_STRING([--with-pdk-local-path=/path/to/install/pdk], "run-time location of the PDK")], |
| 72 | [pdkvar[]_LOCAL_PATH=$withval] |
| 73 | ) |
| 74 | |
| 75 | # Require this argument |
| 76 | AC_MSG_NOTICE([Checking whether local path is specified for 'pdk']) |
| 77 | if test "x$[]pdkvar[]_LOCAL_PATH" == "x" ; then |
| 78 | AC_MSG_ERROR([Option --with-pdk-local-path=<path> not specified!]) |
| 79 | pdkvar[]_LOCAL_PATH="" |
| 80 | else |
Tim Edwards | 7e0a644 | 2021-02-11 15:37:42 -0500 | [diff] [blame] | 81 | AC_MSG_NOTICE([Install path for 'pdk' is $[]pdkvar[]_LOCAL_PATH]) |
Tim Edwards | 66e53e5 | 2021-01-24 21:21:36 -0500 | [diff] [blame] | 82 | pdkvar[]_LOCAL_PATH=`realpath $[]pdkvar[]_LOCAL_PATH` |
Tim Edwards | 8292c90 | 2020-12-24 16:25:25 -0500 | [diff] [blame] | 83 | fi |
Tim Edwards | 7cbaaba | 2020-08-05 12:19:18 -0400 | [diff] [blame] | 84 | |
Tim Edwards | 8292c90 | 2020-12-24 16:25:25 -0500 | [diff] [blame] | 85 | # --with-pdk-dist-path=PDK_DIST_PATH |
| 86 | AC_ARG_WITH(pdk-dist-path, |
| 87 | [AS_HELP_STRING([--with-pdk-dist-path=/path/to/install/pdk], "staging location to install the PDK for distribution (optional)")], |
| 88 | [pdkvar[]_DIST_PATH=$withval] |
| 89 | ) |
Tim Edwards | 8292c90 | 2020-12-24 16:25:25 -0500 | [diff] [blame] | 90 | |
| 91 | # "Require" this argument |
| 92 | AC_MSG_NOTICE([Checking whether distribution path is specified for 'pdk']) |
| 93 | if test "x$[]pdkvar[]_DIST_PATH" == "x" ; then |
| 94 | AC_MSG_NOTICE([Option --with-pdk-dist-path=<path> not specified. Local install only.]) |
| 95 | pdkvar[]_DIST_PATH="" |
| 96 | else |
Tim Edwards | 66e53e5 | 2021-01-24 21:21:36 -0500 | [diff] [blame] | 97 | pdkvar[]_DIST_PATH=`realpath $[]pdkvar[]_DIST_PATH` |
Tim Edwards | 8292c90 | 2020-12-24 16:25:25 -0500 | [diff] [blame] | 98 | fi |
Tim Edwards | 7cbaaba | 2020-08-05 12:19:18 -0400 | [diff] [blame] | 99 | |
Tim Edwards | 8292c90 | 2020-12-24 16:25:25 -0500 | [diff] [blame] | 100 | # --with-pdk-link-targets=PDK_LINK_TARGETS |
| 101 | AC_ARG_WITH(pdk-link-targets, |
| 102 | [AS_HELP_STRING([--with-pdk-link-targets=none|source], "make symbolic links to existing files @<:@default=none@:>@")], |
| 103 | [[]pdkvar[]_LINK_TARGETS=$with_[]pdk[]_link_targets] |
| 104 | ) |
| 105 | AC_SUBST([]pdkvar[]_LINK_TARGETS) |
| 106 | AC_MSG_NOTICE([Link targets set to $pdkvar[]_LINK_TARGETS]) |
| 107 | fi |
Tim Edwards | 7cbaaba | 2020-08-05 12:19:18 -0400 | [diff] [blame] | 108 | |
Tim Edwards | 8292c90 | 2020-12-24 16:25:25 -0500 | [diff] [blame] | 109 | AC_SUBST(pdkvar[]_SOURCE_PATH) |
| 110 | AC_SUBST(pdkvar[]_LOCAL_PATH) |
| 111 | AC_SUBST(pdkvar[]_DIST_PATH) |
| 112 | AC_SUBST(pdkvar[]_LINK_TARGETS) |
Ahmed Ghazy | 6dc7ebf | 2020-07-29 16:52:14 +0200 | [diff] [blame] | 113 | ]) |
| 114 | ]) |
| 115 | |
| 116 | AC_MSG_NOTICE([Found technology directories: M4_GET_TECHS()]) |
| 117 | |
Tim Edwards | 7cbaaba | 2020-08-05 12:19:18 -0400 | [diff] [blame] | 118 | M4_GEN_WITH_PDK_ARGS(M4_GET_TECHS()) |
Ahmed Ghazy | 6dc7ebf | 2020-07-29 16:52:14 +0200 | [diff] [blame] | 119 | |
Tim Edwards | 8292c90 | 2020-12-24 16:25:25 -0500 | [diff] [blame] | 120 | # Set variables for tool setups |
| 121 | AC_DEFUN([M4_GEN_WITH_TOOLS], [ |
| 122 | m4_foreach_w(tool, $1, [ |
Tim Edwards | 1168a8b | 2021-02-10 22:06:54 -0500 | [diff] [blame] | 123 | m4_define([toolvar], [m4_normalize(m4_esyscmd(echo tool | tr "a-z-" "A-Z_"))]) |
Tim Edwards | 8292c90 | 2020-12-24 16:25:25 -0500 | [diff] [blame] | 124 | |
| 125 | toolvar[]_DISABLED=0 |
| 126 | AC_ARG_ENABLE(tool, |
| 127 | AS_HELP_STRING( |
| 128 | --enable-tool |
Tim Edwards | 1168a8b | 2021-02-10 22:06:54 -0500 | [diff] [blame] | 129 | Enable or disable tool setup @<:@default=enabled@:>@ |
Tim Edwards | 8292c90 | 2020-12-24 16:25:25 -0500 | [diff] [blame] | 130 | ), [ |
| 131 | if test "$enableval" == "no" -o "$enableval" == "NO"; then |
| 132 | toolvar[]_DISABLED=1 |
| 133 | fi |
| 134 | ] |
| 135 | ) |
| 136 | AC_SUBST(toolvar[]_DISABLED) |
| 137 | ]) |
| 138 | ]) |
| 139 | |
| 140 | AC_MSG_NOTICE([Found tools: M4_GET_TOOLS()]) |
| 141 | |
| 142 | M4_GEN_WITH_TOOLS(M4_GET_TOOLS()) |
| 143 | |
| 144 | # Magic |
| 145 | AC_PATH_PROG(MAGIC, magic) |
| 146 | if test -z "$MAGIC"; then |
| 147 | AC_MSG_ERROR([You need 'magic' to generate the needed various cell views.]) |
| 148 | fi |
Ahmed Ghazy | 3238548 | 2021-01-19 20:38:14 +0200 | [diff] [blame] | 149 | AC_PATH_PROG(PATCH, patch) |
| 150 | if test -z "$PATCH"; then |
| 151 | AC_MSG_ERROR([You need 'patch' to apply patches.]) |
| 152 | fi |
Tim Edwards | 8292c90 | 2020-12-24 16:25:25 -0500 | [diff] [blame] | 153 | |
| 154 | # Other installations (libraries or tools if applicable) |
Tim Edwards | 8292c90 | 2020-12-24 16:25:25 -0500 | [diff] [blame] | 155 | AC_DEFUN([M4_GEN_INSTALLATION], [ |
| 156 | m4_define([target], $1) |
Tim Edwards | 1168a8b | 2021-02-10 22:06:54 -0500 | [diff] [blame] | 157 | m4_define([targetvar], [m4_normalize(m4_esyscmd(echo target | tr "a-z-" "A-Z_"))]) |
Tim Edwards | 8292c90 | 2020-12-24 16:25:25 -0500 | [diff] [blame] | 158 | m4_define([flag], $2) |
Tim Edwards | 6ee1153 | 2021-02-11 12:29:33 -0500 | [diff] [blame] | 159 | m4_define([location], $3) |
Tim Edwards | 8292c90 | 2020-12-24 16:25:25 -0500 | [diff] [blame] | 160 | |
Tim Edwards | 6ee1153 | 2021-02-11 12:29:33 -0500 | [diff] [blame] | 161 | # echo target targetvar flag location |
Tim Edwards | 8292c90 | 2020-12-24 16:25:25 -0500 | [diff] [blame] | 162 | |
| 163 | targetvar[]_PATH="" |
Tim Edwards | 8292c90 | 2020-12-24 16:25:25 -0500 | [diff] [blame] | 164 | |
| 165 | AC_ARG_ENABLE( |
| 166 | flag, |
| 167 | AS_HELP_STRING( |
| 168 | [--enable-flag@<:@=path@:>@], |
Tim Edwards | cfe970c | 2021-02-26 14:35:51 -0500 | [diff] [blame] | 169 | [Install target. If path is omitted, it'll be downloaded. @<:@default=enabled@:>@] |
Tim Edwards | 8292c90 | 2020-12-24 16:25:25 -0500 | [diff] [blame] | 170 | ), [ |
| 171 | if test "$enableval" == "yes" -o "$enableval" == "YES"; then |
Tim Edwards | 7e0a644 | 2021-02-11 15:37:42 -0500 | [diff] [blame] | 172 | AC_MSG_NOTICE([Package 'target' will be installed automatically during make.]) |
Tim Edwards | 6ee1153 | 2021-02-11 12:29:33 -0500 | [diff] [blame] | 173 | export targetvar[]_PATH=location/target |
Tim Edwards | 8292c90 | 2020-12-24 16:25:25 -0500 | [diff] [blame] | 174 | elif test "$enableval" == "no" -o "$enableval" == "NO"; then |
Tim Edwards | 7e0a644 | 2021-02-11 15:37:42 -0500 | [diff] [blame] | 175 | AC_MSG_NOTICE([Disabling package 'target']) |
| 176 | export targetvar[]_PATH="" |
Tim Edwards | 8292c90 | 2020-12-24 16:25:25 -0500 | [diff] [blame] | 177 | else |
| 178 | targetvar[]_PATH=$enableval |
Tim Edwards | 7e0a644 | 2021-02-11 15:37:42 -0500 | [diff] [blame] | 179 | AC_MSG_NOTICE([Enabling package 'target' at $[]targetvar[]_PATH]) |
Tim Edwards | 8292c90 | 2020-12-24 16:25:25 -0500 | [diff] [blame] | 180 | fi |
Tim Edwards | 66e53e5 | 2021-01-24 21:21:36 -0500 | [diff] [blame] | 181 | targetvar[]_PATH=`realpath $[]targetvar[]_PATH` |
Tim Edwards | 7e0a644 | 2021-02-11 15:37:42 -0500 | [diff] [blame] | 182 | ],[ |
| 183 | AC_MSG_NOTICE([Package 'target' will be installed automatically during make.]) |
| 184 | targetvar[]_PATH=location/target |
| 185 | ] |
Tim Edwards | 8292c90 | 2020-12-24 16:25:25 -0500 | [diff] [blame] | 186 | ) |
| 187 | |
Tim Edwards | 6ee1153 | 2021-02-11 12:29:33 -0500 | [diff] [blame] | 188 | $4 |
Tim Edwards | 8292c90 | 2020-12-24 16:25:25 -0500 | [diff] [blame] | 189 | |
| 190 | AC_SUBST(targetvar[]_PATH) |
| 191 | ]) |
| 192 | |
Tim Edwards | cfe970c | 2021-02-26 14:35:51 -0500 | [diff] [blame] | 193 | M4_GEN_INSTALLATION(sky130_sram_macros, sram-sky130, ../sources) |
Tim Edwards | 6ee1153 | 2021-02-11 12:29:33 -0500 | [diff] [blame] | 194 | M4_GEN_INSTALLATION(sky130_ml_xx_hd, alpha-sky130, ../sources) |
| 195 | M4_GEN_INSTALLATION(xschem_sky130, xschem-sky130, ../sources) |
Tim Edwards | 8292c90 | 2020-12-24 16:25:25 -0500 | [diff] [blame] | 196 | |
Tim Edwards | ccaea72 | 2020-12-24 10:59:42 -0500 | [diff] [blame] | 197 | AC_DEFUN([M4_GEN_WITH_TOOLS], [ |
| 198 | m4_foreach_w(tool, $1, [ |
Tim Edwards | 1168a8b | 2021-02-10 22:06:54 -0500 | [diff] [blame] | 199 | m4_define([toolvar], [m4_normalize(m4_esyscmd(echo tool | tr "a-z-" "A-Z_"))]) |
Tim Edwards | ccaea72 | 2020-12-24 10:59:42 -0500 | [diff] [blame] | 200 | |
| 201 | toolvar[]_DISABLED=0 |
| 202 | AC_ARG_ENABLE(tool, |
| 203 | AS_HELP_STRING( |
| 204 | --enable-tool --disable-tool, |
Tim Edwards | 1168a8b | 2021-02-10 22:06:54 -0500 | [diff] [blame] | 205 | Enable or disable tool setup @<:@default=enabled@:>@ |
Tim Edwards | ccaea72 | 2020-12-24 10:59:42 -0500 | [diff] [blame] | 206 | ), |
| 207 | [ |
| 208 | if test "$enableval" == "no" -o "$enableval" == "NO"; then |
| 209 | toolvar[]_DISABLED=1 |
| 210 | fi |
| 211 | ], |
| 212 | ) |
| 213 | AC_SUBST(toolvar[]_DISABLED) |
| 214 | ]) |
| 215 | ]) |
| 216 | |
| 217 | AC_MSG_NOTICE([Tools enabled for PDK setup installation: M4_GET_TOOLS()]) |
| 218 | |
Tim Edwards | 7cbaaba | 2020-08-05 12:19:18 -0400 | [diff] [blame] | 219 | # Check for "--with-ef-style" |
| 220 | EF_STYLE=0 |
Tim Edwards | 8292c90 | 2020-12-24 16:25:25 -0500 | [diff] [blame] | 221 | AC_ARG_WITH( |
| 222 | [ef-style], |
| 223 | AS_HELP_STRING( |
| 224 | [--with-ef-style], |
| 225 | [Use efabless style file system structure @<:@default=no@:>@] |
| 226 | ), [ |
| 227 | pdks_ef_style=$withval |
| 228 | if test "$withval" == "yes" -o "$withval" == "YES"; then |
| 229 | EF_STYLE=1 |
| 230 | fi |
| 231 | ], |
| 232 | ) |
Ahmed Ghazy | 6dc7ebf | 2020-07-29 16:52:14 +0200 | [diff] [blame] | 233 | |
Tim Edwards | 7cbaaba | 2020-08-05 12:19:18 -0400 | [diff] [blame] | 234 | AC_SUBST(EF_STYLE) |
Ahmed Ghazy | 6dc7ebf | 2020-07-29 16:52:14 +0200 | [diff] [blame] | 235 | |
| 236 | MAKEFILES=$(find .. -name "Makefile.in" | sed 's/\(.*\)\.in/\1/g') |
| 237 | AC_CONFIG_FILES($MAKEFILES) |
| 238 | |
| 239 | AC_OUTPUT |
| 240 | |
| 241 | AC_MSG_RESULT(Build configured successfully) |