From 95893a7ae13695c310b8c7df23149ccaa89fe5a1 Mon Sep 17 00:00:00 2001 From: whitequark Date: Sun, 4 Aug 2019 13:18:29 +0000 Subject: [PATCH] build.plat: allow selecting a specific UNIX shell interpreter. Mostly because vendor tools have bashisms. --- nmigen/build/plat.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/nmigen/build/plat.py b/nmigen/build/plat.py index dc917e7..94fd79f 100644 --- a/nmigen/build/plat.py +++ b/nmigen/build/plat.py @@ -221,11 +221,13 @@ class TemplatedPlatform(Platform): toolchain = abstractproperty() file_templates = abstractproperty() command_templates = abstractproperty() + unix_interpreter = "sh" build_script_templates = { "build_{{name}}.sh": """ # {{autogenerated}} set -e{{verbose("x")}} + {{emit_unix_interpreter()}} [ -n "$NMIGEN_{{platform.toolchain}}_env" ] && . "$NMIGEN_{{platform.toolchain}}_env" {{emit_commands("sh")}} """, @@ -242,6 +244,13 @@ class TemplatedPlatform(Platform): # and to incorporate the nMigen version into generated code. autogenerated = "Automatically generated by nMigen {}. Do not edit.".format(__version__) + def emit_unix_interpreter(): + if self.unix_interpreter == "sh": + return "# runs on any POSIX sh" + if self.unix_interpreter == "bash": + return """if [ -z "$BASH" ] ; then exec /bin/bash "$0" "$@"; fi""" + assert False + def emit_design(backend): return {"rtlil": rtlil, "verilog": verilog}[backend].convert(fragment, name=name, ports=list(self.iter_ports()), missing_domain=lambda name: None) @@ -308,6 +317,7 @@ class TemplatedPlatform(Platform): return compiled.render({ "name": name, "platform": self, + "emit_unix_interpreter": emit_unix_interpreter, "emit_design": emit_design, "emit_commands": emit_commands, "get_tool": get_tool, -- 2.30.2