From 78b90fbafafc176dbcc52858ae5b1b15bdeb1fe2 Mon Sep 17 00:00:00 2001 From: Catherine Date: Thu, 8 Feb 2024 05:39:58 +0000 Subject: [PATCH] build.plat,vendor: fix toolchain environment variable check. The bug was introduced in commit 15b6068c. A changelog entry was also missing. Fixes #1089. --- amaranth/build/plat.py | 13 ++++--------- amaranth/vendor/_intel.py | 8 +++----- amaranth/vendor/_lattice_ecp5.py | 8 +++----- amaranth/vendor/_lattice_ice40.py | 26 ++++++++++--------------- amaranth/vendor/_lattice_machxo_2_3l.py | 8 +++----- amaranth/vendor/_xilinx.py | 12 +++--------- docs/changes.rst | 1 + 7 files changed, 27 insertions(+), 49 deletions(-) diff --git a/amaranth/build/plat.py b/amaranth/build/plat.py index aaac867..293a6f1 100644 --- a/amaranth/build/plat.py +++ b/amaranth/build/plat.py @@ -89,8 +89,7 @@ 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. - got_env_var = any(v in os.environ for v in self._all_toolchain_env_vars) - if do_build and not got_env_var: + if do_build and not self._toolchain_env_var not in os.environ: for tool in self.required_tools: require_tool(tool) @@ -105,7 +104,7 @@ class Platform(ResourceManager, metaclass=ABCMeta): self.toolchain_program(products, name, **(program_opts or {})) def has_required_tools(self): - if any(v in os.environ for v in self._all_toolchain_env_vars): + if self._toolchain_env_var in os.environ: return True return all(has_tool(name) for name in self.required_tools) @@ -271,17 +270,13 @@ class TemplatedPlatform(Platform): #!/bin/sh # {{autogenerated}} set -e{{verbose("x")}} - {% for var in platform._all_toolchain_env_vars %} - [ -n "${{var}}" ] && . "${{var}}" - {% endfor %} + [ -n "${{platform._toolchain_env_var}}" ] && . "${{platform._toolchain_env_var}}" {{emit_commands("sh")}} """, "build_{{name}}.bat": """ @rem {{autogenerated}} {{quiet("@echo off")}} - {% for var in platform._all_toolchain_env_vars %} - if defined {{var}} call %{{var}}% - {% endfor %} + if defined {{platform._toolchain_env_var}} call %{{platform._toolchain_env_var}}% {{emit_commands("bat")}} """, } diff --git a/amaranth/vendor/_intel.py b/amaranth/vendor/_intel.py index 58f07eb..2404b8c 100644 --- a/amaranth/vendor/_intel.py +++ b/amaranth/vendor/_intel.py @@ -82,13 +82,11 @@ class IntelPlatform(TemplatedPlatform): "build_{{name}}.sh": r""" #!/bin/sh # {{autogenerated}} - {% for var in platform._all_toolchain_env_vars %} - if [ -n "${{var}}" ]; then - QUARTUS_ROOTDIR=$(dirname $(dirname "${{var}}")) + if [ -n "${{platform._toolchain_env_var}}" ]; then + QUARTUS_ROOTDIR=$(dirname $(dirname "${{platform._toolchain_env_var}}")) # Quartus' qenv.sh does not work with `set -e`. - . "${{var}}" + . "${{platform._toolchain_env_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 d75f629..10c8e58 100644 --- a/amaranth/vendor/_lattice_ecp5.py +++ b/amaranth/vendor/_lattice_ecp5.py @@ -186,12 +186,10 @@ class LatticeECP5Platform(TemplatedPlatform): # {{autogenerated}} set -e{{verbose("x")}} if [ -z "$BASH" ] ; then exec /bin/bash "$0" "$@"; fi - {% for var in platform._all_toolchain_env_vars %} - if [ -n "${{var}}" ]; then - bindir=$(dirname "${{var}}") - . "${{var}}" + if [ -n "${{platform._toolchain_env_var}}" ]; then + bindir=$(dirname "${{platform._toolchain_env_var}}") + . "${{platform._toolchain_env_var}}" fi - {% endfor %} {{emit_commands("sh")}} """, "{{name}}.v": r""" diff --git a/amaranth/vendor/_lattice_ice40.py b/amaranth/vendor/_lattice_ice40.py index a4e1bc2..6f0447a 100644 --- a/amaranth/vendor/_lattice_ice40.py +++ b/amaranth/vendor/_lattice_ice40.py @@ -178,22 +178,16 @@ class LatticeICE40Platform(TemplatedPlatform): #!/bin/sh # {{autogenerated}} set -e{{verbose("x")}} - {% for var in platform._all_toolchain_env_vars %} - if [ -n "${{var}}" ]; then - # LSE environment - 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=${{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=${{var}}/sbt_backend - else - echo "Variable ${{platform._toolchain_env_var}} must be set" >&2; exit 1 - fi - {% endfor %} + # 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 {{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 9d48d87..ef219bd 100644 --- a/amaranth/vendor/_lattice_machxo_2_3l.py +++ b/amaranth/vendor/_lattice_machxo_2_3l.py @@ -52,12 +52,10 @@ class LatticeMachXO2Or3LPlatform(TemplatedPlatform): # {{autogenerated}} set -e{{verbose("x")}} if [ -z "$BASH" ] ; then exec /bin/bash "$0" "$@"; fi - {% for var in platform._all_toolchain_env_vars %} - if [ -n "${{var}}" ]; then - bindir=$(dirname "${{var}}") - . "${{var}}" + if [ -n "${{platform._toolchain_env_var}}" ]; then + bindir=$(dirname "${{platform._toolchain_env_var}}") + . "${{platform._toolchain_env_var}}" fi - {% endfor %} {{emit_commands("sh")}} """, "{{name}}.v": r""" diff --git a/amaranth/vendor/_xilinx.py b/amaranth/vendor/_xilinx.py index d847bed..4338f0e 100644 --- a/amaranth/vendor/_xilinx.py +++ b/amaranth/vendor/_xilinx.py @@ -143,9 +143,7 @@ class XilinxPlatform(TemplatedPlatform): # {{autogenerated}} set -e{{verbose("x")}} if [ -z "$BASH" ] ; then exec /bin/bash "$0" "$@"; fi - {% for var in platform._all_toolchain_env_vars %} - [ -n "${{var}}" ] && . "${{var}}" - {% endfor %} + [ -n "${{platform._toolchain_env_var}}" ] && . "${{platform._toolchain_env_var}}" {{emit_commands("sh")}} """, "{{name}}.v": r""" @@ -261,9 +259,7 @@ class XilinxPlatform(TemplatedPlatform): # {{autogenerated}} set -e{{verbose("x")}} if [ -z "$BASH" ] ; then exec /bin/bash "$0" "$@"; fi - {% for var in platform._all_toolchain_env_vars %} - [ -n "${{var}}" ] && . "${{var}}" - {% endfor %} + [ -n "${{platform._toolchain_env_var}}" ] && . "${{platform._toolchain_env_var}}" {{emit_commands("sh")}} """, "{{name}}.v": r""" @@ -516,9 +512,7 @@ class XilinxPlatform(TemplatedPlatform): "build_{{name}}.sh": r""" # {{autogenerated}} set -e{{verbose("x")}} - {% for var in platform._all_toolchain_env_vars %} - [ -n "${{var}}" ] && . "${{var}}" - {% endfor %} + [ -n "${{platform._toolchain_env_var}}" ] && . "${{platform._toolchain_env_var}}" : ${DB_DIR:=/usr/share/nextpnr/prjxray-db} : ${CHIPDB_DIR:=/usr/share/nextpnr/xilinx-chipdb} {{emit_commands("sh")}} diff --git a/docs/changes.rst b/docs/changes.rst index 9b7d288..08792f8 100644 --- a/docs/changes.rst +++ b/docs/changes.rst @@ -82,6 +82,7 @@ Toolchain changes * Added: ``Simulator.add_testbench``. (`RFC 27`_) * Deprecated: ``Settle`` simulation command. (`RFC 27`_) * Deprecated: ``Simulator.add_process``. (`RFC 27`_) +* Removed: (deprecated in 0.4) use of mixed-case toolchain environment variable names, such as ``NMIGEN_ENV_Diamond`` or ``AMARANTH_ENV_Diamond``; use upper-case environment variable names, such as ``AMARANTH_ENV_DIAMOND``. Platform integration changes