# 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")

declare_args() {
  # Enable/disable Arduino builds via group("arduino").
  # Set to the full path of ./third_party/arduino
  dir_pw_third_party_arduino = ""

  # Expected args for an Arduino build:
  arduino_core_name = "teensy"

  # TODO(tonymd): "teensy/avr" here should match the folders in this dir:
  # "../third_party/arduino/cores/$arduino_core_name/hardware/*")
  # For teensy: "teensy/avr", for adafruit-samd: "samd/1.6.2"
  arduino_package_name = "teensy/avr"
  arduino_board = "teensy40"

  # Menu options should be a list of strings.
  arduino_menu_options = [
    "menu.usb.serial",
    "menu.keys.en-us",
  ]
}

arduino_builder_script =
    get_path_info("py/pw_arduino_build/__main__.py", "abspath")

_arduino_core_path =
    rebase_path("../third_party/arduino/cores/$arduino_core_name")
_compiler_path_override =
    rebase_path(getenv("_PW_ACTUAL_ENVIRONMENT_ROOT") + "/cipd/pigweed/bin")

arduino_global_args = [
  "--arduino-package-path",
  _arduino_core_path,
  "--arduino-package-name",
  arduino_package_name,
  "--compiler-path-override",
  _compiler_path_override,

  # Save config files to "out/arduino_debug/gen/arduino_builder_config.json"
  "--config-file",
  rebase_path(root_gen_dir) + "/arduino_builder_config.json",
  "--save-config",
]

arduino_board_args = [
  "--build-path",
  rebase_path(root_build_dir),
  "--board",
  arduino_board,
  "--menu-options",
]
arduino_board_args += arduino_menu_options

arduino_show_command_args = arduino_global_args + [
                              "show",
                              "--delimit-with-newlines",
                            ] + arduino_board_args

arduino_run_command_args = arduino_global_args + [ "run" ] + arduino_board_args
