# Copyright 2019 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

library("uboringssl") {
  kernel = true
  host = true
  static = true

  sources = [
    "crypto/fipsmodule/sha/sha256.c",
  ]

  if (is_kernel) {
    sources += [ "crypto/chacha/chacha.c" ]

    # Avoid circularity.
    configs -= [ "$zx/kernel/vm:headers.config" ]

    defines = [
      # The assembly code uses vector registers, which is not allowed in
      # kernel code.
      "OPENSSL_NO_ASM",
      "OPENSSL_NO_THREADS_CORRUPT_MEMORY_AND_LEAK_SECRETS_IF_THREADED",
    ]
  } else {
    configs += [ "$zx/public/gn/config:visibility_hidden" ]

    if (is_fuchsia) {
      deps = [
        "$zx/system/ulib/fdio",
        "$zx/system/ulib/zircon",
      ]
    } else {
      defines = [
        # Required for `pthread_rwlock_t`.
        "_XOPEN_SOURCE=700",
      ]
    }

    sources += [
      "crypto/cipher_extra/e_aesgcmsiv.c",
      "crypto/cpu-aarch64-fuchsia.c",
      "crypto/cpu-arm.c",
      "crypto/cpu-intel.c",
      "crypto/crypto.c",
      "crypto/err/err.c",
      "crypto/fipsmodule/aes/aes.c",
      "crypto/fipsmodule/aes/mode_wrappers.c",
      "crypto/fipsmodule/cipher/aead.c",
      "crypto/fipsmodule/cipher/cipher.c",
      "crypto/fipsmodule/cipher/e_aes.c",
      "crypto/fipsmodule/digest/digest.c",
      "crypto/fipsmodule/digest/digests.c",
      "crypto/fipsmodule/hmac/hmac.c",
      "crypto/fipsmodule/modes/gcm.c",
      "crypto/fipsmodule/modes/polyval.c",
      "crypto/hkdf/hkdf.c",
      "crypto/mem.c",
      "crypto/thread_pthread.c",
      "zircon-unused.c",

      # TODO(aarongreen): Replace or get upstream to support more fully.
      "decrepit/xts/xts.c",

      # Auto-generated sources.
      "err_data.c",
    ]

    if (current_cpu == "arm64") {
      sources += [
        "linux-aarch64/crypto/fipsmodule/aesv8-armx64.S",
        "linux-aarch64/crypto/fipsmodule/ghashv8-armx64.S",
        "linux-aarch64/crypto/fipsmodule/sha256-armv8.S",
      ]
    } else if (current_cpu == "x64") {
      if (current_os == "mac") {
        asm_dir = "mac-x86_64/crypto"
      } else {
        asm_dir = "linux-x86_64/crypto"
      }
      sources += [
        "$asm_dir/cipher_extra/aes128gcmsiv-x86_64.S",
        "$asm_dir/fipsmodule/aes-x86_64.S",
        "$asm_dir/fipsmodule/aesni-gcm-x86_64.S",
        "$asm_dir/fipsmodule/aesni-x86_64.S",
        "$asm_dir/fipsmodule/bsaes-x86_64.S",
        "$asm_dir/fipsmodule/ghash-x86_64.S",
        "$asm_dir/fipsmodule/sha256-x86_64.S",
        "$asm_dir/fipsmodule/vpaes-x86_64.S",
      ]
    }
  }
}
