Fix various build issues - clang sysroot issues for pw_display_driver_imgui on Linux - pw_spi_arduino library path - pw_digital_io_stm32cube typo - mimxrt595_executable.gni change to allow .ninja file parsing by: https://cs.opensource.google/pigweed/pigweed/+/main:pw_build/py/pw_build/gn_resolver.py Bug: b/256272529 Change-Id: I7eca9570b715fd910522d69442c7512c377b1dd9 Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/experimental/+/148797 Reviewed-by: Chris Mumford <cmumford@google.com> Commit-Queue: Anthony DiGirolamo <tonymd@google.com> Reviewed-by: Rob Mohr <mohrr@google.com>
diff --git a/BUILD.gn b/BUILD.gn index f48de4b..537480a 100644 --- a/BUILD.gn +++ b/BUILD.gn
@@ -59,8 +59,11 @@ 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)", + # "//applications/terminal_display:all(//targets/arduino:arduino_debug)", ] } }
diff --git a/applications/app_common_impl/BUILD.gn b/applications/app_common_impl/BUILD.gn index 8d8a464..f47e05d 100644 --- a/applications/app_common_impl/BUILD.gn +++ b/applications/app_common_impl/BUILD.gn
@@ -177,6 +177,10 @@ "$dir_pw_framebuffer_pool", ] sources = [ "common_host_imgui.cc" ] + remove_configs = [] + if (host_os == "linux") { + remove_configs += [ "$dir_pw_toolchain/host_clang:linux_sysroot" ] + } } pw_source_set("host_null") {
diff --git a/applications/rpc/BUILD.gn b/applications/rpc/BUILD.gn index 87560d1..78343b7 100644 --- a/applications/rpc/BUILD.gn +++ b/applications/rpc/BUILD.gn
@@ -26,12 +26,9 @@ group("all") { deps = [ ":rpc" ] - # Build tokenizer_database for elf binaries only - # TODO(b/256272529): Figure out why this needs to be disabled on - # mimxrt595_evk. + # Build tokenizer_database for elf and Linux binaries only if (host_os == "linux" || - (get_label_info(current_toolchain, "name") != "host_debug" && - pw_build_EXECUTABLE_TARGET_TYPE != "mimxrt595_executable")) { + get_label_info(current_toolchain, "name") != "host_debug") { deps += [ ":tokenizer_database" ] } }
diff --git a/applications/strings/BUILD.gn b/applications/strings/BUILD.gn index 61f4797..76bb4aa 100644 --- a/applications/strings/BUILD.gn +++ b/applications/strings/BUILD.gn
@@ -21,12 +21,9 @@ group("all") { deps = [ ":string_demo" ] - # Build tokenizer_database for elf binaries only - # TODO(b/256272529): Figure out why this needs to be disabled on - # mimxrt595_evk. + # Build tokenizer_database for elf and Linux binaries only if (host_os == "linux" || - (get_label_info(current_toolchain, "name") != "host_debug" && - pw_build_EXECUTABLE_TARGET_TYPE != "mimxrt595_executable")) { + get_label_info(current_toolchain, "name") != "host_debug") { deps += [ ":tokenizer_database" ] } }
diff --git a/applications/terminal_display/BUILD.gn b/applications/terminal_display/BUILD.gn index 9480ef7..7cf36a5 100644 --- a/applications/terminal_display/BUILD.gn +++ b/applications/terminal_display/BUILD.gn
@@ -22,12 +22,9 @@ group("all") { deps = [ ":terminal_demo" ] - # Build tokenizer_database for elf binaries only - # TODO(b/256272529): Figure out why this needs to be disabled on - # mimxrt595_evk. + # Build tokenizer_database for elf and Linux binaries only. if (host_os == "linux" || - (get_label_info(current_toolchain, "name") != "host_debug" && - pw_build_EXECUTABLE_TARGET_TYPE != "mimxrt595_executable")) { + get_label_info(current_toolchain, "name") != "host_debug") { deps += [ ":tokenizer_database" ] } } @@ -64,10 +61,11 @@ "$dir_pw_sys_io", "$dir_pw_touchscreen", ] - remove_configs = [ - "$dir_pw_build:strict_warnings", - "//third_party/pigweed/pw_toolchain/host_clang:linux_sysroot", - ] + remove_configs = [ "$dir_pw_build:strict_warnings" ] + + if (host_os == "linux") { + remove_configs += [ "$dir_pw_toolchain/host_clang:linux_sysroot" ] + } # Hack for targets with no pre-init target implementation. defines = []
diff --git a/pw_digital_io_stm32cube/BUILD.gn b/pw_digital_io_stm32cube/BUILD.gn index 0a18a10..1bd0f55 100644 --- a/pw_digital_io_stm32cube/BUILD.gn +++ b/pw_digital_io_stm32cube/BUILD.gn
@@ -22,7 +22,7 @@ pw_source_set("pw_digital_io_stm32cube") { public_configs = [ ":public_includes" ] - public = [ "public/ps_digital_io_stm32cube/digital_io.h" ] + public = [ "public/pw_digital_io_stm32cube/digital_io.h" ] deps = [ "$dir_pw_assert" ] public_deps = [ "$dir_pw_digital_io",
diff --git a/pw_display_driver_imgui/BUILD.gn b/pw_display_driver_imgui/BUILD.gn index a8ed653..e191e07 100644 --- a/pw_display_driver_imgui/BUILD.gn +++ b/pw_display_driver_imgui/BUILD.gn
@@ -35,4 +35,8 @@ ] sources = [ "display_driver.cc" ] remove_configs = [ "$dir_pw_build:strict_warnings" ] + + if (host_os == "linux") { + remove_configs += [ "$dir_pw_toolchain/host_clang:linux_sysroot" ] + } }
diff --git a/pw_graphics/pw_display_imgui/BUILD.gn b/pw_graphics/pw_display_imgui/BUILD.gn index 04038c8..b05a0a0 100644 --- a/pw_graphics/pw_display_imgui/BUILD.gn +++ b/pw_graphics/pw_display_imgui/BUILD.gn
@@ -30,4 +30,9 @@ "$dir_pw_status", ] sources = [ "display.cc" ] + + remove_configs = [] + if (host_os == "linux") { + remove_configs += [ "$dir_pw_toolchain/host_clang:linux_sysroot" ] + } }
diff --git a/pw_spi_arduino/BUILD.gn b/pw_spi_arduino/BUILD.gn index 739236d..577d293 100644 --- a/pw_spi_arduino/BUILD.gn +++ b/pw_spi_arduino/BUILD.gn
@@ -25,7 +25,7 @@ _library_args = [ "--library-path", rebase_path( - "$pw_arduino_build_CORE_PATH/teensy/hardware/teensy/avr/libraries"), + "$pw_arduino_build_CORE_PATH/teensy/hardware/${pw_arduino_build_PACKAGE_NAME}/libraries"), "--library-names", # Arduino Core Libaries. The c/c++ files for these should only be included
diff --git a/targets/mimxrt595_evk/mimxrt595_executable.gni b/targets/mimxrt595_evk/mimxrt595_executable.gni index e29ca91..0719260 100644 --- a/targets/mimxrt595_evk/mimxrt595_executable.gni +++ b/targets/mimxrt595_evk/mimxrt595_executable.gni
@@ -19,22 +19,16 @@ # Executable wrapper that includes some baremetal startup code. template("mimxrt595_executable") { - group(target_name) { - deps = [ - ":${target_name}__binary", - ":${target_name}__elf", - ] - } - # .elf binary created by the standard toolchain. - _base_target_name = target_name - executable("${target_name}__elf") { - output_name = "${_base_target_name}" + _bin_name = "${target_name}.bin" + _elf_name = "${target_name}.elf" + + executable(_elf_name) { forward_variables_from(invoker, "*") if (!defined(deps)) { deps = [] } - deps += [ "$dir_pigweed_experimental/targets/mimxrt595_evk:boot" ] + deps += [ "//targets/mimxrt595_evk:boot" ] if (pw_malloc_BACKEND != "") { if (!defined(configs)) { configs = [] @@ -44,21 +38,25 @@ } # .bin binary created by extracting from the toolchain output. - pw_exec("${target_name}__binary") { + pw_exec(_bin_name) { if (defined(invoker.output_dir)) { _output_dir = invoker.output_dir } else { _output_dir = target_out_dir } - outputs = [ "${_output_dir}/${_base_target_name}.bin" ] - deps = [ ":${_base_target_name}__elf" ] + outputs = [ "${_output_dir}/${_bin_name}" ] + deps = [ ":${_elf_name}" ] program = "arm-none-eabi-objcopy" args = [ "-Obinary", - "<TARGET_FILE(:${_base_target_name}__elf)>", + "<TARGET_FILE(:${_elf_name})>", rebase_path(outputs[0], root_build_dir), ] } + + group(target_name) { + deps = [ ":${_bin_name}" ] + } }
diff --git a/third_party/glfw/BUILD.gn b/third_party/glfw/BUILD.gn index 2ff8372..73008ea 100644 --- a/third_party/glfw/BUILD.gn +++ b/third_party/glfw/BUILD.gn
@@ -36,6 +36,7 @@ ] include_dirs = [ "$dir_pw_third_party_glfw/include", + "/usr/include/x86_64-linux-gnu", "/usr/include", ] lib_dirs = [
diff --git a/third_party/imgui/BUILD.gn b/third_party/imgui/BUILD.gn index d1baa77..3b9461b 100644 --- a/third_party/imgui/BUILD.gn +++ b/third_party/imgui/BUILD.gn
@@ -37,8 +37,10 @@ "$dir_pw_third_party_imgui/imgui_tables.cpp", "$dir_pw_third_party_imgui/imgui_widgets.cpp", ] - remove_configs = [ - "$dir_pw_build:strict_warnings", - "//third_party/pigweed/pw_toolchain/host_clang:linux_sysroot", - ] + + remove_configs = [ "$dir_pw_build:strict_warnings" ] + + if (host_os == "linux") { + remove_configs += [ "$dir_pw_toolchain/host_clang:linux_sysroot" ] + } }
diff --git a/tools/pigweed_experimental_tools/presubmit_checks.py b/tools/pigweed_experimental_tools/presubmit_checks.py index 804bd39..1e8f343 100755 --- a/tools/pigweed_experimental_tools/presubmit_checks.py +++ b/tools/pigweed_experimental_tools/presubmit_checks.py
@@ -20,6 +20,7 @@ from pathlib import Path import re import sys +from typing import Callable try: import pw_cli.log @@ -75,26 +76,66 @@ build.ninja(ctx) -def pico_build(ctx: PresubmitContext): - build.install_package(ctx, 'pico_sdk') - build.gn_gen( - ctx, - PICO_SRC_DIR='"{}"'.format(str(ctx.package_root / 'pico_sdk')), - ) - build.ninja(ctx) +def _package_root_arg(name: str) -> Callable[[PresubmitContext], str]: + def _format(ctx: PresubmitContext) -> str: + return '"{}"'.format(ctx.package_root / name) + + return _format -def stm32cube_f4_build(ctx: PresubmitContext): - build.install_package(ctx, 'freertos') - build.install_package(ctx, 'stm32cube_f4') - build.gn_gen( - ctx, - dir_pw_third_party_freertos='"{}"'.format(ctx.package_root / - 'freertos'), - dir_pw_third_party_stm32cube_f4='"{}"'.format(ctx.package_root / - 'stm32cube_f4'), - ) - build.ninja(ctx) +teensy_build = build.GnGenNinja( + name='teensy_build', + packages=('teensy', ), + gn_args=dict( + pw_arduino_build_CORE_PATH=lambda ctx: '"{}"'.format( + str(ctx.package_root)), + pw_arduino_build_CORE_NAME='"teensy"', + pw_arduino_build_PACKAGE_NAME='"avr/1.58.1"', + pw_arduino_build_BOARD='"teensy41"', + pw_arduino_build_MENU_OPTIONS=( + '["menu.usb.serial", "menu.keys.en-us", "menu.opt.o2std"]'), + ), +) + +pico_build = build.GnGenNinja( + name='pico_build', + packages=('pico_sdk', ), + gn_args=dict( + PICO_SRC_DIR=_package_root_arg('pico_sdk'), + dir_pw_third_party_freertos='"//third_party/freertos/Source"', + ), +) + +stm32cube_f4_build = build.GnGenNinja( + name='stm32cube_f4_build', + packages=('stm32cube_f4', ), + gn_args=dict( + dir_pw_third_party_stm32cube_f4=_package_root_arg('stm32cube_f4'), + dir_pw_third_party_freertos='"//third_party/freertos/Source"', + ), +) + +# pylint: disable=line-too-long +mimxrt595_evk_build = build.GnGenNinja( + name='mimxrt595_evk_build', + gn_args=dict( + dir_pw_third_party_freertos='"//third_party/freertos/Source"', + pw_MIMXRT595_EVK_SDK=_package_root_arg("SDK_2_12_1_EVK-MIMXRT595"), + pw_target_mimxrt595_evk_MANIFEST=_package_root_arg( + "SDK_2_12_1_EVK-MIMXRT595/EVK-MIMXRT595_manifest_v3_10.xml"), + pw_third_party_mcuxpresso_SDK="//targets/mimxrt595_evk:mimxrt595_sdk", + ), +) +# pylint: enable=line-too-long + +pw_graphics_host = build.GnGenNinja( + name='pw_graphics_host', + packages=('imgui', 'glfw'), + gn_args=dict( + dir_pw_third_party_glfw=_package_root_arg('glfw'), + dir_pw_third_party_imgui=_package_root_arg('imgui'), + ), +) def check_for_git_changes(_: PresubmitContext): @@ -122,6 +163,9 @@ OTHER_CHECKS = ( build.gn_gen_check, inclusive_language.presubmit_check.with_filter(exclude=PATH_EXCLUSIONS), + pw_graphics_host, + mimxrt595_evk_build, + teensy_build, ) QUICK = ( @@ -149,7 +193,7 @@ stm32cube_f4_build, ) -CI_CQ = (default_build, pico_build) +CI_CQ = (default_build, pico_build, stm32cube_f4_build) PROGRAMS = pw_presubmit.Programs( # keep-sorted: start