Moved base test support stuff to //base/test/

Moved gtest from //testing to //testing/gtest

By default, gn desc prints out all build flags (before it only printed them if you asked). Also, I added the objective C ones.

Added support for non-Windows assembly files.

Static libraries on Linux now start with "lib".

I added a new relative_source_root_dir which I needed for some grit work.

All dependencies of net now build, although net itself isn't done yet. This includes crypto, SSH, and the SSL library.

I worked a bunch on the libssl build. I added some build flags for configuring it to crypto/ssl. This is a nice demo of build modularization since this doesn't have to be in //build anymore.

I started working on a grit template to define the net resources. I found a bunch of things I need to implement so I'm checking the current state in with that stuff commented out and going to work on those features in a separate pass.

BUG=
[email protected]

Review URL: https://codereview.chromium.org/23112010

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@218838 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/tools/gn/secondary/crypto/BUILD.gn b/tools/gn/secondary/crypto/BUILD.gn
new file mode 100644
index 0000000..37b9be29
--- /dev/null
+++ b/tools/gn/secondary/crypto/BUILD.gn
@@ -0,0 +1,242 @@
+# Copyright (c) 2013 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("ssl/flags.gni")
+
+component("crypto") {
+  sources = [
+    "apple_keychain.h",
+    "apple_keychain_ios.mm",
+    "apple_keychain_mac.mm",
+    "capi_util.cc",
+    "capi_util.h",
+    "crypto_export.h",
+    "crypto_module_blocking_password_delegate.h",
+    "cssm_init.cc",
+    "cssm_init.h",
+    "curve25519.cc",
+    "curve25519.h",
+    "curve25519-donna.c",
+    "ghash.cc",
+    "ghash.h",
+    "ec_private_key.h",
+    "ec_private_key_nss.cc",
+    "ec_private_key_openssl.cc",
+    "ec_signature_creator.cc",
+    "ec_signature_creator.h",
+    "ec_signature_creator_impl.h",
+    "ec_signature_creator_nss.cc",
+    "ec_signature_creator_openssl.cc",
+    "encryptor.cc",
+    "encryptor.h",
+    "encryptor_nss.cc",
+    "encryptor_openssl.cc",
+    "hkdf.cc",
+    "hkdf.h",
+    "hmac_nss.cc",
+    "hmac_openssl.cc",
+    "mac_security_services_lock.cc",
+    "mac_security_services_lock.h",
+    # TODO(brettw) these mocks should be moved to a test_support_crypto target
+    # if possible.
+    "mock_apple_keychain.cc",
+    "mock_apple_keychain.h",
+    "mock_apple_keychain_ios.cc",
+    "mock_apple_keychain_mac.cc",
+    "p224_spake.cc",
+    "p224_spake.h",
+    "nss_util.cc",
+    "nss_util.h",
+    "nss_util_internal.h",
+    "openpgp_symmetric_encryption.cc",
+    "openpgp_symmetric_encryption.h",
+    "openssl_util.cc",
+    "openssl_util.h",
+    "p224.cc",
+    "p224.h",
+    "random.h",
+    "random.cc",
+    "rsa_private_key.cc",
+    "rsa_private_key.h",
+    "rsa_private_key_nss.cc",
+    "rsa_private_key_openssl.cc",
+    "scoped_capi_types.h",
+    "scoped_nss_types.h",
+    "secure_hash.h",
+    "secure_hash_default.cc",
+    "secure_hash_openssl.cc",
+    "sha2.cc",
+    "sha2.h",
+    "signature_creator.h",
+    "signature_creator_nss.cc",
+    "signature_creator_openssl.cc",
+    "signature_verifier.h",
+    "signature_verifier_nss.cc",
+    "signature_verifier_openssl.cc",
+    "symmetric_key_nss.cc",
+    "symmetric_key_openssl.cc",
+    "third_party/nss/chromium-blapi.h",
+    "third_party/nss/chromium-blapit.h",
+    "third_party/nss/chromium-nss.h",
+    "third_party/nss/pk11akey.cc",
+    "third_party/nss/rsawrapr.c",
+    "third_party/nss/secsign.cc",
+  ]
+
+  deps = [
+    ":crypto_minimal",
+    "//base",
+    "//base/third_party/dynamic_annotations",
+    "//crypto/ssl:metassl",
+  ]
+
+  if (!is_mac && !is_ios) {
+    sources -= [
+      "apple_keychain.h",
+      "mock_apple_keychain.cc",
+      "mock_apple_keychain.h",
+    ]
+  }
+
+  if (!is_linux) {
+    sources -= [
+      "openpgp_symmetric_encryption.cc",
+      "openpgp_symmetric_encryption.h",
+    ]
+  }
+  if (!is_mac) {
+    sources -= [
+      "cssm_init.cc",
+      "cssm_init.h",
+      "mac_security_services_lock.cc",
+      "mac_security_services_lock.h",
+    ]
+  }
+  if (!is_win) {
+    sources -= [
+      "capi_util.cc",
+      "capi_util.h",
+    ]
+  }
+
+  if (use_openssl) {
+    sources -= [
+      "ec_private_key_nss.cc",
+      "ec_signature_creator_nss.cc",
+      "encryptor_nss.cc",
+      "hmac_nss.cc",
+      "nss_util.cc",
+      "nss_util.h",
+      "openpgp_symmetric_encryption.cc",
+      "rsa_private_key_nss.cc",
+      "secure_hash_default.cc",
+      "signature_creator_nss.cc",
+      "signature_verifier_nss.cc",
+      "symmetric_key_nss.cc",
+      "third_party/nss/chromium-blapi.h",
+      "third_party/nss/chromium-blapit.h",
+      "third_party/nss/chromium-nss.h",
+      "third_party/nss/chromium-sha256.h",
+      "third_party/nss/pk11akey.cc",
+      "third_party/nss/rsawrapr.c",
+      "third_party/nss/secsign.cc",
+      "third_party/nss/sha512.cc",
+    ]
+  } else {
+    sources -= [
+      "ec_private_key_openssl.cc",
+      "ec_signature_creator_openssl.cc",
+      "encryptor_openssl.cc",
+      "hmac_openssl.cc",
+      "openssl_util.cc",
+      "openssl_util.h",
+      "rsa_private_key_openssl.cc",
+      "secure_hash_openssl.cc",
+      "signature_creator_openssl.cc",
+      "signature_verifier_openssl.cc",
+      "symmetric_key_openssl.cc",
+    ]
+  }
+
+  defines = [ "CRYPTO_IMPLEMENTATION" ]
+
+  # TODO(brettw) we probably need an equivalent of GYP's
+  # export_dependent_settings to forward direct_dependent_configs from a
+  # sub project to our children. For now, we copy these from ssl:metassl.
+  direct_dependent_configs = [ "ssl:ssl_preprocessor_flags" ]
+  if (is_linux) {
+    direct_dependent_configs += "//net/third_party/nss:nss_linux_config"
+  }
+}
+
+# A minimal crypto subset for core features that small standalone targets can
+# use to reduce code size.
+static_library("crypto_minimal") {
+  sources = [
+    "hmac.cc",
+    "hmac.h",
+    "hmac_win.cc",
+    "secure_util.cc",
+    "secure_util.h",
+    "symmetric_key.h",
+    "symmetric_key_win.cc",
+    "third_party/nss/chromium-sha256.h",
+    "third_party/nss/sha512.cc",
+  ]
+
+  deps = [
+    "//base",
+    "//base/third_party/dynamic_annotations",
+  ]
+
+  defines = [ "CRYPTO_IMPLEMENTATION" ]
+}
+
+test("crypto_unittests") {
+  sources = [
+    # Infrastructure files.
+    "run_all_unittests.cc",
+
+    # Tests.
+    "curve25519_unittest.cc",
+    "ec_private_key_unittest.cc",
+    "ec_signature_creator_unittest.cc",
+    "encryptor_unittest.cc",
+    "ghash_unittest.cc",
+    "hkdf_unittest.cc",
+    "hmac_unittest.cc",
+    "nss_util_unittest.cc",
+    "p224_unittest.cc",
+    "p224_spake_unittest.cc",
+    "random_unittest.cc",
+    "rsa_private_key_unittest.cc",
+    "rsa_private_key_nss_unittest.cc",
+    "secure_hash_unittest.cc",
+    "sha2_unittest.cc",
+    "signature_creator_unittest.cc",
+    "signature_verifier_unittest.cc",
+    "symmetric_key_unittest.cc",
+    "openpgp_symmetric_encryption_unittest.cc",
+  ]
+
+  if (use_openssl) {
+    sources -= [
+      "nss_util_unittest.cc",
+      "openpgp_symmetric_encryption_unittest.cc",
+      "rsa_private_key_nss_unittest,cc",
+    ]
+  }
+
+  deps = [
+    ":crypto",
+    "//base",
+    "//base/test:test_support_base",
+    "//testing/gmock",
+    "//testing/gtest",
+  ]
+
+  if (is_mac) {
+    deps += "//third_party/nss:nspr"
+  }
+}