diff options
Diffstat (limited to 'targets/arduino')
-rw-r--r-- | targets/arduino/BUILD.bazel | 2 | ||||
-rw-r--r-- | targets/arduino/BUILD.gn | 14 | ||||
-rw-r--r-- | targets/arduino/target_docs.rst | 149 | ||||
-rw-r--r-- | targets/arduino/target_toolchains.gni | 9 |
4 files changed, 91 insertions, 83 deletions
diff --git a/targets/arduino/BUILD.bazel b/targets/arduino/BUILD.bazel index 07e2150c0..39c178e95 100644 --- a/targets/arduino/BUILD.bazel +++ b/targets/arduino/BUILD.bazel @@ -28,7 +28,7 @@ pw_cc_library( ], hdrs = [ ], - # TODO(b/259149817): pw_sys_io_arduino cannot find "Arduino.h" + # TODO: b/259149817 - pw_sys_io_arduino cannot find "Arduino.h" tags = ["manual"], deps = [ "//pw_arduino_build:pw_arduino_build_header", diff --git a/targets/arduino/BUILD.gn b/targets/arduino/BUILD.gn index 2f62200c2..5d0fd1d69 100644 --- a/targets/arduino/BUILD.gn +++ b/targets/arduino/BUILD.gn @@ -77,14 +77,20 @@ if (pw_arduino_build_CORE_PATH != "") { "{object_files}", ]) - # TODO(tonymd): Determine if libs are needed. - # Teensy4 core recipe uses: '-larm_cortexM7lfsp_math -lm -lstdc++' + # Teensy4 core recipe uses: '-larm_cortexM7lfsp_math -lm -lstdc++' libs = filter_exclude( exec_script(arduino_builder_script, arduino_show_command_args + [ "--ld-lib-names" ], "list lines"), - # Exclude stdc++ which causes linking errors for teensy cores. - [ "\bstdc++\b" ]) + [ + # Exclude stdc++ and precompiled math libraries which causes + # linking errors for teensy cores. + "\bstdc++\b", + "\barm_cortexM0l_math\b", + "\barm_cortexM4lf_math\b", + "\barm_cortexM4l_math\b", + "\barm_cortexM7lfsp_math\b", + ]) } pw_source_set("pre_init") { diff --git a/targets/arduino/target_docs.rst b/targets/arduino/target_docs.rst index 379da1b5a..1735e6789 100644 --- a/targets/arduino/target_docs.rst +++ b/targets/arduino/target_docs.rst @@ -51,100 +51,101 @@ Installing Arduino Cores The ``arduino_builder`` utility can install Arduino cores automatically. It's recommended to install them to into ``third_party/arduino/cores/``. -.. code:: sh +.. code-block:: sh - # Setup pigweed environment. - source activate.sh - # Install an arduino core - arduino_builder install-core --prefix ./third_party/arduino/cores/ --core-name teensy + # Setup pigweed environment. + . ./activate.sh + # Install an arduino core, only teensy is supported + pw package install teensy Building ======== To build for this Pigweed target, simply build the top-level "arduino" Ninja target. You can set Arduino build options using ``gn args out`` or by running: -.. code:: sh +.. code-block:: sh - gn gen out --args=' - pw_arduino_build_CORE_PATH="//third_party/arduino/cores" - pw_arduino_build_CORE_NAME="teensy" - pw_arduino_build_PACKAGE_NAME="teensy/avr" - pw_arduino_build_BOARD="teensy40" - pw_arduino_build_MENU_OPTIONS=["menu.usb.serial", "menu.keys.en-us"]' + gn gen out --args=' + pw_arduino_build_CORE_PATH = "//environment/packages" + pw_arduino_build_CORE_NAME = "teensy" + pw_arduino_build_PACKAGE_NAME = "avr/1.58.1" + pw_arduino_build_BOARD = "teensy40" + pw_arduino_build_MENU_OPTIONS=["menu.usb.serial", "menu.keys.en-us"]' On a Windows machine it's easier to run: -.. code:: sh +.. code-block:: sh - gn args out + gn args out That will open a text file where you can paste the args in: -.. code:: text +.. code-block:: text - pw_arduino_build_CORE_PATH = "//third_party/arduino/cores" - pw_arduino_build_CORE_NAME = "teensy" - pw_arduino_build_PACKAGE_NAME="teensy/avr" - pw_arduino_build_BOARD = "teensy40" - pw_arduino_build_MENU_OPTIONS = ["menu.usb.serial", "menu.keys.en-us"] + pw_arduino_build_CORE_PATH = "//environment/packages" + pw_arduino_build_CORE_NAME = "teensy" + pw_arduino_build_PACKAGE_NAME = "avr/1.58.1" + pw_arduino_build_BOARD = "teensy40" + pw_arduino_build_MENU_OPTIONS = ["menu.usb.serial", "menu.keys.en-us"] Save the file and close the text editor. Then build with: -.. code:: sh +.. code-block:: sh ninja -C out arduino To see supported boards and Arduino menu options for a given core: -.. code:: sh +.. code-block:: sh - arduino_builder --arduino-package-path ./third_party/arduino/cores/teensy \ - --arduino-package-name teensy/avr \ - list-boards + arduino_builder --arduino-package-path ./environment/packages/teensy \ + --arduino-package-name avr/1.58.1 \ + list-boards -.. code:: text +.. code-block:: text - Board Name Description - teensy41 Teensy 4.1 - teensy40 Teensy 4.0 - teensy36 Teensy 3.6 - teensy35 Teensy 3.5 - teensy31 Teensy 3.2 / 3.1 + Board Name Description + teensy41 Teensy 4.1 + teensy40 Teensy 4.0 + teensy36 Teensy 3.6 + teensy35 Teensy 3.5 + teensy31 Teensy 3.2 / 3.1 You may wish to set different arduino build options in ``pw_arduino_build_MENU_OPTIONS``. Run this to see what's available for your core: -.. code:: sh +.. code-block:: sh - arduino_builder --arduino-package-path ./third_party/arduino/cores/teensy \ - --arduino-package-name teensy/avr \ - list-menu-options --board teensy40 + arduino_builder --arduino-package-path ./environment/packages/teensy \ + --arduino-package-name avr/1.58.1 \ + list-menu-options \ + --board teensy40 That will show all menu options that can be added to ``gn args out``. -.. code:: text - - All Options - ---------------------------------------------------------------- - menu.usb.serial Serial - menu.usb.serial2 Dual Serial - menu.usb.serial3 Triple Serial - menu.usb.keyboard Keyboard - menu.usb.touch Keyboard + Touch Screen - menu.usb.hidtouch Keyboard + Mouse + Touch Screen - menu.usb.hid Keyboard + Mouse + Joystick - menu.usb.serialhid Serial + Keyboard + Mouse + Joystick - menu.usb.midi MIDI - ... - - Default Options - -------------------------------------- - menu.usb.serial Serial - menu.speed.600 600 MHz - menu.opt.o2std Faster - menu.keys.en-us US English +.. code-block:: text + + All Options + ---------------------------------------------------------------- + menu.usb.serial Serial + menu.usb.serial2 Dual Serial + menu.usb.serial3 Triple Serial + menu.usb.keyboard Keyboard + menu.usb.touch Keyboard + Touch Screen + menu.usb.hidtouch Keyboard + Mouse + Touch Screen + menu.usb.hid Keyboard + Mouse + Joystick + menu.usb.serialhid Serial + Keyboard + Mouse + Joystick + menu.usb.midi MIDI + ... + + Default Options + -------------------------------------- + menu.usb.serial Serial + menu.speed.600 600 MHz + menu.opt.o2std Faster + menu.keys.en-us US English Testing ======= @@ -159,23 +160,23 @@ If using ``out`` as a build directory, tests will be located in Tests can be flashed and run using the `arduino_unit_test_runner` tool. Here is a sample bash script to run all tests on a Linux machine. -.. code:: sh +.. code-block:: sh - #!/bin/bash - gn gen out --export-compile-commands \ - --args='pw_arduino_build_CORE_PATH="//third_party/arduino/cores" - pw_arduino_build_CORE_NAME="teensy" - pw_arduino_build_PACKAGE_NAME="teensy/avr" - pw_arduino_build_BOARD="teensy40" - pw_arduino_build_MENU_OPTIONS=["menu.usb.serial", "menu.keys.en-us"]' && \ - ninja -C out arduino + #!/bin/bash + gn gen out --export-compile-commands \ + --args='pw_arduino_build_CORE_PATH="environment/packages" + pw_arduino_build_CORE_NAME="teensy" + pw_arduino_build_PACKAGE_NAME="avr/1.58.1" + pw_arduino_build_BOARD="teensy40" + pw_arduino_build_MENU_OPTIONS=["menu.usb.serial", "menu.keys.en-us"]' && \ + ninja -C out arduino - for f in $(find out/arduino_debug/obj/ -iname "*.elf"); do - arduino_unit_test_runner --verbose \ - --config-file ./out/arduino_debug/gen/arduino_builder_config.json \ - --upload-tool teensyloader \ - out/arduino_debug/obj/pw_string/test/format_test.elf - done + for f in $(find out/arduino_debug/obj/ -iname "*.elf"); do + arduino_unit_test_runner --verbose \ + --config-file ./out/arduino_debug/gen/arduino_builder_config.json \ + --upload-tool teensyloader \ + $f + done Using the test server --------------------- @@ -184,7 +185,7 @@ Tests may also be run using the `pw_arduino_use_test_server = true` GN arg. The server must be run with an `arduino_builder` config file so it can locate the correct Arduino core, compiler path, and Arduino board used. -.. code:: sh +.. code-block:: sh arduino_test_server --verbose \ --config-file ./out/arduino_debug/gen/arduino_builder_config.json @@ -209,7 +210,7 @@ GN Target Example Here is an example `pw_executable` gn rule that includes some Teensyduino libraries. -.. code:: text +.. code-block:: text import("//build_overrides/pigweed.gni") import("$dir_pw_arduino_build/arduino.gni") diff --git a/targets/arduino/target_toolchains.gni b/targets/arduino/target_toolchains.gni index 3b74b8b96..82ef602ed 100644 --- a/targets/arduino/target_toolchains.gni +++ b/targets/arduino/target_toolchains.gni @@ -14,6 +14,7 @@ import("//build_overrides/pigweed.gni") +import("$dir_pw_build/defaults.gni") import("$dir_pw_sys_io/backend.gni") import("$dir_pw_toolchain/arm_gcc/toolchains.gni") @@ -65,10 +66,10 @@ _toolchain_properties = { final_binary_extension = ".elf" } -_target_default_configs = [ - "$dir_pw_toolchain/arm_gcc:enable_float_printf", - "$dir_pigweed/targets/arduino:arduino_build", -] +_target_default_configs = pigweed_default_configs + [ + "$dir_pw_toolchain/arm_gcc:enable_float_printf", + "$dir_pigweed/targets/arduino:arduino_build", + ] pw_target_toolchain_arduino = { _excluded_members = [ |