# 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/pigweed.gni")

import("$dir_pw_chrono/backend.gni")
import("$dir_pw_protobuf_compiler/proto.gni")
import("$dir_pw_rpc/system_server/backend.gni")
import("$dir_pw_sync/backend.gni")
import("$dir_pw_sys_io/backend.gni")
import("$dir_pw_system/backend.gni")
import("$dir_pw_third_party/nanopb/nanopb.gni")
import("$dir_pw_thread/backend.gni")
import("$dir_pw_toolchain/host_clang/toolchains.gni")
import("$dir_pw_toolchain/host_gcc/toolchains.gni")
import("$dir_pw_toolchain/traits.gni")
import("$dir_pw_trace/backend.gni")
import("$dir_pw_trace_tokenized/config.gni")

_host_common = {
  # Use logging-based test output on host.
  pw_unit_test_MAIN = "$dir_pw_unit_test:logging_main"

  # Configure backend for assert facade.
  pw_assert_BACKEND = "$dir_pw_assert_basic"
  pw_assert_LITE_BACKEND = "$dir_pw_assert:print_and_abort_assert_backend"

  # Configure backend for logging facade.
  pw_log_BACKEND = "$dir_pw_log_basic"

  # Enable decimal expansion when converting floats to string.
  pw_string_CONFIG = "$dir_pw_string:enable_decimal_float_expansion"

  # Configure backends for pw_sync's facades.
  pw_sync_BINARY_SEMAPHORE_BACKEND = "$dir_pw_sync_stl:binary_semaphore_backend"
  pw_sync_CONDITION_VARIABLE_BACKEND =
      "$dir_pw_sync_stl:condition_variable_backend"
  pw_sync_COUNTING_SEMAPHORE_BACKEND =
      "$dir_pw_sync_stl:counting_semaphore_backend"
  pw_sync_INTERRUPT_SPIN_LOCK_BACKEND = "$dir_pw_sync_stl:interrupt_spin_lock"
  pw_sync_MUTEX_BACKEND = "$dir_pw_sync_stl:mutex_backend"
  pw_sync_RECURSIVE_MUTEX_BACKEND = "$dir_pw_sync_stl:recursive_mutex_backend"
  pw_sync_TIMED_MUTEX_BACKEND = "$dir_pw_sync_stl:timed_mutex_backend"
  pw_sync_THREAD_NOTIFICATION_BACKEND =
      "$dir_pw_sync:binary_semaphore_thread_notification_backend"
  pw_sync_TIMED_THREAD_NOTIFICATION_BACKEND =
      "$dir_pw_sync:binary_semaphore_timed_thread_notification_backend"

  # Configure backend for pw_sys_io facade.
  pw_sys_io_BACKEND = "$dir_pw_sys_io_stdio"

  # Configure backend for pw_rpc_system_server.
  pw_rpc_system_server_BACKEND = "$dir_pigweed/targets/host:system_rpc_server"

  # Configure backend for trace facade.
  pw_trace_BACKEND = "$dir_pw_trace_tokenized"

  # Tokenizer trace time.
  pw_trace_tokenizer_time = "$dir_pw_trace_tokenized:host_trace_time"

  # Configure backend for pw_chrono's facades.
  pw_chrono_SYSTEM_CLOCK_BACKEND = "$dir_pw_chrono_stl:system_clock"
  pw_chrono_SYSTEM_TIMER_BACKEND = "$dir_pw_chrono_stl:system_timer"

  # Configure backends for pw_thread's facades.
  pw_thread_ID_BACKEND = "$dir_pw_thread_stl:id"
  pw_thread_YIELD_BACKEND = "$dir_pw_thread_stl:yield"
  pw_thread_SLEEP_BACKEND = "$dir_pw_thread_stl:sleep"
  pw_thread_THREAD_BACKEND = "$dir_pw_thread_stl:thread"

  pw_build_LINK_DEPS = []  # Explicit list overwrite required by GN
  pw_build_LINK_DEPS = [
    "$dir_pw_assert:impl",
    "$dir_pw_log:impl",
  ]

  # Specify builtin GN variables.
  current_os = host_os
  current_cpu = host_cpu
}

# Linux-specific target configuration.
_linux_config = {
  pw_bloat_BLOATY_CONFIG = get_path_info("linux.bloaty", "abspath")
  pw_unit_test_AUTOMATIC_RUNNER = get_path_info("run_test", "abspath")
}

