# Copyright 2014 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 for us and everybody else depending on BoringSSL.
config("openssl_config") {
  include_dirs = []
  include_dirs += [ "src/include" ]
  if (is_component_build) {
    defines = [
      "BORINGSSL_SHARED_LIBRARY",
    ]
  }
}

# Config internal to this build file.
config("openssl_internal_config") {
  visibility = [ ":*" ]  # Only targets in this file can depend on this.
}

# The list of BoringSSL files is kept in boringssl.gypi.
gypi_values = exec_script(
    "//build/gypi_to_gn.py",
    [ rebase_path("//third_party/boringssl/boringssl.gypi") ],
    "scope",
    [ "//third_party/boringssl/boringssl.gypi" ])

component("boringssl") {
  sources = gypi_values.boringssl_lib_sources

  public_configs = [ ":openssl_config" ]

  cflags = []
  defines = [
    "BORINGSSL_IMPLEMENTATION",
    "BORINGSSL_NO_STATIC_INITIALIZER",
  ]
  if (is_component_build) {
    defines += [
      "BORINGSSL_SHARED_LIBRARY",
    ]
  }

  configs -= [ "//build/config/compiler:chromium_code" ]
  configs += [ "//build/config/compiler:no_chromium_code" ]

  # Also gets the include dirs from :openssl_config
  include_dirs = [
    "src/include",
    # This is for arm_arch.h, which is needed by some asm files. Since the
    # asm files are generated and kept in a different directory, they
    # cannot use relative paths to find this file.
    "src/crypto",
  ]

  if (cpu_arch == "x64") {
    if (is_mac) {
      sources += gypi_values.boringssl_mac_x86_64_sources
    } else if (is_linux || is_android) {
      sources += gypi_values.boringssl_linux_x86_64_sources
    } else if (is_win) {
      sources += gypi_values.boringssl_win_x86_64_sources
    } else {
      defines += [ "OPENSSL_NO_ASM" ]
    }
  } else if (cpu_arch == "x86") {
    if (is_mac) {
      sources += gypi_values.boringssl_mac_x86_sources
    } else if (is_linux || is_android) {
      sources += gypi_values.boringssl_linux_x86_sources
    } else {
      defines += [ "OPENSSL_NO_ASM" ]
    }
  } else if (cpu_arch == "arm") {
    sources += gypi_values.boringssl_linux_arm_sources
  } else {
    defines += [ "OPENSSL_NO_ASM" ]
  }
}
