build.plat,vendor: fix toolchain environment variable check.

The bug was introduced in commit 15b6068c. A changelog entry was also
missing.

Fixes #1089.
This commit is contained in:
Catherine 2024-02-08 05:39:58 +00:00
parent d8f70be4d9
commit 78b90fbafa
7 changed files with 27 additions and 49 deletions

View file

@ -89,8 +89,7 @@ class Platform(ResourceManager, metaclass=ABCMeta):
# may fail. # may fail.
# This is OK because even if `require_tool` succeeds, the toolchain might be broken anyway. # This is OK because even if `require_tool` succeeds, the toolchain might be broken anyway.
# The check only serves to catch common errors earlier. # 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 self._toolchain_env_var not in os.environ:
if do_build and not got_env_var:
for tool in self.required_tools: for tool in self.required_tools:
require_tool(tool) require_tool(tool)
@ -105,7 +104,7 @@ class Platform(ResourceManager, metaclass=ABCMeta):
self.toolchain_program(products, name, **(program_opts or {})) self.toolchain_program(products, name, **(program_opts or {}))
def has_required_tools(self): 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 True
return all(has_tool(name) for name in self.required_tools) return all(has_tool(name) for name in self.required_tools)
@ -271,17 +270,13 @@ class TemplatedPlatform(Platform):
#!/bin/sh #!/bin/sh
# {{autogenerated}} # {{autogenerated}}
set -e{{verbose("x")}} set -e{{verbose("x")}}
{% for var in platform._all_toolchain_env_vars %} [ -n "${{platform._toolchain_env_var}}" ] && . "${{platform._toolchain_env_var}}"
[ -n "${{var}}" ] && . "${{var}}"
{% endfor %}
{{emit_commands("sh")}} {{emit_commands("sh")}}
""", """,
"build_{{name}}.bat": """ "build_{{name}}.bat": """
@rem {{autogenerated}} @rem {{autogenerated}}
{{quiet("@echo off")}} {{quiet("@echo off")}}
{% for var in platform._all_toolchain_env_vars %} if defined {{platform._toolchain_env_var}} call %{{platform._toolchain_env_var}}%
if defined {{var}} call %{{var}}%
{% endfor %}
{{emit_commands("bat")}} {{emit_commands("bat")}}
""", """,
} }

View file

@ -82,13 +82,11 @@ class IntelPlatform(TemplatedPlatform):
"build_{{name}}.sh": r""" "build_{{name}}.sh": r"""
#!/bin/sh #!/bin/sh
# {{autogenerated}} # {{autogenerated}}
{% for var in platform._all_toolchain_env_vars %} if [ -n "${{platform._toolchain_env_var}}" ]; then
if [ -n "${{var}}" ]; then QUARTUS_ROOTDIR=$(dirname $(dirname "${{platform._toolchain_env_var}}"))
QUARTUS_ROOTDIR=$(dirname $(dirname "${{var}}"))
# Quartus' qenv.sh does not work with `set -e`. # Quartus' qenv.sh does not work with `set -e`.
. "${{var}}" . "${{platform._toolchain_env_var}}"
fi fi
{% endfor %}
set -e{{verbose("x")}} set -e{{verbose("x")}}
{{emit_commands("sh")}} {{emit_commands("sh")}}
""", """,

View file

@ -186,12 +186,10 @@ class LatticeECP5Platform(TemplatedPlatform):
# {{autogenerated}} # {{autogenerated}}
set -e{{verbose("x")}} set -e{{verbose("x")}}
if [ -z "$BASH" ] ; then exec /bin/bash "$0" "$@"; fi if [ -z "$BASH" ] ; then exec /bin/bash "$0" "$@"; fi
{% for var in platform._all_toolchain_env_vars %} if [ -n "${{platform._toolchain_env_var}}" ]; then
if [ -n "${{var}}" ]; then bindir=$(dirname "${{platform._toolchain_env_var}}")
bindir=$(dirname "${{var}}") . "${{platform._toolchain_env_var}}"
. "${{var}}"
fi fi
{% endfor %}
{{emit_commands("sh")}} {{emit_commands("sh")}}
""", """,
"{{name}}.v": r""" "{{name}}.v": r"""

View file