# macOS-specific target configuration.
_mac_config = {
  pw_bloat_BLOATY_CONFIG = get_path_info("macos.bloaty", "abspath")
  pw_unit_test_AUTOMATIC_RUNNER = get_path_info("run_test", "abspath")
}

# Windows-specific target configuration.
_win_config = {
  # This is here as bloaty_config_file cannot be an empty string or GN fails.
  # TODO(frolv): Add this file and enable size reports on Windows.
  pw_bloat_BLOATY_CONFIG = get_path_info("windows.bloaty", "abspath")
  pw_unit_test_AUTOMATIC_RUNNER = get_path_info("run_test.bat", "abspath")
}

_os_specific_config = {
  if (host_os == "linux") {
    forward_variables_from(_linux_config, "*")
  } else if (host_os == "mac") {
    forward_variables_from(_mac_config, "*")
  } else if (host_os == "win") {
    forward_variables_from(_win_config, "*")
  }
}

_clang_default_configs = [
  "$dir_pw_build:extra_strict_warnings",
  "$dir_pw_build:clang_thread_safety_warnings",
]
_internal_clang_default_configs =
    _clang_default_configs + [ "$dir_pw_build:internal_strict_warnings" ]

_gcc_default_configs = [
  "$dir_pw_build:extra_strict_warnings",
  "$dir_pw_toolchain/host_gcc:threading_support",
]
_internal_gcc_default_configs =
    _gcc_default_configs + [ "$dir_pw_build:internal_strict_warnings" ]

_excluded_members = [
  "defaults",
  "name",
]

pw_target_toolchain_host = {
  clang_debug = {
    name = "host_clang_debug"
    _toolchain_base = pw_toolchain_host_clang.debug
    forward_variables_from(_toolchain_base, "*", _excluded_members)
    defaults = {
      forward_variables_from(_toolchain_base.defaults, "*")
      forward_variables_from(_host_common, "*")
      forward_variables_from(_os_specific_config, "*")
      default_configs += _clang_default_configs
    }
  }

  clang_speed_optimized = {
    name = "host_clang_speed_optimized"
    _toolchain_base = pw_toolchain_host_clang.speed_optimized
    forward_variables_from(_toolchain_base, "*", _excluded_members)
    defaults = {
      forward_variables_from(_toolchain_base.defaults, "*")
      forward_variables_from(_host_common, "*")
      forward_variables_from(_os_specific_config, "*")
      default_configs += _clang_default_configs
    }
  }

  clang_size_optimized = {
    name = "host_clang_size_optimized"
    _toolchain_base = pw_toolchain_host_clang.size_optimized
    forward_variables_from(_toolchain_base, "*", _excluded_members)
    defaults = {
      forward_variables_from(_toolchain_base.defaults, "*")
      forward_variables_from(_host_common, "*")
      forward_variables_from(_os_specific_config, "*")
      default_configs += _clang_default_configs
    }
  }

  clang_fuzz = {
    name = "host_clang_fuzz"
    _toolchain_base = pw_toolchain_host_clang.fuzz
    forward_variables_from(_toolchain_base, "*", _excluded_members)
    defaults = {
      forward_variables_from(_toolchain_base.defaults, "*")
      forward_variables_from(_host_common, "*")
      forward_variables_from(_os_specific_config, "*")
      default_configs += _clang_default_configs
    }
  }

  clang_asan = {
    name = "host_clang_asan"
    _toolchain_base = pw_toolchain_host_clang.asan
    forward_variables_from(_toolchain_base, "*", _excluded_members)
    defaults = {
      forward_variables_from(_toolchain_base.defaults, "*")
      forward_variables_from(_host_common, "*")
      forward_variables_from(_os_specific_config, "*")
      default_configs += _clang_default_configs
    }
  }

  clang_ubsan = {
    name = "host_clang_ubsan"
    _toolchain_base = pw_toolchain_host_clang.ubsan
    forward_variables_from(_toolchain_base, "*", _excluded_members)
    defaults = {
      forward_variables_from(_toolchain_base.defaults, "*")
      forward_variables_from(_host_common, "*")
      forward_variables_from(_os_specific_config, "*")
      default_configs += _clang_default_configs
    }
  }

  clang_ubsan_heuristic = {
    name = "host_clang_ubsan_heuristic"
    _toolchain_base = pw_toolchain_host_clang.ubsan_heuristic
    forward_variables_from(_toolchain_base, "*", _excluded_members)
    defaults = {
      forward_variables_from(_toolchain_base.defaults, "*")
      forward_variables_from(_host_common, "*")
      forward_variables_from(_os_specific_config, "*")
      default_configs += _clang_default_configs
    }
  }

  clang_msan = {
    name = "host_clang_msan"
    _toolchain_base = pw_toolchain_host_clang.msan
    forward_variables_from(_toolchain_base, "*", _excluded_members)
    defaults = {
      forward_variables_from(_toolchain_base.defaults, "*")
      forward_variables_from(_host_common, "*")
      forward_variables_from(_os_specific_config, "*")
      default_configs += _clang_default_configs
    }
  }

  clang_tsan = {
    name = "host_clang_tsan"
    _toolchain_base = pw_toolchain_host_clang.tsan
    forward_variables_from(_toolchain_base, "*", _excluded_members)
    defaults = {
      forward_variables_from(_toolchain_base.defaults, "*")
      forward_variables_from(_host_common, "*")
      forward_variables_from(_os_specific_config, "*")
      default_configs += _clang_default_configs
    }
  }

  gcc_debug = {
    name = "host_gcc_debug"
    _toolchain_base = pw_toolchain_host_gcc.debug
    forward_variables_from(_toolchain_base, "*", _excluded_members)
    defaults = {
      forward_variables_from(_toolchain_base.defaults, "*")
      forward_variables_from(_host_common, "*")
      forward_variables_from(_os_specific_config, "*")
      default_configs += _gcc_default_configs
    }
  }

  gcc_speed_optimized = {
    name = "host_gcc_speed_optimized"
    _toolchain_base = pw_toolchain_host_gcc.speed_optimized
    forward_variables_from(_toolchain_base, "*", _excluded_members)
    defaults = {
      forward_variables_from(_toolchain_base.defaults, "*")
      forward_variables_from(_host_common, "*")
      forward_variables_from(_os_specific_config, "*")
      default_configs += _gcc_default_configs
    }
  }

  gcc_size_optimized = {
    name = "host_gcc_size_optimized"
    _toolchain_base = pw_toolchain_host_gcc.size_optimized
    forward_variables_from(_toolchain_base, "*", _excluded_members)
    defaults = {
      forward_variables_from(_toolchain_base.defaults, "*")
      forward_variables_from(_host_common, "*")
      forward_variables_from(_os_specific_config, "*")
      default_configs += _gcc_default_configs
    }
  }
}

