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

import("//build/config/ios/deployment_target.gni")

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

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

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_gen_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",
    ]
  }

  _sdk_info = exec_script("//build/config/ios/scripts/sdk_info.py",
                          [
                            "--target-cpu",
                            current_cpu,
                            "--target-environment",
                            target_environment,
                            "--deployment-target",
                            ios_deployment_target,
                          ],
                          "json")

  _lib_swift_dir = "${_sdk_info.toolchain_path}/usr/lib/swift"
  if (current_os == "ios") {
    if (_sdk_info.is_simulator) {
      _system_lib_swift_dir = "$_lib_swift_dir/iphonesimulator"
    } else {
      _system_lib_swift_dir = "$_lib_swift_dir/iphoneos"
    }
  } else {
    _system_lib_swift_dir = "$_lib_swift_dir/macosx"
  }

  config("swift_libdir") {
    lib_dirs = [
      "${_sdk_info.sdk_path}/usr/lib/swift",
      _system_lib_swift_dir,
    ]
  }
}
