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

import("//build/config/c++/c++.gni")
import("//build/config/chromeos/ui_mode.gni")
import("//build/config/linux/pkg_config.gni")
import("//build/config/ui.gni")

group("linux") {
  visibility = [ "//:optimize_gn_gen" ]
}

# This is included by reference in the //build/config/compiler config that
# is applied to all targets. It is here to separate out the logic that is
# Linux-only. This is not applied to Android, but is applied to ChromeOS.
config("compiler") {
  if (current_cpu == "arm64") {
    import("//build/config/arm.gni")
    cflags = []
    asmflags = []
    if (arm_control_flow_integrity == "standard") {
      cflags += [ "-mbranch-protection=standard" ]
      asmflags += [ "-mbranch-protection=standard" ]
    } else if (arm_control_flow_integrity == "pac") {
      cflags += [ "-mbranch-protection=pac-ret" ]
      asmflags += [ "-mbranch-protection=pac-ret" ]
    }
  }
}

# This is included by reference in the //build/config/compiler:runtime_library
# config that is applied to all targets. It is here to separate out the logic
# that is Linux-only. Please see that target for advice on what should go in
# :runtime_library vs. :compiler.
config("runtime_library") {
  # Set here because OS_CHROMEOS cannot be autodetected in build_config.h like
  # OS_LINUX and the like.
  if (is_chromeos) {
    defines = [ "OS_CHROMEOS" ]
  }

  if ((!is_chromeos || default_toolchain != "//build/toolchain/cros:target") &&
      (!use_custom_libcxx || current_cpu == "mipsel")) {
    libs = [ "atomic" ]
  }
}

config("libcap") {
  libs = [ "cap" ]
}

config("libresolv") {
  libs = [ "resolv" ]
}

if (use_glib) {
  pkg_config("glib") {
    packages = [
      "glib-2.0",
      "gmodule-2.0",
      "gobject-2.0",
      "gthread-2.0",
    ]
    defines = [
      "GLIB_VERSION_MAX_ALLOWED=GLIB_VERSION_2_56",
      "GLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_56",
    ]
  }
}
