# Copyright (c) 2013 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# This header file defines the "sysroot" variable which is the absolute path
# of the sysroot. If no sysroot applies, the variable will be an empty string.

declare_args() {
  # The absolute path of the sysroot that is applied when compiling using
  # the target toolchain.
  target_sysroot = ""

  # Whether the Debian sysroot should be used.
  dart_use_debian_sysroot = false
}

if (is_linux && dart_use_debian_sysroot) {
  if (current_cpu == "x86") {
    target_sysroot =
        rebase_path("//build/linux/debian_stretch_i386-sysroot", root_build_dir)
  } else if (current_cpu == "x64") {
    target_sysroot =
        rebase_path("//build/linux/debian_stretch_amd64-sysroot", root_build_dir)
  } else if (current_cpu == "arm") {
    target_sysroot =
        rebase_path("//build/linux/debian_stretch_arm-sysroot", root_build_dir)
  } else if (current_cpu == "arm64") {
    target_sysroot =
        rebase_path("//build/linux/debian_stretch_arm64-sysroot", root_build_dir)
  } else {
    print("There is no Debian sysroot present for $current_cpu")
    assert(false)
  }
}

if ((current_toolchain == host_toolchain ||
     current_toolchain == default_toolchain) && target_sysroot != "") {
  sysroot = target_sysroot
} else if (is_android) {
  import("//build/config/android/config.gni")
  sysroot = rebase_path("$android_ndk_root/sysroot")
} else if (is_mac) {
  import("//build/config/mac/mac_sdk.gni")
  sysroot = mac_sdk_path
} else {
  sysroot = ""
}
