diff --git a/amaranth/build/plat.py b/amaranth/build/plat.py index 3b706ab..159530f 100644 --- a/amaranth/build/plat.py +++ b/amaranth/build/plat.py @@ -69,13 +69,20 @@ class Platform(ResourceManager, metaclass=ABCMeta): yield filename @property - def _deprecated_toolchain_env_var(self): - return f"NMIGEN_ENV_{tool_env_var(self.toolchain)}" + def _deprecated_toolchain_env_vars(self): + return ( + f"NMIGEN_ENV_{self.toolchain}", + f"AMARANTH_ENV_{self.toolchain}", + ) @property def _toolchain_env_var(self): return f"AMARANTH_ENV_{tool_env_var(self.toolchain)}" + @property + def _all_toolchain_env_vars(self): + return self._deprecated_toolchain_env_vars + (self._toolchain_env_var,) + def build(self, elaboratable, name="top", build_dir="build", do_build=True, program_opts=None, do_program=False, @@ -92,8 +99,8 @@ class Platform(ResourceManager, metaclass=ABCMeta): # may fail. # This is OK because even if `require_tool` succeeds, the toolchain might be broken anyway. # The check only serves to catch common errors earlier. - if do_build and (self._deprecated_toolchain_env_var not in os.environ and - self._toolchain_env_var not in os.environ): + got_env_var = any(v in os.environ for v in self._all_toolchain_env_vars) + if do_build and not got_env_var: for tool in self.required_tools: require_tool(tool) @@ -108,8 +115,7 @@ class Platform(ResourceManager, metaclass=ABCMeta): self.toolchain_program(products, name, **(program_opts or {})) def has_required_tools(self): - if (self._deprecated_toolchain_env_var in os.environ or - self._toolchain_env_var in os.environ): + if any(v in os.environ for v in self._all_toolchain_env_vars): return True return all(has_tool(name) for name in self.required_tools) @@ -275,15 +281,17 @@ class TemplatedPlatform(Platform): "build_{{name}}.sh": """ # {{autogenerated}} set -e{{verbose("x")}} - [ -n "${{platform._deprecated_toolchain_env_var}}" ] && . "${{platform._deprecated_toolchain_env_var}}" - [ -n "${{platform._toolchain_env_var}}" ] && . "${{platform._toolchain_env_var}}" + {% for var in platform._all_toolchain_env_vars %} + [ -n "${{var}}" ] && . "${{var}}" + {% endfor %} {{emit_commands("sh")}} """, "build_{{name}}.bat": """ @rem {{autogenerated}} {{quiet("@echo off")}} - if defined {{platform._deprecated_toolchain_env_var}} call %{{platform._deprecated_toolchain_env_var}}% - if defined {{platform._toolchain_env_var}} call %{{platform._toolchain_env_var}}% + {% for var in platform._all_toolchain_env_vars %} + if defined {{var}} call %{{var}}% + {% endfor %} {{emit_commands("bat")}} """, } diff --git a/amaranth/vendor/intel.py b/amaranth/vendor/intel.py index e7b7c94..b1ebb5a 100644 --- a/amaranth/vendor/intel.py +++ b/amaranth/vendor/intel.py @@ -84,16 +84,13 @@ class IntelPlatform(TemplatedPlatform): **TemplatedPlatform.build_script_templates, "build_{{name}}.sh": r""" # {{autogenerated}} - if [ -n "${{platform._deprecated_toolchain_env_var}}" ]; then - QUARTUS_ROOTDIR=$(dirname $(dirname "${{platform._deprecated_toolchain_env_var}}")) + {% for var in platform._all_toolchain_env_vars %} + if [ -n "${{var}}" ]; then + QUARTUS_ROOTDIR=$(dirname $(dirname "${{var}}")) # Quartus' qenv.sh does not work with `set -e`. - . "${{platform._deprecated_toolchain_env_var}}" - fi - if [ -n "${{platform._toolchain_env_var}}" ]; then - QUARTUS_ROOTDIR=$(dirname $(dirname "${{platform._toolchain_env_var}}")) - # Quartus' qenv.sh does not work with `set -e`. - . "${{platform._toolchain_env_var}}" + . "${{var}}" fi + {% endfor %} set -e{{verbose("x")}} {{emit_commands("sh")}} """, diff --git a/amaranth/vendor/lattice_ecp5.py b/amaranth/vendor/lattice_ecp5.py index 4d5cb7c..eb348ca 100644 --- a/amaranth/vendor/lattice_ecp5.py +++ b/amaranth/vendor/lattice_ecp5.py @@ -189,14 +189,12 @@ class LatticeECP5Platform(TemplatedPlatform): # {{autogenerated}} set -e{{verbose("x")}} if [ -z "$BASH" ] ; then exec /bin/bash "$0" "$@"; fi - if [ -n "${{platform._deprecated_toolchain_env_var}}" ]; then - bindir=$(dirname "${{platform._deprecated_toolchain_env_var}}") - . "${{platform._deprecated_toolchain_env_var}}" - fi - if [ -n "${{platform._toolchain_env_var}}" ]; then - bindir=$(dirname "${{platform._toolchain_env_var}}") - . "${{platform._toolchain_env_var}}" + {% for var in platform._all_toolchain_env_vars %} + if [ -n "${{var}}" ]; then + bindir=$(dirname "${{var}}") + . "${{var}}" fi + {% endfor %} {{emit_commands("sh")}} """, "{{name}}.v": r""" diff --git a/amaranth/vendor/lattice_ice40.py b/amaranth/vendor/lattice_ice40.py index 0e3deba..8dcada9 100644 --- a/amaranth/vendor/lattice_ice40.py +++ b/amaranth/vendor/lattice_ice40.py @@ -180,31 +180,22 @@ class LatticeICE40Platform(TemplatedPlatform): "build_{{name}}.sh": r""" # {{autogenerated}} set -e{{verbose("x")}} - if [ -n "${{platform._deprecated_toolchain_env_var}}" ]; then + {% for var in platform._all_toolchain_env_vars %} + if [ -n "${{var}}" ]; then # LSE environment - export LD_LIBRARY_PATH=${{platform._deprecated_toolchain_env_var}}/LSE/bin/lin64:$LD_LIBRARY_PATH - export PATH=${{platform._deprecated_toolchain_env_var}}/LSE/bin/lin64:$PATH - export FOUNDRY=${{platform._deprecated_toolchain_env_var}}/LSE + export LD_LIBRARY_PATH=${{var}}/LSE/bin/lin64:$LD_LIBRARY_PATH + export PATH=${{var}}/LSE/bin/lin64:$PATH + export FOUNDRY=${{var}}/LSE # Synplify environment - export LD_LIBRARY_PATH=${{platform._deprecated_toolchain_env_var}}/sbt_backend/bin/linux/opt/synpwrap:$LD_LIBRARY_PATH - export PATH=${{platform._deprecated_toolchain_env_var}}/sbt_backend/bin/linux/opt/synpwrap:$PATH - export SYNPLIFY_PATH=${{platform._deprecated_toolchain_env_var}}/synpbase + export LD_LIBRARY_PATH=${{var}}/sbt_backend/bin/linux/opt/synpwrap:$LD_LIBRARY_PATH + export PATH=${{var}}/sbt_backend/bin/linux/opt/synpwrap:$PATH + export SYNPLIFY_PATH=${{var}}/synpbase # Common environment - export SBT_DIR=${{platform._deprecated_toolchain_env_var}}/sbt_backend - elif [ -n "${{platform._toolchain_env_var}}" ]; then - # LSE environment - export LD_LIBRARY_PATH=${{platform._toolchain_env_var}}/LSE/bin/lin64:$LD_LIBRARY_PATH - export PATH=${{platform._toolchain_env_var}}/LSE/bin/lin64:$PATH - export FOUNDRY=${{platform._toolchain_env_var}}/LSE - # Synplify environment - export LD_LIBRARY_PATH=${{platform._toolchain_env_var}}/sbt_backend/bin/linux/opt/synpwrap:$LD_LIBRARY_PATH - export PATH=${{platform._toolchain_env_var}}/sbt_backend/bin/linux/opt/synpwrap:$PATH - export SYNPLIFY_PATH=${{platform._toolchain_env_var}}/synpbase - # Common environment - export SBT_DIR=${{platform._toolchain_env_var}}/sbt_backend + export SBT_DIR=${{var}}/sbt_backend else echo "Variable ${{platform._toolchain_env_var}} must be set" >&2; exit 1 fi + {% endfor %} {{emit_commands("sh")}} """, "{{name}}.v": r""" diff --git a/amaranth/vendor/lattice_machxo_2_3l.py b/amaranth/vendor/lattice_machxo_2_3l.py index 42d9ffc..80ab54b 100644 --- a/amaranth/vendor/lattice_machxo_2_3l.py +++ b/amaranth/vendor/lattice_machxo_2_3l.py @@ -55,14 +55,12 @@ class LatticeMachXO2Or3LPlatform(TemplatedPlatform): # {{autogenerated}} set -e{{verbose("x")}} if [ -z "$BASH" ] ; then exec /bin/bash "$0" "$@"; fi - if [ -n "${{platform._deprecated_toolchain_env_var}}" ]; then - bindir=$(dirname "${{platform._deprecated_toolchain_env_var}}") - . "${{platform._deprecated_toolchain_env_var}}" - fi - if [ -n "${{platform._toolchain_env_var}}" ]; then - bindir=$(dirname "${{platform._toolchain_env_var}}") - . "${{platform._toolchain_env_var}}" + {% for var in platform._all_toolchain_env_vars %} + if [ -n "${{var}}" ]; then + bindir=$(dirname "${{var}}") + . "${{var}}" fi + {% endfor %} {{emit_commands("sh")}} """, "{{name}}.v": r""" diff --git a/amaranth/vendor/xilinx.py b/amaranth/vendor/xilinx.py index 217aa1b..2f2a849 100644 --- a/amaranth/vendor/xilinx.py +++ b/amaranth/vendor/xilinx.py @@ -126,8 +126,9 @@ class XilinxPlatform(TemplatedPlatform): # {{autogenerated}} set -e{{verbose("x")}} if [ -z "$BASH" ] ; then exec /bin/bash "$0" "$@"; fi - [ -n "${{platform._deprecated_toolchain_env_var}}" ] && . "${{platform._deprecated_toolchain_env_var}}" - [ -n "${{platform._toolchain_env_var}}" ] && . "${{platform._toolchain_env_var}}" + {% for var in platform._all_toolchain_env_vars %} + [ -n "${{var}}" ] && . "${{var}}" + {% endfor %} {{emit_commands("sh")}} """, "{{name}}.v": r""" @@ -233,8 +234,9 @@ class XilinxPlatform(TemplatedPlatform): # {{autogenerated}} set -e{{verbose("x")}} if [ -z "$BASH" ] ; then exec /bin/bash "$0" "$@"; fi - [ -n "${{platform._deprecated_toolchain_env_var}}" ] && . "${{platform._deprecated_toolchain_env_var}}" - [ -n "${{platform._toolchain_env_var}}" ] && . "${{platform._toolchain_env_var}}" + {% for var in platform._all_toolchain_env_vars %} + [ -n "${{var}}" ] && . "${{var}}" + {% endfor %} {{emit_commands("sh")}} """, "{{name}}.v": r"""