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

import("$dir_pw_arduino_build/arduino.gni")
import("$dir_pw_build/host_tool.gni")
import("$dir_pw_build/python.gni")
import("$dir_pw_docgen/docs.gni")
import("$dir_pw_toolchain/generate_toolchain.gni")
import("$dir_pw_unit_test/test.gni")

# Main build file for upstream Pigweed.

declare_args() {
  # The default optimization level for building upstream Pigweed targets.
  #
  # Choices:
  #   debug
  #   size_optimized
  #   speed_optimized
  pw_default_optimization_level = "debug"

  # List of application image GN targets specific to the Pigweed target.
  pw_TARGET_APPLICATIONS = []
}

# Enumerate all of the different targets that upstream Pigweed will build by
# default. Downstream projects should not depend on this target; this target is
# exclusively to facilitate easy upstream development and testing.
group("default") {
  deps = [
    ":docs",
    ":host",
    ":python.install",
    ":python.lint",
    ":python.tests",
    ":stm32f429i",
    ":target_support_packages.lint",
    ":target_support_packages.tests",
  ]
}

# This template generates a group that builds pigweed_default with a particular
# toolchain.
template("_build_pigweed_default_at_all_optimization_levels") {
  _toolchain_prefix = invoker.toolchain_prefix

  group(target_name) {
    deps = [
      ":pigweed_default(${_toolchain_prefix}$pw_default_optimization_level)",
    ]
  }

  foreach(optimization,
          [
            "debug",
            "size_optimized",
            "speed_optimized",
          ]) {
    group(target_name + "_$optimization") {
      deps = [ ":pigweed_default($_toolchain_prefix$optimization)" ]
    }
  }
}

# Select a default toolchain based on host OS.
if (host_os == "linux") {
  _default_toolchain_prefix = "$dir_pigweed/targets/host:host_clang_"
} else if (host_os == "mac") {
  _default_toolchain_prefix = "$dir_pigweed/targets/host:host_clang_"
} else if (host_os == "win") {
  _default_toolchain_prefix = "$dir_pigweed/targets/host:host_gcc_"
} else {
  assert(false, "Please define a host config for your system: $host_os")
}

# Below are a list of GN targets you can build to force Pigweed to build for a
# specific Pigweed target.
_build_pigweed_default_at_all_optimization_levels("host") {
  toolchain_prefix = _default_toolchain_prefix
}

_build_pigweed_default_at_all_optimization_levels("host_clang") {
  toolchain_prefix = "$dir_pigweed/targets/host:host_clang_"
}

_build_pigweed_default_at_all_optimization_levels("host_gcc") {
  toolchain_prefix = "$dir_pigweed/targets/host:host_gcc_"
}

_build_pigweed_default_at_all_optimization_levels("stm32f429i") {
  toolchain_prefix = "$dir_pigweed/targets/stm32f429i-disc1:stm32f429i_disc1_"
}

if (pw_arduino_build_CORE_PATH != "") {
  _build_pigweed_default_at_all_optimization_levels("arduino") {
    toolchain_prefix = "$dir_pigweed/targets/arduino:arduino_"
  }
}

_build_pigweed_default_at_all_optimization_levels("qemu") {
  toolchain_prefix = "$dir_pigweed/targets/lm3s6965evb-qemu:lm3s6965evb_qemu_"
}

group("docs") {
  deps = [ ":pigweed_default($dir_pigweed/targets/docs)" ]
}

pw_python_group("python") {
  python_deps = [
    # Python packages
    "$dir_pw_allocator/py",
    "$dir_pw_arduino_build/py",
    "$dir_pw_bloat/py",
    "$dir_pw_build/py",
    "$dir_pw_cli/py",
    "$dir_pw_cpu_exception_cortex_m/py",
    "$dir_pw_docgen/py",
    "$dir_pw_doctor/py",
    "$dir_pw_env_setup/py",
    "$dir_pw_hdlc/py",
    "$dir_pw_module/py",
    "$dir_pw_package/py",
    "$dir_pw_presubmit/py",
    "$dir_pw_protobuf/py",
    "$dir_pw_protobuf_compiler/py",
    "$dir_pw_rpc/py",
    "$dir_pw_status/py",
    "$dir_pw_tokenizer/py",
    "$dir_pw_trace/py",
    "$dir_pw_trace_tokenized/py",
    "$dir_pw_unit_test/py",
    "$dir_pw_watch/py",

    # Standalone scripts
    "$dir_pw_hdlc/rpc_example:example_script",
  ]
}

# Python packages for supporting specific targets.
pw_python_group("target_support_packages") {
  python_deps = [
    "$dir_pigweed/targets/lm3s6965evb-qemu/py",
    "$dir_pigweed/targets/stm32f429i-disc1/py",
  ]
}