@ -178,22 +178,16 @@ class LatticeICE40Platform(TemplatedPlatform):
#!/bin/sh #!/bin/sh
# {{autogenerated}} # {{autogenerated}}
set -e{{verbose("x")}} set -e{{verbose("x")}}
{% for var in platform._all_toolchain_env_vars %} # LSE environment
if [ -n "${{var}}" ]; then export LD_LIBRARY_PATH=${{platform._toolchain_env_var}}/LSE/bin/lin64:$LD_LIBRARY_PATH
# LSE environment export PATH=${{platform._toolchain_env_var}}/LSE/bin/lin64:$PATH
export LD_LIBRARY_PATH=${{var}}/LSE/bin/lin64:$LD_LIBRARY_PATH export FOUNDRY=${{platform._toolchain_env_var}}/LSE
export PATH=${{var}}/LSE/bin/lin64:$PATH # Synplify environment
export FOUNDRY=${{var}}/LSE export LD_LIBRARY_PATH=${{platform._toolchain_env_var}}/sbt_backend/bin/linux/opt/synpwrap:$LD_LIBRARY_PATH
# Synplify environment export PATH=${{platform._toolchain_env_var}}/sbt_backend/bin/linux/opt/synpwrap:$PATH
export LD_LIBRARY_PATH=${{var}}/sbt_backend/bin/linux/opt/synpwrap:$LD_LIBRARY_PATH export SYNPLIFY_PATH=${{platform._toolchain_env_var}}/synpbase
export PATH=${{var}}/sbt_backend/bin/linux/opt/synpwrap:$PATH # Common environment
export SYNPLIFY_PATH=${{var}}/synpbase export SBT_DIR=${{platform._toolchain_env_var}}/sbt_backend
# Common environment
export SBT_DIR=${{var}}/sbt_backend
else
echo "Variable ${{platform._toolchain_env_var}} must be set" >&2; exit 1
fi
{% endfor %}
{{emit_commands("sh")}} {{emit_commands("sh")}}
""", """,
"{{name}}.v": r""" "{{name}}.v": r"""

View file

@ -52,12 +52,10 @@ class LatticeMachXO2Or3LPlatform(TemplatedPlatform):
# {{autogenerated}} # {{autogenerated}}
set -e{{verbose("x")}} set -e{{verbose("x")}}
if [ -z "$BASH" ] ; then exec /bin/bash "$0" "$@"; fi if [ -z "$BASH" ] ; then exec /bin/bash "$0" "$@"; fi
{% for var in platform._all_toolchain_env_vars %} if [ -n "${{platform._toolchain_env_var}}" ]; then
if [ -n "${{var}}" ]; then bindir=$(dirname "${{platform._toolchain_env_var}}")
bindir=$(dirname "${{var}}") . "${{platform._toolchain_env_var}}"
. "${{var}}"
fi fi
{% endfor %}
{{emit_commands("sh")}} {{emit_commands("sh")}}
""", """,
"{{name}}.v": r""" "{{name}}.v": r"""

View file

@ -143,9 +143,7 @@ class XilinxPlatform(TemplatedPlatform):
# {{autogenerated}} # {{autogenerated}}
set -e{{verbose("x")}} set -e{{verbose("x")}}
if [ -z "$BASH" ] ; then exec /bin/bash "$0" "$@"; fi if [ -z "$BASH" ] ; then exec /bin/bash "$0" "$@"; fi
{% for var in platform._all_toolchain_env_vars %} [ -n "${{platform._toolchain_env_var}}" ] && . "${{platform._toolchain_env_var}}"
[ -n "${{var}}" ] && . "${{var}}"
{% endfor %}
{{emit_commands("sh")}} {{emit_commands("sh")}}
""", """,
"{{name}}.v": r""" "{{name}}.v": r"""
@ -261,9 +259,7 @@ class XilinxPlatform(TemplatedPlatform):
# {{autogenerated}} # {{autogenerated}}
set -e{{verbose("x")}} set -e{{verbose("x")}}
if [ -z "$BASH" ] ; then exec /bin/bash "$0" "$@"; fi if [ -z "$BASH" ] ; then exec /bin/bash "$0" "$@"; fi
{% for var in platform._all_toolchain_env_vars %} [ -n "${{platform._toolchain_env_var}}" ] && . "${{platform._toolchain_env_var}}"
[ -n "${{var}}" ] && . "${{var}}"
{% endfor %}
{{emit_commands("sh")}} {{emit_commands("sh")}}
""", """,
"{{name}}.v": r""" "{{name}}.v": r"""
@ -516,9 +512,7 @@ class XilinxPlatform(TemplatedPlatform):
"build_{{name}}.sh": r""" "build_{{name}}.sh": r"""
# {{autogenerated}} # {{autogenerated}}
set -e{{verbose("x")}} set -e{{verbose("x")}}
{% for var in platform._all_toolchain_env_vars %} [ -n "${{platform._toolchain_env_var}}" ] && . "${{platform._toolchain_env_var}}"
[ -n "${{var}}" ] && . "${{var}}"
{% endfor %}
: ${DB_DIR:=/usr/share/nextpnr/prjxray-db} : ${DB_DIR:=/usr/share/nextpnr/prjxray-db}
: ${CHIPDB_DIR:=/usr/share/nextpnr/xilinx-chipdb} : ${CHIPDB_DIR:=/usr/share/nextpnr/xilinx-chipdb}
{{emit_commands("sh")}} {{emit_commands("sh")}}

View file

@ -82,6 +82,7 @@ Toolchain changes
* Added: ``Simulator.add_testbench``. (`RFC 27`_) * Added: ``Simulator.add_testbench``. (`RFC 27`_)
* Deprecated: ``Settle`` simulation command. (`RFC 27`_) * Deprecated: ``Settle`` simulation command. (`RFC 27`_)
* Deprecated: ``Simulator.add_process``. (`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 Platform integration changes