blob: 337294c77bb5151c50adf54efd65ed56a946515b [file] [log] [blame]
Anthony DiGirolamoe9a3ce62023-10-20 21:06:44 +00001# Copyright 2023 The Pigweed Authors
2#
3# Licensed under the Apache License, Version 2.0 (the "License"); you may not
4# use this file except in compliance with the License. You may obtain a copy of
5# the License at
6#
7# https://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12# License for the specific language governing permissions and limitations under
13# the License.
14
15import("//build_overrides/pigweed.gni")
16
17import("$dir_pw_build/python.gni")
18import("$dir_pw_build/python_dist.gni")
19import("$dir_pw_build/python_venv.gni")
20import("$dir_pw_unit_test/test.gni")
21
22# All the targets build by default with e.g. `ninja -C out`.
23group("default") {
24 deps = [
25 ":applications",
26 ":gonk_python.lint",
27 ":gonk_python.tests",
28 ":python.install",
Anthony DiGirolamo63be5652023-12-18 22:33:30 +000029
30 # TODO(tonymd): Enable the verilog build by default when the following tools
31 # are available in CIPD: yosys, nextpnr-ice40, icetime, icepack
32 # ":fpga",
Anthony DiGirolamoe9a3ce62023-10-20 21:06:44 +000033 ]
34}
35
36group("applications") {
37 deps = [
38 "//applications/system_example(//targets/host:host_device_simulator.speed_optimized)",
Anthony DiGirolamof9ab1c42023-10-20 21:24:41 +000039 "//applications/system_example(//targets/stm32f769i_disc0_stm32cube:stm32f769i_disc0_stm32cube.size_optimized)",
Anthony DiGirolamo76488cf2023-10-30 18:57:46 +000040
41 # Arduino targets
Anthony DiGirolamo87acfa92024-08-02 20:32:54 +000042 "//applications/gonk(//targets/stm32f730r8tx_arduino:arduino_size_optimized)",
Anthony DiGirolamo8e681ef2023-12-18 22:13:33 +000043 "//applications/spi_flash_test(//targets/stm32f730r8tx_arduino:arduino_size_optimized)",
Anthony DiGirolamoe9a3ce62023-10-20 21:06:44 +000044 ]
45}
46
Anthony DiGirolamocbdd6102024-02-08 15:43:10 +000047# This group requires the following tools for the FPGA build:
48# yosys, nextpnr-ice40, icepack, icetime
Anthony DiGirolamo63be5652023-12-18 22:33:30 +000049group("fpga") {
Anthony DiGirolamo7d7ff1a2024-03-05 22:30:07 +000050 deps = [ "//fpga" ]
Anthony DiGirolamo63be5652023-12-18 22:33:30 +000051}
52
Anthony DiGirolamoe9a3ce62023-10-20 21:06:44 +000053# Python Targets
54_gonk_python_packages = [ "//tools" ]
Anthony DiGirolamo1848b892024-02-01 16:36:41 +000055_gonk_proto_packages = [ "//lib/adc:protos.python" ]
56
Anthony DiGirolamoe9a3ce62023-10-20 21:06:44 +000057# Pigweed Python packages to include
58_pigweed_python_packages = [ "$dir_pw_env_setup:core_pigweed_python_packages" ]
59
Anthony DiGirolamocbdd6102024-02-08 15:43:10 +000060_all_python_packages =
61 _gonk_python_packages + _gonk_proto_packages + _pigweed_python_packages
Anthony DiGirolamoe9a3ce62023-10-20 21:06:44 +000062
Anthony DiGirolamocbdd6102024-02-08 15:43:10 +000063# Group that defines all Python test and lint targets.
Anthony DiGirolamoe9a3ce62023-10-20 21:06:44 +000064pw_python_group("gonk_python") {
65 python_deps = _gonk_python_packages
66}
67
Anthony DiGirolamocbdd6102024-02-08 15:43:10 +000068# The python virtualenv used for testing and linting.
Anthony DiGirolamoe9a3ce62023-10-20 21:06:44 +000069pw_python_venv("gonk_build_venv") {
70 path = "$root_build_dir/python-venv"
71 source_packages = _all_python_packages
72}
73
Anthony DiGirolamocbdd6102024-02-08 15:43:10 +000074# Bundle of all Gonk Python packages and their Pigweed dependencies
Anthony DiGirolamo7d7ff1a2024-03-05 22:30:07 +000075pw_python_distribution("gonk_python_tools") {
Anthony DiGirolamocbdd6102024-02-08 15:43:10 +000076 packages = _gonk_python_packages + _gonk_proto_packages
Anthony DiGirolamoe9a3ce62023-10-20 21:06:44 +000077 generate_setup_cfg = {
78 name = "gonk-dist"
79 version = "0.0.1"
80 append_date_to_version = true
81 include_default_pyproject_file = true
82 }
83}
84
Anthony DiGirolamocbdd6102024-02-08 15:43:10 +000085# Pip install target for Gonk Python tools and protos.
Anthony DiGirolamo7d7ff1a2024-03-05 22:30:07 +000086pw_python_pip_install("pip_install_gonk_tools") {
87 packages = [ ":gonk_python_tools" ]
Anthony DiGirolamoe9a3ce62023-10-20 21:06:44 +000088}
89
Anthony DiGirolamo7d7ff1a2024-03-05 22:30:07 +000090# Python data package for Gonk firmware build.
91pw_python_distribution("gonk_firmware") {
Anthony DiGirolamocbdd6102024-02-08 15:43:10 +000092 packages = []
93 generate_setup_cfg = {
Anthony DiGirolamo7d7ff1a2024-03-05 22:30:07 +000094 name = "gonk-firmware"
Anthony DiGirolamocbdd6102024-02-08 15:43:10 +000095 version = "0.0.1"
96 append_date_to_version = true
97 include_default_pyproject_file = true
98 include_extra_files_in_package_data = true
99 auto_create_package_data_init_py_files = true
100 }
101
Anthony DiGirolamo7d7ff1a2024-03-05 22:30:07 +0000102 public_deps = [
Anthony DiGirolamo87acfa92024-08-02 20:32:54 +0000103 "//applications/gonk:gonk(//targets/stm32f730r8tx_arduino:arduino_size_optimized)",
104 "//applications/gonk:gonk.elf(//targets/stm32f730r8tx_arduino:arduino_size_optimized)",
Anthony DiGirolamo7d7ff1a2024-03-05 22:30:07 +0000105 ]
106
Anthony DiGirolamo87acfa92024-08-02 20:32:54 +0000107 _gonk_bin =
108 "$root_build_dir/arduino_size_optimized/obj/applications/gonk/gonk.bin"
109 _gonk_elf = "$root_build_dir/arduino_size_optimized/obj/applications/gonk/bin/gonk.elf"
Anthony DiGirolamo7d7ff1a2024-03-05 22:30:07 +0000110 extra_files = [
111 "$_gonk_bin > gonk_firmware/gonk.bin",
112 "$_gonk_elf > gonk_firmware/gonk.elf",
113 ]
Anthony DiGirolamocbdd6102024-02-08 15:43:10 +0000114
115 # The FPGA image is only built on Linux so far.
116 if (host_os == "linux") {
117 _fpga_artifacts_dir = "$root_build_dir/obj/fpga/toplevel"
118
119 public_deps += [ "//fpga:toplevel._bin($default_toolchain)" ]
Anthony DiGirolamo7d7ff1a2024-03-05 22:30:07 +0000120 extra_files +=
121 [ "$_fpga_artifacts_dir/toplevel.bin > gonk_firmware/fpga.bin" ]
Anthony DiGirolamocbdd6102024-02-08 15:43:10 +0000122 }
Anthony DiGirolamoe9a3ce62023-10-20 21:06:44 +0000123}
124
Anthony DiGirolamo7d7ff1a2024-03-05 22:30:07 +0000125# Pip install target for the firmware datapackage only. This is separate since
126# the FPGA toolchain is an optional build component.
127pw_python_pip_install("pip_install_gonk_firmware") {
128 packages = [ ":gonk_firmware" ]
Anthony DiGirolamocbdd6102024-02-08 15:43:10 +0000129}
130
131# Python group used durring bootstrap.
Anthony DiGirolamoe9a3ce62023-10-20 21:06:44 +0000132pw_python_group("python") {
133 python_deps = [
Anthony DiGirolamo7d7ff1a2024-03-05 22:30:07 +0000134 ":pip_install_gonk_tools",
Anthony DiGirolamocbdd6102024-02-08 15:43:10 +0000135 "$dir_pw_env_setup:pip_install_pigweed_package",
Anthony DiGirolamoe9a3ce62023-10-20 21:06:44 +0000136 ]
137}
Anthony DiGirolamo7d7ff1a2024-03-05 22:30:07 +0000138
139_gonk_bundle_packages =
140 _gonk_python_packages + _gonk_proto_packages + [ ":gonk_firmware" ]
141
142pw_python_venv("gonk_bundle_venv") {
143 path = "$root_build_dir/gonk-bundle-venv"
144 source_packages = _gonk_bundle_packages
145}
146
147pw_python_zip_with_setup("gonk_bundle") {
148 # Include vendored wheels for this virtualenv.
149 venv = ":gonk_bundle_venv"
150
151 # Gonk packages to include
152 packages = [
153 ":gonk_firmware",
154 ":gonk_python_tools",
155 ]
Anthony DiGirolamoa5970582024-05-07 21:19:13 +0000156
157 # Add the tools README to the zipfile.
Anthony DiGirolamo5625ff02024-10-14 20:46:03 +0000158 inputs = [ "//tools/README.md > /gonk_bundle/README.md" ]
Anthony DiGirolamo7d7ff1a2024-03-05 22:30:07 +0000159}