By default, if an operation produces an undefined value (a Jinja2
concept that corresponds to Python's KeyError, AttributeError, etc)
then this value may be printed in a template, which is a nop. This
behavior can hide bugs.
This commit changes the Jinja2 behavior to raise an error instead of
producing an undefined value in all cases. (We produce undefined
values deliberately in a few places. Those are unaffected; it is OK
to use several kinds of undefined values in one Jinja2 environment.)
Fixes #337.
         def render(source, origin, syntax=None):
             try:
                 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, undefined=jinja2.StrictUndefined)
                 compiled.environment.filters["options"] = options
                 compiled.environment.filters["hierarchy"] = hierarchy
             except jinja2.TemplateSyntaxError as e:
 
             --log {{name}}.tim
             {{platform._nextpnr_device_options[platform.device]}}
             --package
-                {{platform.package|lower}}{{platform._nextpnr_package_options[platform.device]}}
+                {{platform.package|lower}}{{platform._nextpnr_package_options[platform.device]|
+                                            default("")}}
             --json {{name}}.json
             --pcf {{name}}.pcf
             --asc {{name}}.asc