| # Copyright 2020 The Pigweed Authors | 
 | # | 
 | # Licensed under the Apache License, Version 2.0 (the "License"); you may not | 
 | # use this file except in compliance with the License. You may obtain a copy of | 
 | # the License at | 
 | # | 
 | #     https://www.apache.org/licenses/LICENSE-2.0 | 
 | # | 
 | # Unless required by applicable law or agreed to in writing, software | 
 | # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT | 
 | # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the | 
 | # License for the specific language governing permissions and limitations under | 
 | # the License. | 
 |  | 
 | import("//build_overrides/pigweed.gni") | 
 |  | 
 | import("$dir_pw_arduino_build/arduino.gni") | 
 | import("$dir_pw_build/python.gni") | 
 | import("$dir_pw_build/python_dist.gni") | 
 | import("$dir_pw_build/python_venv.gni") | 
 | import("$dir_pw_tokenizer/database.gni") | 
 | import("$dir_pw_unit_test/test.gni") | 
 |  | 
 | # NOTE: All the `deps` listed in `//BUILD.gn` must either be instantiated with a | 
 | # toolchain, e.g. `":my_host_target(//path/to/host:toolchain)"`, or listed | 
 | # within an `if (current_toolchain != default_toolchain)` statement. | 
 | # It also prevents the default toolchain from parsing any unnecessary BUILD.gn | 
 | # files. | 
 |  | 
 | # Lists all the targets build by default with e.g. `ninja -C out`. | 
 | group("default") { | 
 |   deps = [ | 
 |     ":arduino", | 
 |     ":docs", | 
 |     ":examples", | 
 |     ":host", | 
 |     ":python.lint", | 
 |     ":python.tests", | 
 |   ] | 
 | } | 
 |  | 
 | group("docs") { | 
 |   deps = [ "//docs($dir_pigweed/targets/docs)" ] | 
 | } | 
 |  | 
 | # Group all targets that run on host only, e.g. tests, utils. | 
 | group("host") { | 
 |   deps = [ ":run_tests(//targets/host:host_debug_tests)" ] | 
 | } | 
 |  | 
 | # Arduino specific targets. | 
 | group("arduino") { | 
 |   # If the 'pw_arduino_build_CORE_PATH' build arg is defined assume an arduino | 
 |   # core is available for building. | 
 |   # | 
 |   # For example: | 
 |   #   pw_arduino_build_CORE_PATH="//third_party/pigweed/third_party/arduino/cores" | 
 |  | 
 |   if (pw_arduino_build_CORE_PATH != "") { | 
 |     deps = [ ":run_tests(//targets/arduino:arduino_debug_tests)" ] | 
 |   } | 
 | } | 
 |  | 
 | # stm32f429i_disc1 specific targets | 
 | group("stm32f429i_disc1") { | 
 |   _default_toolchain = | 
 |       "//targets/stm32f429i_disc1_stm32cube:stm32f429i_disc1_debug" | 
 |   _testing_toolchain = "${_default_toolchain}_tests" | 
 |   deps = [ ":run_tests(${_testing_toolchain})" ] | 
 | } | 
 |  | 
 | # In-tree Python packages | 
 | _sample_project_python_packages = [ "//tools:tools" ] | 
 |  | 
 | # This group contains all the python packages that should be tested and linted. | 
 | pw_python_group("python") { | 
 |   python_deps = _sample_project_python_packages | 
 | } | 
 |  | 
 | # Pigweed Python packages to include | 
 | _pigweed_python_packages = [ | 
 |   "$dir_pw_env_setup:core_pigweed_python_packages", | 
 |   "$dir_pigweed/targets/lm3s6965evb_qemu/py", | 
 |   "$dir_pigweed/targets/stm32f429i_disc1/py", | 
 | ] | 
 |  | 
 | _all_python_packages = | 
 |     _sample_project_python_packages + _pigweed_python_packages | 
 |  | 
 | # The default venv for Python actions in GN | 
 | # Set this gn arg in a declare_args block in this file 'BUILD.gn' or in '.gn' to | 
 | # use this venv. | 
 | # | 
 | #   pw_build_PYTHON_BUILD_VENV = "//:sample_project_build_venv" | 
 | # | 
 | pw_python_venv("sample_project_build_venv") { | 
 |   path = "$root_build_dir/python-venv" | 
 |   constraints = pw_build_PIP_CONSTRAINTS | 
 |   requirements = pw_build_PIP_REQUIREMENTS | 
 |  | 
 |   # Ensure all third party Python dependencies are installed into this venv. | 
 |   # This works by checking the setup.cfg files for all packages listed here and | 
 |   # installing the packages listed in the [options].install_requires field. | 
 |   source_packages = _all_python_packages | 
 | } | 
 |  | 
 | # This template collects all python packages and their dependencies into a | 
 | # single super Python package for installation into the bootstrapped virtual | 
 | # environment. | 
 | pw_python_distribution("sample_project_python_distribution") { | 
 |   packages = _all_python_packages | 
 |   generate_setup_cfg = { | 
 |     name = "sample-project-tools" | 
 |     version = "0.0.1" | 
 |     append_date_to_version = true | 
 |     include_default_pyproject_file = true | 
 |   } | 
 | } | 
 |  | 
 | # Install the sample-project-tools super Python package into the bootstrapped | 
 | # Python venv. | 
 | pw_python_pip_install("pip_install_sample_project_tools") { | 
 |   packages = [ ":sample_project_python_distribution" ] | 
 | } | 
 |  | 
 | group("examples") { | 
 |   deps = [] | 
 |  | 
 |   # STMicroelectronics STM32F429I-DISC1 examples. | 
 |   deps += [ | 
 |     "//examples/01_blinky:blinky(//targets/stm32f429i_disc1_stm32cube:stm32f429i_disc1_stm32cube.size_optimized)", | 
 |     "//examples/02_unit_testing:test_runner_app(//targets/stm32f429i_disc1_stm32cube:stm32f429i_disc1_stm32cube.size_optimized)", | 
 |     "//examples/03_rpc:rpc_main(//targets/stm32f429i_disc1_stm32cube:stm32f429i_disc1_stm32cube.size_optimized)", | 
 |   ] | 
 |  | 
 |   # TODO: https://pwbug.dev/325649415 - Replace broken bare metal rp2040 | 
 |   # examples with pw_system based targets. | 
 |   # | 
 |   # deps += [ | 
 |   #  "//examples/01_blinky:blinky(//targets/rp2040:rp2040.size_optimized)", | 
 |   #  "//examples/02_unit_testing:test_runner_app(//targets/rp2040:rp2040.size_optimized)", | 
 |   # ] | 
 |  | 
 |   # Host examples. | 
 |   deps += [ | 
 |     "//examples/01_blinky:blinky(//targets/host:host_device_simulator.speed_optimized)", | 
 |     "//examples/02_unit_testing:test_runner_app(//targets/host:host_device_simulator.speed_optimized)", | 
 |     "//examples/03_rpc:rpc_main(//targets/host:host_device_simulator.speed_optimized)", | 
 |   ] | 
 | } | 
 |  | 
 | # TODO: b/301306292 - Removing this causes a duplicate toolchain to be | 
 | # generated if any tests are present in the test group. Figure out why, and set | 
 | # up a more scalable solution. | 
 | if (current_toolchain != default_toolchain) { | 
 |   # All the tests that should run as part of the build. | 
 |   pw_test_group("tests") { | 
 |     group_deps = [ | 
 |       # Uncomment this to automatically run the example unit test. | 
 |       # "//examples/02_unit_testing:tests", | 
 |     ] | 
 |   } | 
 |  | 
 |   group("run_tests") { | 
 |     if (pw_unit_test_AUTOMATIC_RUNNER == "") { | 
 |       # Without a test runner defined, build the tests but don't run them. | 
 |       deps = [ ":tests" ] | 
 |     } else { | 
 |       # With a test runner, build and run tests. | 
 |       deps = [ ":tests.run" ] | 
 |     } | 
 |   } | 
 | } |