# Copyright (C) 2017 The Android Open Source Project
#
# 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
#
#      http://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/build.gni")

# Summary of our build configurations:

# 1. Standalone builds
#    perfetto_build_standalone = true
#    perfetto_build_with_embedder = false
#    perfetto_build_with_android = false
#    build_with_chromium = false

# 2. Android tree builds
#    perfetto_build_standalone = false
#    perfetto_build_with_android = true
#    perfetto_build_with_embedder = false
#    build_with_chromium = false

# 3. Chromium tree builds
#    perfetto_build_standalone = false
#    perfetto_build_with_android = false
#    perfetto_build_with_embedder = true
#    build_with_chromium = true

# 4. Builds in other embedder trees
#    perfetto_build_standalone = false
#    perfetto_build_with_android = false
#    perfetto_build_with_embedder = true
#    build_with_chromium = false

# Note that |build_with_chromium| is a global convention used by several
# projects, set outside of our control.

declare_args() {
  # The Android blueprint file generator overrides this to true.
  perfetto_build_with_android = false

  # Whether the ftrace producer and the service should be started
  # by the integration test or assumed to be running.
  start_daemons_for_testing = true
}

# Chromium sets this to true.
if (!defined(build_with_chromium)) {
  build_with_chromium = false
}

# Embedders can override this to true.
if (!defined(perfetto_build_with_embedder)) {
  perfetto_build_with_embedder = build_with_chromium
}

perfetto_force_dlog_default = ""
if (perfetto_build_with_embedder) {
  perfetto_force_dlog_default = "off"
}

declare_args() {
  # Whether DLOG should be enabled on debug builds (""), all builds ("on"), or
  # none ("off"). We disable it by default for embedders to avoid spamming their
  # console.
  perfetto_force_dlog = perfetto_force_dlog_default
}

assert(perfetto_force_dlog == "" || perfetto_force_dlog == "on" ||
       perfetto_force_dlog == "off")

perfetto_build_standalone =
    !perfetto_build_with_android && !build_with_chromium &&
    !perfetto_build_with_embedder

if (perfetto_build_standalone || perfetto_build_with_android) {
  perfetto_root_path = "//"
} else if (!defined(perfetto_root_path)) {
  perfetto_root_path = "//third_party/perfetto/"
}

# If we're building in the Android tree, we expect that the testing infra
# will start the binaries in the system image before the tests are run.
if (perfetto_build_with_android) {
  start_daemons_for_testing = false
}

# Cross-checks.

# Exactly one between build_with_android, build_standalone and
# build_with_embedder must be true.
assert(perfetto_build_standalone || perfetto_build_with_android ||
       perfetto_build_with_embedder)
assert(!(perfetto_build_with_android && perfetto_build_standalone))
assert(!(perfetto_build_with_embedder && perfetto_build_standalone))
assert(!(perfetto_build_with_android && perfetto_build_with_embedder))

# If |build_with_chromium| is true then also |perfetto_build_with_embedder|
# must be true
assert(!build_with_chromium || perfetto_build_with_embedder)

# Only perfetto itself (standalone or with android) and chromium should link
# in the IPC layer.
#
# This includes building things that rely on POSIX sockets, this places
# limitations on the supported operating systems.
perfetto_build_with_ipc_layer =
    (is_android || is_linux || is_mac) &&
    (perfetto_build_standalone || perfetto_build_with_android ||
     build_with_chromium)
