tools: Update pw build script
- Enable the fpga build target if icestorm tools are available.
- Add log file output for nextpnr and yosys.
- Remove double .elf.elf extension for stm32f730r8tx_arduino
Change-Id: Ie54c089e94be99cec91b661a11d2eb3c49c9e628
Reviewed-on: https://pigweed-review.googlesource.com/c/gonk/+/185550
Reviewed-by: Armando Montanez <amontanez@google.com>
Commit-Queue: Anthony DiGirolamo <tonymd@google.com>
diff --git a/README.md b/README.md
index 3ba5179..b3d5d7c 100644
--- a/README.md
+++ b/README.md
@@ -52,11 +52,23 @@
```sh
pw build
-ninja -C out/gn fpga
```
The bitstream files will be written with the `.bin` extenson under
-`./out/gn/obj/fpga/*/*.bin`.
+`./out/gn/obj/fpga/*/*.bin` along with log output files.
+
+For example:
+
+```sh
+$ ls ./out/gn/obj/fpga/toplevel/
+nextpnr-log.txt
+toplevel.asc
+toplevel.bin
+toplevel.json
+toplevel_timing_report.json
+toplevel_timing_report.txt
+yosys-log.txt
+```
## Gonk `fpga_config` Example
diff --git a/fpga/fpga_image.gni b/fpga/fpga_image.gni
index 6cbf00d..fd8cee0 100644
--- a/fpga/fpga_image.gni
+++ b/fpga/fpga_image.gni
@@ -54,6 +54,9 @@
_json_file = "$target_out_dir/$target_name/${_image_name}.json"
_asc_file = "$target_out_dir/$target_name/${_image_name}.asc"
_bin_file = "$target_out_dir/$target_name/${_image_name}.bin"
+
+ _yosys_log = "$target_out_dir/$target_name/yosys-log.txt"
+ _nextpnr_log = "$target_out_dir/$target_name/nextpnr-log.txt"
_timing_report_text =
"$target_out_dir/$target_name/${_image_name}_timing_report.txt"
_timing_report_json =
@@ -69,10 +72,15 @@
pw_exec("${target_name}._json") {
inputs = _verilog_files
- outputs = [ _json_file ]
+ outputs = [
+ _json_file,
+ _yosys_log,
+ ]
program = "yosys"
args = [
+ "-l",
+ rebase_path(_yosys_log, root_build_dir),
"-q",
"-p",
"synth_ice40 -json " + rebase_path(_json_file, root_build_dir),
@@ -82,12 +90,17 @@
pw_exec("${target_name}._asc") {
inputs = [ _json_file ]
- outputs = [ _asc_file ]
+ outputs = [
+ _asc_file,
+ _nextpnr_log,
+ ]
deps = [ ":${invoker.target_name}._json" ]
program = "nextpnr-ice40"
args = [
+ "-l",
+ rebase_path(_nextpnr_log, root_build_dir),
"--freq",
"75",
"--hx8k",
diff --git a/targets/stm32f730r8tx_arduino/target_toolchains.gni b/targets/stm32f730r8tx_arduino/target_toolchains.gni
index 57528f2..0522cd0 100644
--- a/targets/stm32f730r8tx_arduino/target_toolchains.gni
+++ b/targets/stm32f730r8tx_arduino/target_toolchains.gni
@@ -63,7 +63,6 @@
}
_toolchain_properties = {
- final_binary_extension = ".elf"
}
_target_default_configs = pigweed_default_configs + [
diff --git a/tools/gonk_tools/build_project.py b/tools/gonk_tools/build_project.py
index 3447962..1b1c874 100644
--- a/tools/gonk_tools/build_project.py
+++ b/tools/gonk_tools/build_project.py
@@ -15,6 +15,7 @@
import logging
from pathlib import Path
+import shutil
import sys
from pw_build.build_recipe import (
@@ -29,6 +30,9 @@
_LOG = logging.getLogger('pw_build')
+_ENABLE_FPGA_BUILD = (shutil.which('nextpnr-ice40') and shutil.which('yosys')
+ and shutil.which('icepack') and shutil.which('icetime'))
+
def build_project(force_pw_watch: bool = False) -> int:
"""Use pw_build to compile Gonk.
@@ -59,20 +63,30 @@
default_gn_gen_command.append(gn_args(**default_gn_args))
+ default_targets = ['default']
+ if _ENABLE_FPGA_BUILD:
+ default_targets += ['fpga']
+ else:
+ _LOG.warning(
+ 'FPGA build disabled. The following tools were not found: '
+ 'icepack, icetime, nextpnr-ice40, yosys.')
+
+ default_build_steps = [
+ BuildCommand(
+ run_if=should_gn_gen_with_args(default_gn_args),
+ command=default_gn_gen_command,
+ ),
+ BuildCommand(
+ build_system_command='ninja',
+ targets=default_targets,
+ ),
+ ]
+
build_recipes = [
BuildRecipe(
build_dir=Path('out/gn'),
title='default',
- steps=[
- BuildCommand(
- run_if=should_gn_gen_with_args(default_gn_args),
- command=default_gn_gen_command,
- ),
- BuildCommand(
- build_system_command='ninja',
- targets=['default'],
- ),
- ],
+ steps=default_build_steps,
),
]