# By default, Pigweed will build this target when invoking ninja.
group("pigweed_default") {
  deps = []

  # Prevent the default toolchain from parsing any other BUILD.gn files.
  if (current_toolchain != default_toolchain) {
    if (pw_docgen_BUILD_DOCS) {
      deps += [ "$dir_pigweed/docs" ]
    } else {
      deps += [ ":apps" ]
      if (pw_unit_test_AUTOMATIC_RUNNER == "") {
        # Without a test runner defined, build the tests but don't run them.
        deps += [ ":pw_module_tests" ]
      } else {
        # With a test runner, depend on the run targets so they run with the
        # build.
        deps += [ ":pw_module_tests.run" ]
      }
    }
    if (defined(pw_toolchain_SCOPE.is_host_toolchain) &&
        pw_toolchain_SCOPE.is_host_toolchain && pw_build_HOST_TOOLS) {
      deps += [ ":host_tools" ]
    }

    # Trace examples currently only support running on non-windows host
    if (defined(pw_toolchain_SCOPE.is_host_toolchain) &&
        pw_toolchain_SCOPE.is_host_toolchain && host_os != "win") {
      deps += [
        "$dir_pw_trace:trace_example_basic",
        "$dir_pw_trace_tokenized:trace_tokenized_example_basic",
        "$dir_pw_trace_tokenized:trace_tokenized_example_filter",
        "$dir_pw_trace_tokenized:trace_tokenized_example_trigger",
      ]
    }
  }
}

# Prevent the default toolchain from parsing any other BUILD.gn files.
if (current_toolchain != default_toolchain) {
  group("apps") {
    # Application images built for all targets.
    deps = [ "$dir_pw_hdlc/rpc_example" ]

    # Add target-specific images.
    deps += pw_TARGET_APPLICATIONS
  }

  group("host_tools") {
    deps = [
      "$dir_pw_target_runner/go:simple_client",
      "$dir_pw_target_runner/go:simple_server",
    ]
  }

  # All Pigweed modules that can be built using gn. This is not built by default.
  group("pw_modules") {
    deps = [
      "$dir_pigweed/docs",
      "$dir_pw_allocator",
      "$dir_pw_base64",
      "$dir_pw_blob_store",
      "$dir_pw_bytes",
      "$dir_pw_checksum",
      "$dir_pw_chrono",
      "$dir_pw_cpu_exception",
      "$dir_pw_hdlc",
      "$dir_pw_i2c",
      "$dir_pw_metric",
      "$dir_pw_polyfill",
      "$dir_pw_preprocessor",
      "$dir_pw_protobuf",
      "$dir_pw_result",
      "$dir_pw_status",
      "$dir_pw_stream",
      "$dir_pw_string",
      "$dir_pw_sync",
      "$dir_pw_sys_io",
      "$dir_pw_thread",
      "$dir_pw_trace",
      "$dir_pw_unit_test",
      "$dir_pw_varint",
    ]

    if (host_os != "win") {
      deps += [
        # TODO(frolv): Remove these two when new KVS is ready.
        "$dir_pw_kvs",
        "$dir_pw_minimal_cpp_stdlib",

        # TODO(pwbug/111): Remove this when building successfully on Windows.
        "$dir_pw_tokenizer",
      ]
    }
  }

  # Targets for all module unit test groups.
  pw_test_group("pw_module_tests") {
    group_deps = [
      "$dir_pw_allocator:tests",
      "$dir_pw_assert:tests",
      "$dir_pw_base64:tests",
      "$dir_pw_blob_store:tests",
      "$dir_pw_bytes:tests",
      "$dir_pw_checksum:tests",
      "$dir_pw_chrono:tests",
      "$dir_pw_containers:tests",
      "$dir_pw_cpu_exception_armv7m:tests",
      "$dir_pw_fuzzer:tests",
      "$dir_pw_hdlc:tests",
      "$dir_pw_hex_dump:tests",
      "$dir_pw_log:tests",
      "$dir_pw_log_multisink:tests",
      "$dir_pw_log_null:tests",
      "$dir_pw_log_rpc:tests",
      "$dir_pw_log_sink:tests",
      "$dir_pw_log_tokenized:tests",
      "$dir_pw_malloc_freelist:tests",
      "$dir_pw_metric:tests",
      "$dir_pw_polyfill:tests",
      "$dir_pw_preprocessor:tests",
      "$dir_pw_protobuf:tests",
      "$dir_pw_protobuf_compiler:tests",
      "$dir_pw_random:tests",
      "$dir_pw_result:tests",
      "$dir_pw_ring_buffer:tests",
      "$dir_pw_router:tests",
      "$dir_pw_rpc:tests",
      "$dir_pw_span:tests",
      "$dir_pw_status:tests",
      "$dir_pw_stream:tests",
      "$dir_pw_string:tests",
      "$dir_pw_sync:tests",
      "$dir_pw_thread:tests",
      "$dir_pw_tokenizer:tests",
      "$dir_pw_trace:tests",
      "$dir_pw_trace_tokenized:tests",
      "$dir_pw_unit_test:tests",
      "$dir_pw_varint:tests",
    ]

    if (defined(pw_toolchain_SCOPE.is_host_toolchain) &&
        pw_toolchain_SCOPE.is_host_toolchain) {
      # TODO(pwbug/196): KVS tests are not compatible with device builds as they
      # use features such as std::map and are computationally expensive. Solving
      # this requires a more complex capabilities-based build and configuration
      # system which allowing enabling specific tests for targets that support
      # them and modifying test parameters for different targets.
      #
      # Checking for pw_build_host_tools (which is only set by the host) is a
      # temporary fix until the problem can be properly solved.
      group_deps += [ "$dir_pw_kvs:tests" ]
    }

    if (host_os != "win") {
      # TODO(amontanez): pw_minimal_cpp_stdlib tests do not build on windows.
      group_deps += [ "$dir_pw_minimal_cpp_stdlib:tests" ]
    }
  }
}
