build.plat, vendor.*: don't join strings passed as _opts overrides.
Right now an array is expected in any _opts overrides, and if it is actually a string (because it is passed via an environment variable, usually), awkwardness results as each character is joined with ` `. Fixes #130.
This commit is contained in:
parent
b6b9f0fc21
commit
1ee21d2007
|
@ -243,6 +243,12 @@ class TemplatedPlatform(Platform):
|
||||||
else:
|
else:
|
||||||
return jinja2.Undefined(name=var)
|
return jinja2.Undefined(name=var)
|
||||||
|
|
||||||
|
def options(opts):
|
||||||
|
if isinstance(opts, str):
|
||||||
|
return opts
|
||||||
|
else:
|
||||||
|
return " ".join(opts)
|
||||||
|
|
||||||
def verbose(arg):
|
def verbose(arg):
|
||||||
if "NMIGEN_verbose" in os.environ:
|
if "NMIGEN_verbose" in os.environ:
|
||||||
return arg
|
return arg
|
||||||
|
@ -259,6 +265,7 @@ class TemplatedPlatform(Platform):
|
||||||
try:
|
try:
|
||||||
source = textwrap.dedent(source).strip()
|
source = textwrap.dedent(source).strip()
|
||||||
compiled = jinja2.Template(source, trim_blocks=True, lstrip_blocks=True)
|
compiled = jinja2.Template(source, trim_blocks=True, lstrip_blocks=True)
|
||||||
|
compiled.environment.filters["options"] = options
|
||||||
except jinja2.TemplateSyntaxError as e:
|
except jinja2.TemplateSyntaxError as e:
|
||||||
e.args = ("{} (at {}:{})".format(e.message, origin, e.lineno),)
|
e.args = ("{} (at {}:{})".format(e.message, origin, e.lineno),)
|
||||||
raise
|
raise
|
||||||
|
|
10
nmigen/vendor/lattice_ecp5.py
vendored
10
nmigen/vendor/lattice_ecp5.py
vendored
|
@ -68,14 +68,14 @@ class LatticeECP5Platform(TemplatedPlatform):
|
||||||
"{{name}}.ys": r"""
|
"{{name}}.ys": r"""
|
||||||
# {{autogenerated}}
|
# {{autogenerated}}
|
||||||
{% for file in platform.iter_extra_files(".v") -%}
|
{% for file in platform.iter_extra_files(".v") -%}
|
||||||
read_verilog {{get_override("read_opts")|join(" ")}} {{file}}
|
read_verilog {{get_override("read_opts")|options}} {{file}}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% for file in platform.iter_extra_files(".sv") -%}
|
{% for file in platform.iter_extra_files(".sv") -%}
|
||||||
read_verilog -sv {{get_override("read_opts")|join(" ")}} {{file}}
|
read_verilog -sv {{get_override("read_opts")|options}} {{file}}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
read_ilang {{name}}.il
|
read_ilang {{name}}.il
|
||||||
{{get_override("script_after_read")|default("# (script_after_read placeholder)")}}
|
{{get_override("script_after_read")|default("# (script_after_read placeholder)")}}
|
||||||
synth_ecp5 {{get_override("synth_opts")|join(" ")}} -top {{name}}
|
synth_ecp5 {{get_override("synth_opts")|options}} -top {{name}}
|
||||||
{{get_override("script_after_synth")|default("# (script_after_synth placeholder)")}}
|
{{get_override("script_after_synth")|default("# (script_after_synth placeholder)")}}
|
||||||
write_json {{name}}.json
|
write_json {{name}}.json
|
||||||
""",
|
""",
|
||||||
|
@ -97,14 +97,14 @@ class LatticeECP5Platform(TemplatedPlatform):
|
||||||
r"""
|
r"""
|
||||||
{{get_tool("yosys")}}
|
{{get_tool("yosys")}}
|
||||||
{{quiet("-q")}}
|
{{quiet("-q")}}
|
||||||
{{get_override("yosys_opts")|join(" ")}}
|
{{get_override("yosys_opts")|options}}
|
||||||
-l {{name}}.rpt
|
-l {{name}}.rpt
|
||||||
{{name}}.ys
|
{{name}}.ys
|
||||||
""",
|
""",
|
||||||
r"""
|
r"""
|
||||||
{{get_tool("nextpnr-ecp5")}}
|
{{get_tool("nextpnr-ecp5")}}
|
||||||
{{quiet("--quiet")}}
|
{{quiet("--quiet")}}
|
||||||
{{get_override("nextpnr_opts")|join(" ")}}
|
{{get_override("nextpnr_opts")|options}}
|
||||||
--log {{name}}.tim
|
--log {{name}}.tim
|
||||||
{{platform._nextpnr_device_options[platform.device]}}
|
{{platform._nextpnr_device_options[platform.device]}}
|
||||||
--package {{platform._nextpnr_package_options[platform.package]|upper}}
|
--package {{platform._nextpnr_package_options[platform.package]|upper}}
|
||||||
|
|
10
nmigen/vendor/lattice_ice40.py
vendored
10
nmigen/vendor/lattice_ice40.py
vendored
|
@ -60,14 +60,14 @@ class LatticeICE40Platform(TemplatedPlatform):
|
||||||
"{{name}}.ys": r"""
|
"{{name}}.ys": r"""
|
||||||
# {{autogenerated}}
|
# {{autogenerated}}
|
||||||
{% for file in platform.iter_extra_files(".v") -%}
|
{% for file in platform.iter_extra_files(".v") -%}
|
||||||
read_verilog {{get_override("read_opts")|join(" ")}} {{file}}
|
read_verilog {{get_override("read_opts")|options}} {{file}}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% for file in platform.iter_extra_files(".sv") -%}
|
{% for file in platform.iter_extra_files(".sv") -%}
|
||||||
read_verilog -sv {{get_override("read_opts")|join(" ")}} {{file}}
|
read_verilog -sv {{get_override("read_opts")|options}} {{file}}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
read_ilang {{name}}.il
|
read_ilang {{name}}.il
|
||||||
{{get_override("script_after_read")|default("# (script_after_read placeholder)")}}
|
{{get_override("script_after_read")|default("# (script_after_read placeholder)")}}
|
||||||
synth_ice40 {{get_override("synth_opts")|join(" ")}} -top {{name}}
|
synth_ice40 {{get_override("synth_opts")|options}} -top {{name}}
|
||||||
{{get_override("script_after_synth")|default("# (script_after_synth placeholder)")}}
|
{{get_override("script_after_synth")|default("# (script_after_synth placeholder)")}}
|
||||||
write_json {{name}}.json
|
write_json {{name}}.json
|
||||||
""",
|
""",
|
||||||
|
@ -89,14 +89,14 @@ class LatticeICE40Platform(TemplatedPlatform):
|
||||||
r"""
|
r"""
|
||||||
{{get_tool("yosys")}}
|
{{get_tool("yosys")}}
|
||||||
{{quiet("-q")}}
|
{{quiet("-q")}}
|
||||||
{{get_override("yosys_opts")|join(" ")}}
|
{{get_override("yosys_opts")|options}}
|
||||||
-l {{name}}.rpt
|
-l {{name}}.rpt
|
||||||
{{name}}.ys
|
{{name}}.ys
|
||||||
""",
|
""",
|
||||||
r"""
|
r"""
|
||||||
{{get_tool("nextpnr-ice40")}}
|
{{get_tool("nextpnr-ice40")}}
|
||||||
{{quiet("--quiet")}}
|
{{quiet("--quiet")}}
|
||||||
{{get_override("nextpnr_opts")|default(["--placer","heap"])|join(" ")}}
|
{{get_override("nextpnr_opts")|default(["--placer","heap"])|options}}
|
||||||
--log {{name}}.tim
|
--log {{name}}.tim
|
||||||
{{platform._nextpnr_device_options[platform.device]}}
|
{{platform._nextpnr_device_options[platform.device]}}
|
||||||
--package
|
--package
|
||||||
|
|
2
nmigen/vendor/xilinx_7series.py
vendored
2
nmigen/vendor/xilinx_7series.py
vendored
|
@ -109,7 +109,7 @@ class Xilinx7SeriesPlatform(TemplatedPlatform):
|
||||||
r"""
|
r"""
|
||||||
{{get_tool("vivado")}}
|
{{get_tool("vivado")}}
|
||||||
{{verbose("-verbose")}}
|
{{verbose("-verbose")}}
|
||||||
{{get_override("vivado_opts")|join(" ")}}
|
{{get_override("vivado_opts")|options}}
|
||||||
-mode batch
|
-mode batch
|
||||||
-log {{name}}.log
|
-log {{name}}.log
|
||||||
-source {{name}}.tcl
|
-source {{name}}.tcl
|
||||||
|
|
10
nmigen/vendor/xilinx_spartan6.py
vendored
10
nmigen/vendor/xilinx_spartan6.py
vendored
|
@ -93,35 +93,35 @@ class XilinxSpartan6Platform(TemplatedPlatform):
|
||||||
command_templates = [
|
command_templates = [
|
||||||
r"""
|
r"""
|
||||||
{{get_tool("xst")}}
|
{{get_tool("xst")}}
|
||||||
{{get_override("xst_opts")|join(" ")}}
|
{{get_override("xst_opts")|options}}
|
||||||
-ifn {{name}}.xst
|
-ifn {{name}}.xst
|
||||||
""",
|
""",
|
||||||
r"""
|
r"""
|
||||||
{{get_tool("ngdbuild")}}
|
{{get_tool("ngdbuild")}}
|
||||||
{{quiet("-quiet")}}
|
{{quiet("-quiet")}}
|
||||||
{{verbose("-verbose")}}
|
{{verbose("-verbose")}}
|
||||||
{{get_override("ngdbuild_opts")|join(" ")}}
|
{{get_override("ngdbuild_opts")|options}}
|
||||||
-uc {{name}}.ucf
|
-uc {{name}}.ucf
|
||||||
{{name}}.ngc
|
{{name}}.ngc
|
||||||
""",
|
""",
|
||||||
r"""
|
r"""
|
||||||
{{get_tool("map")}}
|
{{get_tool("map")}}
|
||||||
{{verbose("-detail")}}
|
{{verbose("-detail")}}
|
||||||
{{get_override("map_opts")|default(["-w"])|join(" ")}}
|
{{get_override("map_opts")|default(["-w"])|options}}
|
||||||
-o {{name}}_map.ncd
|
-o {{name}}_map.ncd
|
||||||
{{name}}.ngd
|
{{name}}.ngd
|
||||||
{{name}}.pcf
|
{{name}}.pcf
|
||||||
""",
|
""",
|
||||||
r"""
|
r"""
|
||||||
{{get_tool("par")}}
|
{{get_tool("par")}}
|
||||||
{{get_override("par_opts")|default(["-w"])|join(" ")}}
|
{{get_override("par_opts")|default(["-w"])|options}}
|
||||||
{{name}}_map.ncd
|
{{name}}_map.ncd
|
||||||
{{name}}_par.ncd
|
{{name}}_par.ncd
|
||||||
{{name}}.pcf
|
{{name}}.pcf
|
||||||
""",
|
""",
|
||||||
r"""
|
r"""
|
||||||
{{get_tool("bitgen")}}
|
{{get_tool("bitgen")}}
|
||||||
{{get_override("bitgen_opts")|default(["-w"])|join(" ")}}
|
{{get_override("bitgen_opts")|default(["-w"])|options}}
|
||||||
{{name}}_par.ncd
|
{{name}}_par.ncd
|
||||||
{{name}}.bit
|
{{name}}.bit
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in a new issue