# 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_jessie_i386-sysroot", root_build_dir)
  } else if (current_cpu == "x64") {
    target_sysroot =
        rebase_path("//build/linux/debian_jessie_amd64-sysroot", root_build_dir)
  } else if (current_cpu == "arm") {
    target_sysroot =
        rebase_path("//build/linux/debian_jessie_arm-sysroot", root_build_dir)
  } else if (current_cpu == "arm64") {
    target_sysroot =
        rebase_path("//build/linux/debian_jessie_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 = ""
}
