| # Copyright 2022 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/pi_pico.gni") |
| 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_third_party/mcuxpresso/mcuxpresso.gni") |
| import("$dir_pw_third_party/stm32cube/stm32cube.gni") |
| import("$dir_pw_tokenizer/database.gni") |
| import("$dir_pw_unit_test/test.gni") |
| |
| # Lists all the targets build by default with e.g. `ninja -C out`. |
| group("default") { |
| deps = [ |
| ":applications", |
| ":arduino", |
| ":host", |
| ":host_opt", |
| ":mimxrt595_evk", |
| ":pico", |
| ":pw_experimental_python.lint", |
| ":pw_experimental_python.tests", |
| ":python.install", |
| ] |
| } |
| |
| # Group all targets that run on host only, e.g. tests, utils. |
| group("host") { |
| deps = [ |
| ":host_tests(//targets/host:host_debug_tests)", |
| "$dir_pw_color:tests.run(//targets/host:host_debug_tests)", |
| "$dir_pw_display:tests.run(//targets/host:host_debug_tests)", |
| "$dir_pw_draw:tests.run(//targets/host:host_debug_tests)", |
| "$dir_pw_framebuffer:tests.run(//targets/host:host_debug_tests)", |
| |
| # See //applications/pw_lcd_display_host_imgui/README.md for instructions. |
| "//applications/32blit_demo:all(//targets/host:host_debug)", |
| "//applications/terminal_display:all(//targets/host:host_debug)", |
| ] |
| } |
| |
| # Group targets which need to do an optimized host build (e.g. for benchmarking). |
| group("host_opt") { |
| deps = [ |
| "$dir_pw_async_bench:size_benchmarks(//targets/host:host_size_optimized)", |
| ] |
| } |
| |
| # Arduino specific targets. |
| group("arduino") { |
| if (pw_arduino_build_CORE_PATH != "") { |
| deps = [ ":arduino_tests(//targets/arduino:arduino_debug_tests)" ] |
| |
| if (pw_arduino_build_CORE_NAME == "teensy") { |
| deps += [ |
| # TODO(tonymd): pw_framebuffer_pool depends on |
| # "pw_sync/counting_semaphore.h". Teensy does not have a implementation |
| # for that yet. |
| # See //pw_lcd_display_teensy_ili9341/README.md for instructions. |
| # "//applications/terminal_display:all(//targets/arduino:arduino_debug)", |
| ] |
| } |
| } |
| } |
| |
| # This gn arg must be set to build for the rp2040 |
| # PICO_SRC_DIR = "$HOME/pico-sdk" |
| group("pico") { |
| if (PICO_SRC_DIR != "") { |
| # TODO: https://pwbug.dev/325649415 - Replace broken bare metal rp2040 target |
| # with one based on pw_system. |
| # deps = [ |
| # ":pico_tests(//targets/rp2040)", |
| # "//applications/32blit_demo:all(//targets/rp2040)", |
| # "//applications/terminal_display:all(//targets/rp2040)", |
| # ] |
| } |
| } |
| |
| group("mimxrt595_evk") { |
| if (pw_third_party_mcuxpresso_SDK != "") { |
| deps = [ "//applications/terminal_display:all(//targets/mimxrt595_evk:mimxrt595_evk_debug)" ] |
| } |
| } |
| |
| # stm32f429i_disc1 specific targets. |
| group("stm32f429i_disc1") { |
| _default_toolchain = "//targets/stm32f429i_disc1:stm32f429i_disc1_debug" |
| _testing_toolchain = "${_default_toolchain}_tests" |
| deps = [ |
| # ":app(${_default_toolchain})", |
| ":tests(${_testing_toolchain})", |
| ] |
| } |
| |
| # stm32f769i_disc0 specific targets. |
| group("stm32f769i_disc0") { |
| _default_toolchain = "//targets/stm32f769i_disc0:stm32f769i_disc0_debug" |
| _testing_toolchain = "${_default_toolchain}_tests" |
| deps = [ |
| # ":app(${_default_toolchain})", |
| ":tests(${_testing_toolchain})", |
| ] |
| } |
| |
| # This group is built during bootstrap to setup the interactive Python |
| # environment. |
| pw_python_group("python") { |
| python_deps = [ |
| # Generate and pip install _all_python_packages |
| ":pip_install_experimental_tools", |
| ] |
| } |
| |
| # In-tree Python packages |
| _pw_experimental_python_packages = [ |
| "//applications/tls_example/trust_store/py", |
| "//tools:tools", |
| "//pw_graphics/py", |
| ] |
| |
| # 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", |
| "//targets/stm32f769i_disc0/py", |
| ] |
| |
| _all_python_packages = |
| _pw_experimental_python_packages + _pigweed_python_packages |
| |
| pw_python_group("pw_experimental_python") { |
| python_deps = _pw_experimental_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 = "//:pw_experimental_build_venv" |
| # |
| pw_python_venv("pw_experimental_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_create_python_source_tree( |
| "generate_experimental_tools_python_distribution") { |
| packages = _all_python_packages |
| generate_setup_cfg = { |
| name = "pw-experimental-tools" |
| version = "0.0.1" |
| append_date_to_version = true |
| include_default_pyproject_file = true |
| } |
| } |
| |
| # Install the pw-experimental-tools super Python package into the bootstrapped |
| # Python venv. |
| pw_internal_pip_install("pip_install_experimental_tools") { |
| packages = [ ":generate_experimental_tools_python_distribution" ] |
| } |
| |
| group("applications") { |
| deps = [] |
| |
| # Teensy 3.0/4.0 applications steps. |
| if (pw_arduino_build_CORE_PATH != "") { |
| deps += [ |
| ":applications_tests(//targets/arduino:arduino_debug_tests)", |
| "//applications/blinky:blinky(//targets/arduino:arduino_debug)", |
| "//applications/rpc:all(//targets/arduino:arduino_debug)", |
| "//applications/strings:all(//targets/arduino:arduino_debug)", |
| ] |
| |
| # TODO(b/258827934): Fix size report and reenable. |
| if (pw_arduino_build_CORE_NAME == "teensy-<disabled>") { |
| deps += [ |
| "//applications/tls_example:boringssl_teensy_ethernet(//targets/arduino:arduino_debug)", |
| "//applications/tls_example:mbedtls_teensy_ethernet(//targets/arduino:arduino_debug)", |
| "//applications/tls_example:picotls_teensy_ethernet(//targets/arduino:arduino_debug)", |
| ] |
| } |
| } |
| |
| # Raspberry Pi Pico |
| # TODO: https://pwbug.dev/325649415 - Replace broken bare metal rp2040 target |
| # with one based on pw_system. |
| # if (PICO_SRC_DIR != "") { |
| # deps += [ |
| # ":applications_tests(//targets/rp2040)", |
| # "//applications/blinky:blinky(//targets/rp2040)", |
| # "//applications/rpc:all(//targets/rp2040)", |
| # "//applications/strings:all(//targets/rp2040)", |
| # ] |
| # } |
| |
| # MIMXRT595-EVK application steps. |
| if (pw_third_party_mcuxpresso_SDK != "") { |
| deps += [ |
| ":applications_tests(//targets/mimxrt595_evk:mimxrt595_evk_debug)", |
| "//applications/blinky:blinky(//targets/mimxrt595_evk:mimxrt595_evk_debug)", |
| "//applications/rpc:all(//targets/mimxrt595_evk:mimxrt595_evk_debug)", |
| "//applications/strings:all(//targets/mimxrt595_evk:mimxrt595_evk_debug)", |
| "//applications/terminal_display:all(//targets/mimxrt595_evk:mimxrt595_evk_debug)", |
| ] |
| } |
| |
| if (dir_pw_third_party_stm32cube_f4 != "") { |
| # STMicroelectronics STM32F429I-DISC1 applications steps. |
| deps += [ |
| ":applications_tests(//targets/stm32f429i_disc1:stm32f429i_disc1_debug_tests)", |
| "//applications/blinky:blinky(//targets/stm32f429i_disc1:stm32f429i_disc1_debug)", |
| "//applications/rpc:all(//targets/stm32f429i_disc1:stm32f429i_disc1_debug)", |
| "//applications/strings:all(//targets/stm32f429i_disc1:stm32f429i_disc1_debug)", |
| ] |
| |
| # STMicroelectronics STM32F429I-DISC1 STM32Cube applications steps. |
| deps += [ |
| ":applications_tests(//targets/stm32f429i_disc1_stm32cube:stm32f429i_disc1_stm32cube_debug)", |
| "//applications/32blit_demo:all(//targets/stm32f429i_disc1_stm32cube:stm32f429i_disc1_stm32cube_debug)", |
| "//applications/blinky:blinky(//targets/stm32f429i_disc1_stm32cube:stm32f429i_disc1_stm32cube_debug)", |
| "//applications/terminal_display:all(//targets/stm32f429i_disc1_stm32cube:stm32f429i_disc1_stm32cube_debug)", |
| ] |
| |
| # STMicroelectronics STM32F439ZI-Nucleo applications steps. |
| deps += [ |
| ":applications_tests(//targets/stm32f439zi_nucleo:stm32f439zi_nucleo_debug)", |
| "//applications/blinky:blinky(//targets/stm32f439zi_nucleo:stm32f439zi_nucleo_debug)", |
| ] |
| } |
| |
| if (dir_pw_third_party_stm32cube_f2 != "") { |
| deps += [ "//applications/blinky:blinky(//targets/stm32f207zg-nucleo:stm32f207zg_nucleo_debug)" ] |
| } |
| |
| if (dir_pw_third_party_stm32cube_f7 != "") { |
| # STMicroelectronics STM32F769I-DISC0 applications steps. |
| deps += [ |
| ":applications_tests(//targets/stm32f769i_disc0:stm32f769i_disc0_debug_tests)", |
| "//applications/blinky:blinky(//targets/stm32f769i_disc0:stm32f769i_disc0_debug)", |
| "//applications/rpc:all(//targets/stm32f769i_disc0:stm32f769i_disc0_debug)", |
| "//applications/strings:all(//targets/stm32f769i_disc0:stm32f769i_disc0_debug)", |
| ] |
| |
| # STMicroelectronics STM32F769I-DISC0 STM32Cube applications steps. |
| deps += [ |
| ":applications_tests(//targets/stm32f769i_disc0_stm32cube:stm32f769i_disc0_stm32cube_debug)", |
| "//applications/blinky:blinky(//targets/stm32f769i_disc0_stm32cube:stm32f769i_disc0_stm32cube_debug)", |
| ] |
| } |
| |
| if (dir_pw_third_party_stm32cube_l5 != "") { |
| deps += [ "//applications/blinky:blinky(//targets/stm32l552ze-nucleo:stm32l552ze_nucleo_debug)" ] |
| } |
| |
| if (dir_pw_third_party_stm32cube_h7 != "") { |
| deps += [ "//applications/blinky:blinky(//targets/stm32h753zi-nucleo:stm32h753zi_nucleo_debug)" ] |
| } |
| |
| # Host applications steps. |
| deps += [ |
| ":applications_tests(//targets/host:host_debug_tests)", |
| "//applications/blinky:blinky(//targets/host:host_debug)", |
| "//applications/strings:all(//targets/host:host_debug)", |
| ] |
| } |
| |
| # Group the different modules tests together. |
| pw_test_group("tests") { |
| group_deps = [ |
| "//applications/strings:tests", |
| "//applications/terminal_display:tests", |
| ] |
| |
| if (pw_arduino_build_CORE_NAME == "teensy") { |
| group_deps += [] |
| } |
| } |
| |
| # Test groups for each platform that will build and optionally run the tests. |
| foreach(test_group, |
| [ |
| "arduino", |
| "pico", |
| "mimxrt595_evk", |
| "host", |
| "applications", |
| ]) { |
| group("${test_group}_tests") { |
| deps = [] |
| if (pw_unit_test_AUTOMATIC_RUNNER == "" || test_group != "host") { |
| # 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" ] |
| } |
| } |
| } |