# Copyright 2019 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.

config("compiler") {
  configs = [
    ":include_dirs",
    ":cpp_standard",
    ":objc_use_arc",
    ":objc_abi_version",
  ]
}

config("shared_binary") {
  if (current_os == "ios" || current_os == "mac") {
    configs = [ ":rpath_config" ]
  }
}

config("objc_abi_version") {
  cflags_objc = [ "-fobjc-abi-version=2" ]
  cflags_objcc = cflags_objc
  ldflags = [
    "-Xlinker",
    "-objc_abi_version",
    "-Xlinker",
    "2",
  ]
}

config("include_dirs") {
  include_dirs = [
    "//",
    root_out_dir,
  ]
}

config("objc_use_arc") {
  cflags_objc = [
    "-fobjc-arc",
    "-fobjc-weak",
  ]
  cflags_objcc = cflags_objc
}

config("cpp_standard") {
  cflags_c = [ "--std=c11" ]
  cflags_cc = [
    "--std=c++17",
    "--stdlib=libc++",
  ]
  ldflags = [ "--stdlib=libc++" ]
}

if (current_os == "ios" || current_os == "mac") {
  config("rpath_config") {
    ldflags = [
      "-Xlinker",
      "-rpath",
      "-Xlinker",
      "@executable_path/Frameworks",
      "-Xlinker",
      "-rpath",
      "-Xlinker",
      "@loader_path/Frameworks",
    ]
  }
}
