# 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_build/target_types.gni")
import("$dir_pw_docgen/docs.gni")
import("$dir_pw_toolchain/arm_gcc/toolchains.gni")
import("$dir_pw_toolchain/generate_toolchain.gni")
import("board_configs.gni")

if (current_toolchain != default_toolchain) {
  config("config_includes") {
    include_dirs = [ "config" ]
  }

  pw_source_set("freertos_config") {
    public_configs = [ ":config_includes" ]
    public_deps = [ "$dir_pw_third_party/freertos:config_assert" ]
    public = [ "config/FreeRTOSConfig.h" ]
  }

  pw_source_set("pre_init") {
    configs = [ ":pw_malloc_active" ]
    public_deps = [ "$dir_pw_boot" ]
    deps = [
      "$dir_pw_malloc",
      "$dir_pw_preprocessor",
      "$dir_pw_string",
      "$dir_pw_third_party/freertos",
    ]
    sources = [ "boot.cc" ]
  }
}

generate_toolchain("rp2040") {
  _excluded_members = [
    "defaults",
    "name",
  ]
  _toolchain_base = pw_toolchain_arm_gcc.cortex_m0plus_size_optimized
  forward_variables_from(_toolchain_base, "*", _excluded_members)

  # For now, no Pigweed configurations set up.
  defaults = {
    forward_variables_from(_toolchain_base.defaults, "*")

    # Merge in the app_common_BACKEND and various application settings
    # which are defined in board_configs.gni.
    # forward_variables_from(board_config_st7735, "*")
    # forward_variables_from(board_config_st7789, "*")
    forward_variables_from(board_config_ili9341, "*")

    pw_build_EXECUTABLE_TARGET_TYPE = "pico_executable"
    pw_build_EXECUTABLE_TARGET_TYPE_FILE =
        get_path_info("$dir_pigweed/targets/rp2040/pico_executable.gni",
                      "abspath")
    pw_unit_test_MAIN = "$dir_pigweed/targets/rp2040:pico_logging_test_main"
    pw_assert_BACKEND = dir_pw_assert_basic
    pw_log_BACKEND = dir_pw_log_basic
    pw_sys_io_BACKEND = dir_pw_sys_io_pico

    pw_chrono_SYSTEM_CLOCK_BACKEND = "$dir_pw_chrono_freertos:system_clock"
    pw_interrupt_CONTEXT_BACKEND = "$dir_pw_interrupt_cortex_m:context_armv7m"
    pw_sync_INTERRUPT_SPIN_LOCK_BACKEND =
        "$dir_pw_sync_freertos:interrupt_spin_lock"
    pw_sync_MUTEX_BACKEND = "$dir_pw_sync_baremetal:mutex"
    pw_sync_COUNTING_SEMAPHORE_BACKEND =
        "$dir_pw_sync_freertos:counting_semaphore"

    pw_rpc_CONFIG = "$dir_pw_rpc:disable_global_mutex"

    pw_third_party_freertos_CONFIG =
        "$dir_pigweed_experimental/targets/rp2040:freertos_config"
    pw_third_party_freertos_PORT =
        "$dir_pigweed_experimental/third_party/freertos:arm_cm0_freertos_port"
    pw_display_DISPLAY_RESIZE = 1

    # Silence GN variable overwrite warning.
    pw_build_LINK_DEPS = []

    pw_build_LINK_DEPS = [
      "$dir_pw_assert:impl",
      "$dir_pw_log:impl",
    ]

    # Configure backend for pw_board_led
    pw_board_led_BACKEND = "$dir_pw_board_led_pico"

    # Configure backend for pw_spin_delay
    pw_spin_delay_BACKEND = "$dir_pw_spin_delay_pico"

    # Configure backend for pw_touchscreen
    pw_touchscreen_BACKEND = "$dir_pw_touchscreen_null"

    current_cpu = "arm"
    current_os = ""
  }
}
