# 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" ])

# Windows' assembly is built with Yasm. The other platforms use the platform
# assembler.
if (is_win) {
  import("//third_party/yasm/yasm_assemble.gni")
  yasm_assemble("boringssl_asm") {
    if (cpu_arch == "x64") {
      sources = gypi_values.boringssl_win_x86_64_sources
    } else if (cpu_arch == "x86") {
      sources = gypi_values.boringssl_win_x86_sources
    }
  }
}

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 (is_win) {
    # TODO(davidben): Fix size_t truncations in BoringSSL.
    # https://crbug.com/429039
    cflags += [ "/wd4267"]
  }

  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) {
      deps += [ ":boringssl_asm" ]
    } 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 if (is_win) {
      deps += [ ":boringssl_asm" ]
    } else {
      defines += [ "OPENSSL_NO_ASM" ]
    }
  } else if (cpu_arch == "arm") {
    sources += gypi_values.boringssl_linux_arm_sources
  } else {
    defines += [ "OPENSSL_NO_ASM" ]
  }
}