# This list just contains the members of the above scope for convenience to make
# it trivial to generate all the toolchains in this file via a
# `generate_toolchains` target.
pw_target_toolchain_host_list = [
  pw_target_toolchain_host.clang_debug,
  pw_target_toolchain_host.clang_speed_optimized,
  pw_target_toolchain_host.clang_size_optimized,
  pw_target_toolchain_host.clang_fuzz,
  pw_target_toolchain_host.clang_asan,
  pw_target_toolchain_host.clang_ubsan,
  pw_target_toolchain_host.clang_ubsan_heuristic,
  pw_target_toolchain_host.clang_msan,
  pw_target_toolchain_host.clang_tsan,
  pw_target_toolchain_host.gcc_debug,
  pw_target_toolchain_host.gcc_speed_optimized,
  pw_target_toolchain_host.gcc_size_optimized,
]

# Additional configuration intended only for upstream Pigweed use.
_pigweed_internal = {
  pw_status_CONFIG = "$dir_pw_status:check_if_used"

  # TODO(b/241565082): Enable NC testing in GN Windows when it is fixed.
  pw_compilation_testing_NEGATIVE_COMPILATION_ENABLED = host_os != "win"
}

# Host toolchains exclusively for upstream Pigweed use. To give upstream Pigweed
# flexibility in how it compiles code, these toolchains may not be used by
# downstream projects.
pw_internal_host_toolchains = [
  {
    name = "pw_strict_host_clang_debug"
    _toolchain_base = pw_toolchain_host_clang.debug
    forward_variables_from(_toolchain_base, "*", _excluded_members)
    defaults = {
      forward_variables_from(_toolchain_base.defaults, "*")
      forward_variables_from(_host_common, "*")
      forward_variables_from(_pigweed_internal, "*")
      forward_variables_from(_os_specific_config, "*")
      default_configs += _internal_clang_default_configs
    }
  },
  {
    name = "pw_strict_host_clang_speed_optimized"
    _toolchain_base = pw_toolchain_host_clang.speed_optimized
    forward_variables_from(_toolchain_base, "*", _excluded_members)
    defaults = {
      forward_variables_from(_toolchain_base.defaults, "*")
      forward_variables_from(_host_common, "*")
      forward_variables_from(_pigweed_internal, "*")
      forward_variables_from(_os_specific_config, "*")
      default_configs += _internal_clang_default_configs
    }
  },
  {
    name = "pw_strict_host_clang_size_optimized"
    _toolchain_base = pw_toolchain_host_clang.size_optimized
    forward_variables_from(_toolchain_base, "*", _excluded_members)
    defaults = {
      forward_variables_from(_toolchain_base.defaults, "*")
      forward_variables_from(_host_common, "*")
      forward_variables_from(_pigweed_internal, "*")
      forward_variables_from(_os_specific_config, "*")
      default_configs += _internal_clang_default_configs
    }
  },
  {
    name = "pw_strict_host_gcc_debug"
    _toolchain_base = pw_toolchain_host_gcc.debug
    forward_variables_from(_toolchain_base, "*", _excluded_members)
    defaults = {
      forward_variables_from(_toolchain_base.defaults, "*")
      forward_variables_from(_host_common, "*")
      forward_variables_from(_pigweed_internal, "*")
      forward_variables_from(_os_specific_config, "*")
      default_configs += _internal_gcc_default_configs
    }
  },
  {
    name = "pw_strict_host_gcc_speed_optimized"
    _toolchain_base = pw_toolchain_host_gcc.speed_optimized
    forward_variables_from(_toolchain_base, "*", _excluded_members)
    defaults = {
      forward_variables_from(_toolchain_base.defaults, "*")
      forward_variables_from(_host_common, "*")
      forward_variables_from(_pigweed_internal, "*")
      forward_variables_from(_os_specific_config, "*")
      default_configs += _internal_gcc_default_configs
    }
  },
  {
    name = "pw_strict_host_gcc_size_optimized"
    _toolchain_base = pw_toolchain_host_gcc.size_optimized
    forward_variables_from(_toolchain_base, "*", _excluded_members)
    defaults = {
      forward_variables_from(_toolchain_base.defaults, "*")
      forward_variables_from(_host_common, "*")
      forward_variables_from(_pigweed_internal, "*")
      forward_variables_from(_os_specific_config, "*")
      default_configs += _internal_gcc_default_configs
    }
  },
  {
    name = "pw_strict_host_clang_debug_cpp14"
    _toolchain_base = pw_toolchain_host_clang.debug
    forward_variables_from(_toolchain_base, "*", _excluded_members)
    defaults = {
      forward_variables_from(_toolchain_base.defaults, "*")
      forward_variables_from(_host_common, "*")
      forward_variables_from(_pigweed_internal, "*")
      forward_variables_from(_os_specific_config, "*")
      default_configs += _internal_clang_default_configs

      # Set the C++ standard to C++14 instead of the default (C++17).
      pw_toolchain_CXX_STANDARD = pw_toolchain_STANDARD.CXX14

      # Do not do negative compilation testing with C++14 since the code may
      # fail to compile for different reasons than in C++17 or newer.
      pw_compilation_testing_NEGATIVE_COMPILATION_ENABLED = false

      # Select C++14-compatible backends.
      pw_assert_BACKEND = "$dir_pw_assert:print_and_abort_check_backend"
      pw_log_BACKEND = "$dir_pw_log_null"
      pw_unit_test_MAIN = "$dir_pw_unit_test:printf_main"
    }
  },
  {
    name = "pw_strict_host_clang_size_optimized_cpp20"
    _toolchain_base = pw_toolchain_host_clang.size_optimized
    forward_variables_from(_toolchain_base, "*", _excluded_members)
    defaults = {
      forward_variables_from(_toolchain_base.defaults, "*")
      forward_variables_from(_host_common, "*")
      forward_variables_from(_pigweed_internal, "*")
      forward_variables_from(_os_specific_config, "*")
      default_configs += _internal_clang_default_configs

      # Don't enable span asserts since C++20 provides the implementation for
      # pw::span, and there's no way to ensure asserts are enabled for the C++
      # standard library's std::span implementation.
      pw_span_ENABLE_ASSERTS = false

      # Set the C++ standard to C++20 instead of the default.
      pw_toolchain_CXX_STANDARD = pw_toolchain_STANDARD.CXX20
    }
  },
]
