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

  # The type of sysroot to be used. Empty string means no sysroot.
  # Supported sysroots: ["alpine","debian"]
  dart_sysroot = ""
}

if (is_linux) {
  if (dart_sysroot == "alpine") {
    if (current_cpu == "x86") {
      target_sysroot =
          rebase_path("//buildtools/sysroot/alpine-linux-x86", root_build_dir)
    } else if (current_cpu == "x64") {
      target_sysroot = rebase_path("//buildtools/sysroot/alpine-linux-x86_64",
                                   root_build_dir)
    } else if (current_cpu == "arm") {
      target_sysroot = rebase_path("//buildtools/sysroot/alpine-linux-armv7",
                                   root_build_dir)
    } else if (current_cpu == "arm64") {
      target_sysroot = rebase_path("//buildtools/sysroot/alpine-linux-aarch64",
                                   root_build_dir)
    } else if (current_cpu == "riscv64") {
      target_sysroot = rebase_path("//buildtools/sysroot/alpine-linux-riscv64",
                                   root_build_dir)
    } else {
      print("There is no $dart_sysroot sysroot present for $current_cpu")
      assert(false)
    }
  } else if (dart_sysroot == "debian") {
    if (current_cpu == "riscv64") {
      target_sysroot = rebase_path("//buildtools/sysroot/focal", root_build_dir)
    } else {
      # Updating to focal would increase the required libc from 2.17 to 2.28.
      target_sysroot = rebase_path("//buildtools/sysroot/linux", root_build_dir)
    }
  } else if (dart_sysroot != "") {
    print("There is no $dart_sysroot sysroot support")
    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_toolchain_root/sysroot", root_build_dir)
} else if (is_mac) {
  import("//build/config/mac/mac_sdk.gni")
  sysroot = mac_sdk_path
} else {
  sysroot = ""
}
