Squashed 'third_party/bazel-toolchain/' content from commit a912bb381
Change-Id: Ie1ff8ed3b3948cca1d1b6227097c95e5a048de86
git-subtree-dir: third_party/bazel-toolchain
git-subtree-split: a912bb381b36437be0eeb22de11f0ea198450b4e
Signed-off-by: Brian Silverman <bsilver16834@gmail.com>
diff --git a/tests/BUILD.bazel b/tests/BUILD.bazel
new file mode 100644
index 0000000..e8d703f
--- /dev/null
+++ b/tests/BUILD.bazel
@@ -0,0 +1,110 @@
+# Copyright 2018 The Bazel Authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+load("@bazel_skylib//rules:build_test.bzl", "build_test")
+load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library", "cc_test")
+load(":transitions.bzl", "dwp_file")
+
+cc_library(
+ name = "stdlib",
+ srcs = ["stdlib.cc"],
+ hdrs = ["stdlib.h"],
+)
+
+# We want to emulate the behavior of cc_binary but be able to run the target as
+# a test, so we use a cc_test target with linkstatic.
+cc_test(
+ name = "stdlib_test",
+ srcs = ["stdlib_test.cc"],
+ linkstatic = True,
+ deps = [":stdlib"],
+)
+
+# We want to test a `.stripped` target to make sure `llvm-strip` can be called.
+#
+# For this we need `cc_binary`; `cc_test` does not create `.stripped` targets.
+cc_binary(
+ name = "stdlib_bin",
+ srcs = ["stdlib_test.cc"],
+ deps = [":stdlib"],
+)
+
+build_test(
+ name = "stripped_binary_test",
+ targets = [
+ ":stdlib_bin.stripped",
+ ],
+)
+
+# We want to test that `llvm-dwp` (used when assembling a `.dwp` file from
+# `.dwo` files) can be called.
+#
+# `--fission=yes` enables this for all compilation modes but we also need to
+# enable the `per_object_debug_info` feature manually because
+# `unix_cc_toolchain_config.bzl`'s` `cc_toolchain_config` does not (see #109).
+#
+# Additionally, newer versions of clang (12+) require a non-zero `-g` setting to
+# actually produce the `.dwo` files in addition to the `-gsplit-dwarf` flag. The
+# feature in `unix_cc_toolchain_config.bzl` should be updated to reflect this
+# and pass in an appropriate `-g` flag.
+#
+# bazelbuild/rules_cc#115 is a patch that does this
+# (https://github.com/bazelbuild/rules_cc/pull/115).
+#
+# bazelbuild/bazel#14028 tracks this
+# (https://github.com/bazelbuild/bazel/issues/14038).
+#
+# #109 in this repo and this comment
+# (https://github.com/grailbio/bazel-toolchain/pull/108#issuecomment-928839768)
+# have some additional details.
+#
+# For now, we'll specify `-c dbg` when building `.dwo` and `.dwp` files.
+#
+# This (setting the fission flag, enabling the `per_object_debug_info` feature,
+# and setting the compilation mode to `dbg`) is what `dwp_file` does using a
+# transition.
+#
+# Unfortunately `per_object_debug_info` breaks on macOS which is why this target
+# is marked as only being compatible with Linux (see #109).
+dwp_file(
+ name = "stdlib.dwp",
+ src = ":stdlib_bin",
+ # NOTE: we should eventually we able to drop this; see #109.
+ override_compilation_mode = "dbg",
+ target_compatible_with = [
+ "@platforms//os:linux",
+ ],
+)
+
+build_test(
+ name = "dwp_test",
+ targets = [
+ ":stdlib.dwp",
+ ],
+)
+
+cc_test(
+ name = "pthread_link_test",
+ srcs = ["pthread_link_test.cc"],
+ linkstatic = False,
+)
+
+sh_test(
+ name = "file_dependency_test",
+ srcs = ["file_dependency_test.sh"],
+ data = [
+ "@llvm_toolchain_llvm//:bin/clang-format",
+ "@llvm_toolchain_llvm//:lib/libc++.a",
+ ],
+)
diff --git a/tests/file_dependency_test.sh b/tests/file_dependency_test.sh
new file mode 100755
index 0000000..60e5cec
--- /dev/null
+++ b/tests/file_dependency_test.sh
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+fail() {
+ >&2 echo "$@"
+ exit 1
+}
+
+[[ -a "external/llvm_toolchain_llvm/bin/clang-format" ]] || fail "bin/clang-format not found"
+
+[[ -a "external/llvm_toolchain_llvm/lib/libc++.a" ]] || fail "lib/libc++.a not found"
+
+echo "SUCCESS!"
diff --git a/tests/foreign/BUILD.bazel b/tests/foreign/BUILD.bazel
new file mode 100644
index 0000000..99cfae4
--- /dev/null
+++ b/tests/foreign/BUILD.bazel
@@ -0,0 +1,28 @@
+# Copyright 2021 The Bazel Authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+load("@rules_foreign_cc//foreign_cc:defs.bzl", "cmake")
+
+# See https://bazelbuild.github.io/rules_foreign_cc/0.6.0/cmake.html
+cmake(
+ name = "pcre",
+ cache_entries = {
+ "CMAKE_C_FLAGS": "-fPIC",
+ },
+ lib_source = "@pcre//:all_srcs",
+ out_static_libs = ["libpcre.a"],
+)
+
+# A smaller test would be something like
+# https://github.com/bazelbuild/rules_foreign_cc/blob/0.6.0/examples/cmake_hello_world_lib/binary/BUILD.bazel
diff --git a/tests/openssl/BUILD.bazel b/tests/openssl/BUILD.bazel
new file mode 100644
index 0000000..36f2a23
--- /dev/null
+++ b/tests/openssl/BUILD.bazel
@@ -0,0 +1,4 @@
+exports_files(
+ srcs = glob(["**/*.h"]),
+ visibility = ["@openssl//:__pkg__"],
+)
diff --git a/tests/openssl/crypto/include/internal/bn_conf.h b/tests/openssl/crypto/include/internal/bn_conf.h
new file mode 100644
index 0000000..cb853e0
--- /dev/null
+++ b/tests/openssl/crypto/include/internal/bn_conf.h
@@ -0,0 +1,28 @@
+/* WARNING: do not edit! */
+/* Generated by Makefile from crypto/include/internal/bn_conf.h.in */
+/*
+ * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the OpenSSL license (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#ifndef HEADER_BN_CONF_H
+#define HEADER_BN_CONF_H
+
+/*
+ * The contents of this file are not used in the UEFI build, as
+ * both 32-bit and 64-bit builds are supported from a single run
+ * of the Configure script.
+ */
+
+/* Should we define BN_DIV2W here? */
+
+/* Only one for the following should be defined */
+#define SIXTY_FOUR_BIT_LONG
+#undef SIXTY_FOUR_BIT
+#undef THIRTY_TWO_BIT
+
+#endif
diff --git a/tests/openssl/crypto/include/internal/dso_conf.h b/tests/openssl/crypto/include/internal/dso_conf.h
new file mode 100644
index 0000000..71ff370
--- /dev/null
+++ b/tests/openssl/crypto/include/internal/dso_conf.h
@@ -0,0 +1,17 @@
+/* WARNING: do not edit! */
+/* Generated by Makefile from crypto/include/internal/dso_conf.h.in */
+/*
+ * Copyright 2016-2019 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the OpenSSL license (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#ifndef HEADER_DSO_CONF_H
+#define HEADER_DSO_CONF_H
+#define DSO_DLFCN
+#define HAVE_DLFCN_H
+#define DSO_EXTENSION ".dylib"
+#endif
diff --git a/tests/openssl/include/openssl/opensslconf.h b/tests/openssl/include/openssl/opensslconf.h
new file mode 100644
index 0000000..2c28a2b
--- /dev/null
+++ b/tests/openssl/include/openssl/opensslconf.h
@@ -0,0 +1,191 @@
+/*
+ * WARNING: do not edit!
+ * Generated by Makefile from include/openssl/opensslconf.h.in
+ *
+ * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the OpenSSL license (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <openssl/opensslv.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef OPENSSL_ALGORITHM_DEFINES
+#error OPENSSL_ALGORITHM_DEFINES no longer supported
+#endif
+
+/*
+ * OpenSSL was configured with the following options:
+ */
+
+#ifndef OPENSSL_NO_MD2
+#define OPENSSL_NO_MD2
+#endif
+#ifndef OPENSSL_NO_RC5
+#define OPENSSL_NO_RC5
+#endif
+#ifndef OPENSSL_THREADS
+#define OPENSSL_THREADS
+#endif
+#ifndef OPENSSL_RAND_SEED_OS
+#define OPENSSL_RAND_SEED_OS
+#endif
+#ifndef OPENSSL_NO_ASAN
+#define OPENSSL_NO_ASAN
+#endif
+#ifndef OPENSSL_NO_CRYPTO_MDEBUG
+#define OPENSSL_NO_CRYPTO_MDEBUG
+#endif
+#ifndef OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE
+#define OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE
+#endif
+#ifndef OPENSSL_NO_DEVCRYPTOENG
+#define OPENSSL_NO_DEVCRYPTOENG
+#endif
+#ifndef OPENSSL_NO_EC_NISTP_64_GCC_128
+#define OPENSSL_NO_EC_NISTP_64_GCC_128
+#endif
+#ifndef OPENSSL_NO_EGD
+#define OPENSSL_NO_EGD
+#endif
+#ifndef OPENSSL_NO_EXTERNAL_TESTS
+#define OPENSSL_NO_EXTERNAL_TESTS
+#endif
+#ifndef OPENSSL_NO_FUZZ_AFL
+#define OPENSSL_NO_FUZZ_AFL
+#endif
+#ifndef OPENSSL_NO_FUZZ_LIBFUZZER
+#define OPENSSL_NO_FUZZ_LIBFUZZER
+#endif
+#ifndef OPENSSL_NO_HEARTBEATS
+#define OPENSSL_NO_HEARTBEATS
+#endif
+#ifndef OPENSSL_NO_MSAN
+#define OPENSSL_NO_MSAN
+#endif
+#ifndef OPENSSL_NO_SCTP
+#define OPENSSL_NO_SCTP
+#endif
+#ifndef OPENSSL_NO_SSL_TRACE
+#define OPENSSL_NO_SSL_TRACE
+#endif
+#ifndef OPENSSL_NO_SSL3
+#define OPENSSL_NO_SSL3
+#endif
+#ifndef OPENSSL_NO_SSL3_METHOD
+#define OPENSSL_NO_SSL3_METHOD
+#endif
+#ifndef OPENSSL_NO_UBSAN
+#define OPENSSL_NO_UBSAN
+#endif
+#ifndef OPENSSL_NO_UNIT_TEST
+#define OPENSSL_NO_UNIT_TEST
+#endif
+#ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
+#define OPENSSL_NO_WEAK_SSL_CIPHERS
+#endif
+#ifndef OPENSSL_NO_STATIC_ENGINE
+#define OPENSSL_NO_STATIC_ENGINE
+#endif
+
+/*
+ * Sometimes OPENSSSL_NO_xxx ends up with an empty file and some compilers
+ * don't like that. This will hopefully silence them.
+ */
+#define NON_EMPTY_TRANSLATION_UNIT static void *dummy = &dummy;
+
+/*
+ * Applications should use -DOPENSSL_API_COMPAT=<version> to suppress the
+ * declarations of functions deprecated in or before <version>. Otherwise, they
+ * still won't see them if the library has been built to disable deprecated
+ * functions.
+ */
+#ifndef DECLARE_DEPRECATED
+#define DECLARE_DEPRECATED(f) f;
+#ifdef __GNUC__
+#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 0)
+#undef DECLARE_DEPRECATED
+#define DECLARE_DEPRECATED(f) f __attribute__((deprecated));
+#endif
+#endif
+#endif
+
+#ifndef OPENSSL_FILE
+#ifdef OPENSSL_NO_FILENAMES
+#define OPENSSL_FILE ""
+#define OPENSSL_LINE 0
+#else
+#define OPENSSL_FILE __FILE__
+#define OPENSSL_LINE __LINE__
+#endif
+#endif
+
+#ifndef OPENSSL_MIN_API
+#define OPENSSL_MIN_API 0
+#endif
+
+#if !defined(OPENSSL_API_COMPAT) || OPENSSL_API_COMPAT < OPENSSL_MIN_API
+#undef OPENSSL_API_COMPAT
+#define OPENSSL_API_COMPAT OPENSSL_MIN_API
+#endif
+
+/*
+ * Do not deprecate things to be deprecated in version 1.2.0 before the
+ * OpenSSL version number matches.
+ */
+#if OPENSSL_VERSION_NUMBER < 0x10200000L
+#define DEPRECATEDIN_1_2_0(f) f;
+#elif OPENSSL_API_COMPAT < 0x10200000L
+#define DEPRECATEDIN_1_2_0(f) DECLARE_DEPRECATED(f)
+#else
+#define DEPRECATEDIN_1_2_0(f)
+#endif
+
+#if OPENSSL_API_COMPAT < 0x10100000L
+#define DEPRECATEDIN_1_1_0(f) DECLARE_DEPRECATED(f)
+#else
+#define DEPRECATEDIN_1_1_0(f)
+#endif
+
+#if OPENSSL_API_COMPAT < 0x10000000L
+#define DEPRECATEDIN_1_0_0(f) DECLARE_DEPRECATED(f)
+#else
+#define DEPRECATEDIN_1_0_0(f)
+#endif
+
+#if OPENSSL_API_COMPAT < 0x00908000L
+#define DEPRECATEDIN_0_9_8(f) DECLARE_DEPRECATED(f)
+#else
+#define DEPRECATEDIN_0_9_8(f)
+#endif
+
+/* Generate 80386 code? */
+#undef I386_ONLY
+
+#undef OPENSSL_UNISTD
+#define OPENSSL_UNISTD <unistd.h>
+
+#undef OPENSSL_EXPORT_VAR_AS_FUNCTION
+
+/*
+ * The following are cipher-specific, but are part of the public API.
+ */
+#if !defined(OPENSSL_SYS_UEFI)
+#undef BN_LLONG
+/* Only one for the following should be defined */
+#define SIXTY_FOUR_BIT_LONG
+#undef SIXTY_FOUR_BIT
+#undef THIRTY_TWO_BIT
+#endif
+
+#define RC4_INT unsigned int
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/tests/openssl/openssl.bazel b/tests/openssl/openssl.bazel
new file mode 100644
index 0000000..c8bbf21
--- /dev/null
+++ b/tests/openssl/openssl.bazel
@@ -0,0 +1,916 @@
+# Copyright 2018 The Bazel Authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+package(default_visibility = ["//visibility:public"])
+
+COPTS = [
+ "-DL_ENDIAN",
+ "-DOPENSSL_PIC",
+ "-DOPENSSL_CPUID_OBJ",
+ "-DOPENSSL_IA32_SSE2",
+ "-DOPENSSL_BN_ASM_MONT",
+ "-DOPENSSL_BN_ASM_MONT5",
+ "-DOPENSSL_BN_ASM_GF2m",
+ "-DSHA1_ASM",
+ "-DSHA256_ASM",
+ "-DSHA512_ASM",
+ "-DKECCAK1600_ASM",
+ "-DRC4_ASM",
+ "-DMD5_ASM",
+ "-DAES_ASM",
+ "-DVPAES_ASM",
+ "-DBSAES_ASM",
+ "-DGHASH_ASM",
+ "-DECP_NISTZ256_ASM",
+ "-DX25519_ASM",
+ "-DPOLY1305_ASM",
+ "-DOPENSSLDIR=\\\"/usr/local/ssl\\\"",
+ "-DENGINESDIR=\\\"/usr/local/lib/engines-1.1\\\"",
+ "-D_REENTRANT",
+ "-DNDEBUG",
+ "-Wno-unused-command-line-argument",
+]
+
+CONF_FILES = [
+ "crypto/include/internal/bn_conf.h",
+ "crypto/include/internal/dso_conf.h",
+ "include/openssl/opensslconf.h",
+]
+
+genrule(
+ name = "configure",
+ srcs = [("@com_grail_bazel_toolchain//tests/openssl:" + f) for f in CONF_FILES],
+ outs = CONF_FILES,
+ cmd = "\n".join([
+ "cp $(location @com_grail_bazel_toolchain//tests/openssl:{0}) $(location {0})".format(f)
+ for f in CONF_FILES
+ ]),
+ visibility = ["//visibility:private"],
+)
+
+HDRS = glob(["include/**/*.h"]) + ["include/openssl/opensslconf.h"]
+
+genrule(
+ name = "gen-buildinf_h",
+ srcs = ["util/mkbuildinf.pl"],
+ outs = ["crypto/buildinf.h"],
+ cmd = "perl $(location util/mkbuildinf.pl) 'dummy' 'dummy' > $(location crypto/buildinf.h)",
+)
+
+genrule(
+ name = "gen-asm",
+ srcs = [
+ "crypto/aes/asm/aes-x86_64.pl",
+ "crypto/aes/asm/aesni-mb-x86_64.pl",
+ "crypto/aes/asm/aesni-sha1-x86_64.pl",
+ "crypto/aes/asm/aesni-sha256-x86_64.pl",
+ "crypto/aes/asm/aesni-x86_64.pl",
+ "crypto/aes/asm/bsaes-x86_64.pl",
+ "crypto/aes/asm/vpaes-x86_64.pl",
+ "crypto/bn/asm/rsaz-avx2.pl",
+ "crypto/bn/asm/rsaz-x86_64.pl",
+ "crypto/bn/asm/x86_64-gf2m.pl",
+ "crypto/bn/asm/x86_64-mont.pl",
+ "crypto/bn/asm/x86_64-mont5.pl",
+ "crypto/camellia/asm/cmll-x86_64.pl",
+ "crypto/chacha/asm/chacha-x86_64.pl",
+ "crypto/ec/ecp_nistz256_table.c",
+ "crypto/ec/asm/ecp_nistz256-x86_64.pl",
+ "crypto/ec/asm/x25519-x86_64.pl",
+ "crypto/md5/asm/md5-x86_64.pl",
+ "crypto/modes/asm/aesni-gcm-x86_64.pl",
+ "crypto/modes/asm/ghash-x86_64.pl",
+ "crypto/perlasm/x86_64-xlate.pl",
+ "crypto/poly1305/asm/poly1305-x86_64.pl",
+ "crypto/rc4/asm/rc4-md5-x86_64.pl",
+ "crypto/rc4/asm/rc4-x86_64.pl",
+ "crypto/sha/asm/keccak1600-x86_64.pl",
+ "crypto/sha/asm/sha1-mb-x86_64.pl",
+ "crypto/sha/asm/sha1-x86_64.pl",
+ "crypto/sha/asm/sha256-mb-x86_64.pl",
+ "crypto/sha/asm/sha512-x86_64.pl",
+ "crypto/whrlpool/asm/wp-x86_64.pl",
+ "crypto/x86_64cpuid.pl",
+ "engines/asm/e_padlock-x86_64.pl",
+ ],
+ outs = [
+ "crypto/aes/aes-x86_64.s",
+ "crypto/aes/aesni-mb-x86_64.s",
+ "crypto/aes/aesni-sha1-x86_64.s",
+ "crypto/aes/aesni-sha256-x86_64.s",
+ "crypto/aes/aesni-x86_64.s",
+ "crypto/aes/bsaes-x86_64.s",
+ "crypto/aes/vpaes-x86_64.s",
+ "crypto/bn/rsaz-avx2.s",
+ "crypto/bn/rsaz-x86_64.s",
+ "crypto/bn/x86_64-gf2m.s",
+ "crypto/bn/x86_64-mont.s",
+ "crypto/bn/x86_64-mont5.s",
+ "crypto/camellia/cmll-x86_64.s",
+ "crypto/chacha/chacha-x86_64.s",
+ "crypto/ec/ecp_nistz256-x86_64.s",
+ "crypto/ec/x25519-x86_64.s",
+ "crypto/md5/md5-x86_64.s",
+ "crypto/modes/aesni-gcm-x86_64.s",
+ "crypto/modes/ghash-x86_64.s",
+ "crypto/poly1305/poly1305-x86_64.s",
+ "crypto/rc4/rc4-md5-x86_64.s",
+ "crypto/rc4/rc4-x86_64.s",
+ "crypto/sha/keccak1600-x86_64.s",
+ "crypto/sha/sha1-mb-x86_64.s",
+ "crypto/sha/sha1-x86_64.s",
+ "crypto/sha/sha256-mb-x86_64.s",
+ "crypto/sha/sha256-x86_64.s",
+ "crypto/sha/sha512-x86_64.s",
+ "crypto/whrlpool/wp-x86_64.s",
+ "crypto/x86_64cpuid.s",
+ "engines/e_padlock-x86_64.s",
+ ],
+ cmd = "\n".join([
+ "FLAVOR='elf'",
+ "if [[ $$(uname -s) == 'Darwin' ]]; then FLAVOR='macosx'; fi",
+ "perl $(location crypto/aes/asm/aes-x86_64.pl) $$FLAVOR $(location crypto/aes/aes-x86_64.s)",
+ "perl $(location crypto/aes/asm/aesni-mb-x86_64.pl) $$FLAVOR $(location crypto/aes/aesni-mb-x86_64.s)",
+ "perl $(location crypto/aes/asm/aesni-sha1-x86_64.pl) $$FLAVOR $(location crypto/aes/aesni-sha1-x86_64.s)",
+ "perl $(location crypto/aes/asm/aesni-sha256-x86_64.pl) $$FLAVOR $(location crypto/aes/aesni-sha256-x86_64.s)",
+ "perl $(location crypto/aes/asm/aesni-x86_64.pl) $$FLAVOR $(location crypto/aes/aesni-x86_64.s)",
+ "perl $(location crypto/aes/asm/bsaes-x86_64.pl) $$FLAVOR $(location crypto/aes/bsaes-x86_64.s)",
+ "perl $(location crypto/aes/asm/vpaes-x86_64.pl) $$FLAVOR $(location crypto/aes/vpaes-x86_64.s)",
+ "perl $(location crypto/bn/asm/rsaz-avx2.pl) $$FLAVOR $(location crypto/bn/rsaz-avx2.s)",
+ "perl $(location crypto/bn/asm/rsaz-x86_64.pl) $$FLAVOR $(location crypto/bn/rsaz-x86_64.s)",
+ "perl $(location crypto/bn/asm/x86_64-gf2m.pl) $$FLAVOR $(location crypto/bn/x86_64-gf2m.s)",
+ "perl $(location crypto/bn/asm/x86_64-mont.pl) $$FLAVOR $(location crypto/bn/x86_64-mont.s)",
+ "perl $(location crypto/bn/asm/x86_64-mont5.pl) $$FLAVOR $(location crypto/bn/x86_64-mont5.s)",
+ "perl $(location crypto/camellia/asm/cmll-x86_64.pl) $$FLAVOR $(location crypto/camellia/cmll-x86_64.s)",
+ "perl $(location crypto/chacha/asm/chacha-x86_64.pl) $$FLAVOR $(location crypto/chacha/chacha-x86_64.s)",
+ "perl $(location crypto/ec/asm/ecp_nistz256-x86_64.pl) $$FLAVOR $(location crypto/ec/ecp_nistz256-x86_64.s)",
+ "perl $(location crypto/ec/asm/x25519-x86_64.pl) $$FLAVOR $(location crypto/ec/x25519-x86_64.s)",
+ "perl $(location crypto/md5/asm/md5-x86_64.pl) $$FLAVOR $(location crypto/md5/md5-x86_64.s)",
+ "perl $(location crypto/modes/asm/aesni-gcm-x86_64.pl) $$FLAVOR $(location crypto/modes/aesni-gcm-x86_64.s)",
+ "perl $(location crypto/modes/asm/ghash-x86_64.pl) $$FLAVOR $(location crypto/modes/ghash-x86_64.s)",
+ "perl $(location crypto/poly1305/asm/poly1305-x86_64.pl) $$FLAVOR $(location crypto/poly1305/poly1305-x86_64.s)",
+ "perl $(location crypto/rc4/asm/rc4-md5-x86_64.pl) $$FLAVOR $(location crypto/rc4/rc4-md5-x86_64.s)",
+ "perl $(location crypto/rc4/asm/rc4-x86_64.pl) $$FLAVOR $(location crypto/rc4/rc4-x86_64.s)",
+ "perl $(location crypto/sha/asm/keccak1600-x86_64.pl) $$FLAVOR $(location crypto/sha/keccak1600-x86_64.s)",
+ "perl $(location crypto/sha/asm/sha1-mb-x86_64.pl) $$FLAVOR $(location crypto/sha/sha1-mb-x86_64.s)",
+ "perl $(location crypto/sha/asm/sha1-x86_64.pl) $$FLAVOR $(location crypto/sha/sha1-x86_64.s)",
+ "perl $(location crypto/sha/asm/sha256-mb-x86_64.pl) $$FLAVOR $(location crypto/sha/sha256-mb-x86_64.s)",
+ "perl $(location crypto/sha/asm/sha512-x86_64.pl) $$FLAVOR $(location crypto/sha/sha256-x86_64.s)",
+ "perl $(location crypto/sha/asm/sha512-x86_64.pl) $$FLAVOR $(location crypto/sha/sha512-x86_64.s)",
+ "perl $(location crypto/whrlpool/asm/wp-x86_64.pl) $$FLAVOR $(location crypto/whrlpool/wp-x86_64.s)",
+ "perl $(location crypto/x86_64cpuid.pl) $$FLAVOR $(location crypto/x86_64cpuid.s)",
+ "perl $(location engines/asm/e_padlock-x86_64.pl) $$FLAVOR $(location engines/e_padlock-x86_64.s)",
+ ]),
+)
+
+cc_library(
+ name = "libcrypto",
+ srcs = [
+ "crypto/aes/aes-x86_64.s",
+ "crypto/aes/aes_cfb.c",
+ "crypto/aes/aes_ecb.c",
+ "crypto/aes/aes_ige.c",
+ "crypto/aes/aes_misc.c",
+ "crypto/aes/aes_ofb.c",
+ "crypto/aes/aes_wrap.c",
+ "crypto/aes/aesni-mb-x86_64.s",
+ "crypto/aes/aesni-sha1-x86_64.s",
+ "crypto/aes/aesni-sha256-x86_64.s",
+ "crypto/aes/aesni-x86_64.s",
+ "crypto/aes/bsaes-x86_64.s",
+ "crypto/aes/vpaes-x86_64.s",
+ "crypto/aria/aria.c",
+ "crypto/asn1/a_bitstr.c",
+ "crypto/asn1/a_d2i_fp.c",
+ "crypto/asn1/a_digest.c",
+ "crypto/asn1/a_dup.c",
+ "crypto/asn1/a_gentm.c",
+ "crypto/asn1/a_i2d_fp.c",
+ "crypto/asn1/a_int.c",
+ "crypto/asn1/a_mbstr.c",
+ "crypto/asn1/a_object.c",
+ "crypto/asn1/a_octet.c",
+ "crypto/asn1/a_print.c",
+ "crypto/asn1/a_sign.c",
+ "crypto/asn1/a_strex.c",
+ "crypto/asn1/a_strnid.c",
+ "crypto/asn1/a_time.c",
+ "crypto/asn1/a_type.c",
+ "crypto/asn1/a_utctm.c",
+ "crypto/asn1/a_utf8.c",
+ "crypto/asn1/a_verify.c",
+ "crypto/asn1/ameth_lib.c",
+ "crypto/asn1/asn1_err.c",
+ "crypto/asn1/asn1_gen.c",
+ "crypto/asn1/asn1_item_list.c",
+ "crypto/asn1/asn1_lib.c",
+ "crypto/asn1/asn1_par.c",
+ "crypto/asn1/asn_mime.c",
+ "crypto/asn1/asn_moid.c",
+ "crypto/asn1/asn_mstbl.c",
+ "crypto/asn1/asn_pack.c",
+ "crypto/asn1/bio_asn1.c",
+ "crypto/asn1/bio_ndef.c",
+ "crypto/asn1/d2i_pr.c",
+ "crypto/asn1/d2i_pu.c",
+ "crypto/asn1/evp_asn1.c",
+ "crypto/asn1/f_int.c",
+ "crypto/asn1/f_string.c",
+ "crypto/asn1/i2d_pr.c",
+ "crypto/asn1/i2d_pu.c",
+ "crypto/asn1/n_pkey.c",
+ "crypto/asn1/nsseq.c",
+ "crypto/asn1/p5_pbe.c",
+ "crypto/asn1/p5_pbev2.c",
+ "crypto/asn1/p5_scrypt.c",
+ "crypto/asn1/p8_pkey.c",
+ "crypto/asn1/t_bitst.c",
+ "crypto/asn1/t_pkey.c",
+ "crypto/asn1/t_spki.c",
+ "crypto/asn1/tasn_dec.c",
+ "crypto/asn1/tasn_enc.c",
+ "crypto/asn1/tasn_fre.c",
+ "crypto/asn1/tasn_new.c",
+ "crypto/asn1/tasn_prn.c",
+ "crypto/asn1/tasn_scn.c",
+ "crypto/asn1/tasn_typ.c",
+ "crypto/asn1/tasn_utl.c",
+ "crypto/asn1/x_algor.c",
+ "crypto/asn1/x_bignum.c",
+ "crypto/asn1/x_info.c",
+ "crypto/asn1/x_int64.c",
+ "crypto/asn1/x_long.c",
+ "crypto/asn1/x_pkey.c",
+ "crypto/asn1/x_sig.c",
+ "crypto/asn1/x_spki.c",
+ "crypto/asn1/x_val.c",
+ "crypto/async/arch/async_null.c",
+ "crypto/async/arch/async_posix.c",
+ "crypto/async/arch/async_win.c",
+ "crypto/async/async.c",
+ "crypto/async/async_err.c",
+ "crypto/async/async_wait.c",
+ "crypto/bf/bf_cfb64.c",
+ "crypto/bf/bf_ecb.c",
+ "crypto/bf/bf_enc.c",
+ "crypto/bf/bf_ofb64.c",
+ "crypto/bf/bf_skey.c",
+ "crypto/bio/b_addr.c",
+ "crypto/bio/b_dump.c",
+ "crypto/bio/b_print.c",
+ "crypto/bio/b_sock.c",
+ "crypto/bio/b_sock2.c",
+ "crypto/bio/bf_buff.c",
+ "crypto/bio/bf_lbuf.c",
+ "crypto/bio/bf_nbio.c",
+ "crypto/bio/bf_null.c",
+ "crypto/bio/bio_cb.c",
+ "crypto/bio/bio_err.c",
+ "crypto/bio/bio_lib.c",
+ "crypto/bio/bio_meth.c",
+ "crypto/bio/bss_acpt.c",
+ "crypto/bio/bss_bio.c",
+ "crypto/bio/bss_conn.c",
+ "crypto/bio/bss_dgram.c",
+ "crypto/bio/bss_fd.c",
+ "crypto/bio/bss_file.c",
+ "crypto/bio/bss_log.c",
+ "crypto/bio/bss_mem.c",
+ "crypto/bio/bss_null.c",
+ "crypto/bio/bss_sock.c",
+ "crypto/blake2/blake2b.c",
+ "crypto/blake2/blake2s.c",
+ "crypto/blake2/m_blake2b.c",
+ "crypto/blake2/m_blake2s.c",
+ "crypto/bn/asm/x86_64-gcc.c",
+ "crypto/bn/bn_add.c",
+ "crypto/bn/bn_blind.c",
+ "crypto/bn/bn_const.c",
+ "crypto/bn/bn_ctx.c",
+ "crypto/bn/bn_depr.c",
+ "crypto/bn/bn_dh.c",
+ "crypto/bn/bn_div.c",
+ "crypto/bn/bn_err.c",
+ "crypto/bn/bn_exp.c",
+ "crypto/bn/bn_exp2.c",
+ "crypto/bn/bn_gcd.c",
+ "crypto/bn/bn_gf2m.c",
+ "crypto/bn/bn_intern.c",
+ "crypto/bn/bn_kron.c",
+ "crypto/bn/bn_lib.c",
+ "crypto/bn/bn_mod.c",
+ "crypto/bn/bn_mont.c",
+ "crypto/bn/bn_mpi.c",
+ "crypto/bn/bn_mul.c",
+ "crypto/bn/bn_nist.c",
+ "crypto/bn/bn_prime.c",
+ "crypto/bn/bn_print.c",
+ "crypto/bn/bn_rand.c",
+ "crypto/bn/bn_recp.c",
+ "crypto/bn/bn_shift.c",
+ "crypto/bn/bn_sqr.c",
+ "crypto/bn/bn_sqrt.c",
+ "crypto/bn/bn_srp.c",
+ "crypto/bn/bn_word.c",
+ "crypto/bn/bn_x931p.c",
+ "crypto/bn/rsaz-avx2.s",
+ "crypto/bn/rsaz-x86_64.s",
+ "crypto/bn/rsaz_exp.c",
+ "crypto/bn/x86_64-gf2m.s",
+ "crypto/bn/x86_64-mont.s",
+ "crypto/bn/x86_64-mont5.s",
+ "crypto/buffer/buf_err.c",
+ "crypto/buffer/buffer.c",
+ "crypto/camellia/cmll-x86_64.s",
+ "crypto/camellia/cmll_cfb.c",
+ "crypto/camellia/cmll_ctr.c",
+ "crypto/camellia/cmll_ecb.c",
+ "crypto/camellia/cmll_misc.c",
+ "crypto/camellia/cmll_ofb.c",
+ "crypto/cast/c_cfb64.c",
+ "crypto/cast/c_ecb.c",
+ "crypto/cast/c_enc.c",
+ "crypto/cast/c_ofb64.c",
+ "crypto/cast/c_skey.c",
+ "crypto/chacha/chacha-x86_64.s",
+ "crypto/cmac/cm_ameth.c",
+ "crypto/cmac/cm_pmeth.c",
+ "crypto/cmac/cmac.c",
+ "crypto/cms/cms_asn1.c",
+ "crypto/cms/cms_att.c",
+ "crypto/cms/cms_cd.c",
+ "crypto/cms/cms_dd.c",
+ "crypto/cms/cms_enc.c",
+ "crypto/cms/cms_env.c",
+ "crypto/cms/cms_err.c",
+ "crypto/cms/cms_ess.c",
+ "crypto/cms/cms_io.c",
+ "crypto/cms/cms_kari.c",
+ "crypto/cms/cms_lib.c",
+ "crypto/cms/cms_pwri.c",
+ "crypto/cms/cms_sd.c",
+ "crypto/cms/cms_smime.c",
+ "crypto/comp/c_zlib.c",
+ "crypto/comp/comp_err.c",
+ "crypto/comp/comp_lib.c",
+ "crypto/conf/conf_api.c",
+ "crypto/conf/conf_def.c",
+ "crypto/conf/conf_err.c",
+ "crypto/conf/conf_lib.c",
+ "crypto/conf/conf_mall.c",
+ "crypto/conf/conf_mod.c",
+ "crypto/conf/conf_sap.c",
+ "crypto/conf/conf_ssl.c",
+ "crypto/cpt_err.c",
+ "crypto/cryptlib.c",
+ "crypto/ct/ct_b64.c",
+ "crypto/ct/ct_err.c",
+ "crypto/ct/ct_log.c",
+ "crypto/ct/ct_oct.c",
+ "crypto/ct/ct_policy.c",
+ "crypto/ct/ct_prn.c",
+ "crypto/ct/ct_sct.c",
+ "crypto/ct/ct_sct_ctx.c",
+ "crypto/ct/ct_vfy.c",
+ "crypto/ct/ct_x509v3.c",
+ "crypto/ctype.c",
+ "crypto/cversion.c",
+ "crypto/des/cbc_cksm.c",
+ "crypto/des/cbc_enc.c",
+ "crypto/des/cfb64ede.c",
+ "crypto/des/cfb64enc.c",
+ "crypto/des/cfb_enc.c",
+ "crypto/des/des_enc.c",
+ "crypto/des/ecb3_enc.c",
+ "crypto/des/ecb_enc.c",
+ "crypto/des/fcrypt.c",
+ "crypto/des/fcrypt_b.c",
+ "crypto/des/ofb64ede.c",
+ "crypto/des/ofb64enc.c",
+ "crypto/des/ofb_enc.c",
+ "crypto/des/pcbc_enc.c",
+ "crypto/des/qud_cksm.c",
+ "crypto/des/rand_key.c",
+ "crypto/des/set_key.c",
+ "crypto/des/str2key.c",
+ "crypto/des/xcbc_enc.c",
+ "crypto/dh/dh_ameth.c",
+ "crypto/dh/dh_asn1.c",
+ "crypto/dh/dh_check.c",
+ "crypto/dh/dh_depr.c",
+ "crypto/dh/dh_err.c",
+ "crypto/dh/dh_gen.c",
+ "crypto/dh/dh_kdf.c",
+ "crypto/dh/dh_key.c",
+ "crypto/dh/dh_lib.c",
+ "crypto/dh/dh_meth.c",
+ "crypto/dh/dh_pmeth.c",
+ "crypto/dh/dh_prn.c",
+ "crypto/dh/dh_rfc5114.c",
+ "crypto/dh/dh_rfc7919.c",
+ "crypto/dsa/dsa_ameth.c",
+ "crypto/dsa/dsa_asn1.c",
+ "crypto/dsa/dsa_depr.c",
+ "crypto/dsa/dsa_err.c",
+ "crypto/dsa/dsa_gen.c",
+ "crypto/dsa/dsa_key.c",
+ "crypto/dsa/dsa_lib.c",
+ "crypto/dsa/dsa_meth.c",
+ "crypto/dsa/dsa_ossl.c",
+ "crypto/dsa/dsa_pmeth.c",
+ "crypto/dsa/dsa_prn.c",
+ "crypto/dsa/dsa_sign.c",
+ "crypto/dsa/dsa_vrf.c",
+ "crypto/dso/dso_dl.c",
+ "crypto/dso/dso_dlfcn.c",
+ "crypto/dso/dso_err.c",
+ "crypto/dso/dso_lib.c",
+ "crypto/dso/dso_openssl.c",
+ "crypto/dso/dso_vms.c",
+ "crypto/dso/dso_win32.c",
+ "crypto/ebcdic.c",
+ "crypto/ec/curve25519.c",
+ "crypto/ec/curve448/arch_32/f_impl.c",
+ "crypto/ec/curve448/curve448.c",
+ "crypto/ec/curve448/curve448_tables.c",
+ "crypto/ec/curve448/eddsa.c",
+ "crypto/ec/curve448/f_generic.c",
+ "crypto/ec/curve448/scalar.c",
+ "crypto/ec/ec2_oct.c",
+ "crypto/ec/ec2_smpl.c",
+ "crypto/ec/ec_ameth.c",
+ "crypto/ec/ec_asn1.c",
+ "crypto/ec/ec_check.c",
+ "crypto/ec/ec_curve.c",
+ "crypto/ec/ec_cvt.c",
+ "crypto/ec/ec_err.c",
+ "crypto/ec/ec_key.c",
+ "crypto/ec/ec_kmeth.c",
+ "crypto/ec/ec_lib.c",
+ "crypto/ec/ec_mult.c",
+ "crypto/ec/ec_oct.c",
+ "crypto/ec/ec_pmeth.c",
+ "crypto/ec/ec_print.c",
+ "crypto/ec/ecdh_kdf.c",
+ "crypto/ec/ecdh_ossl.c",
+ "crypto/ec/ecdsa_ossl.c",
+ "crypto/ec/ecdsa_sign.c",
+ "crypto/ec/ecdsa_vrf.c",
+ "crypto/ec/eck_prn.c",
+ "crypto/ec/ecp_mont.c",
+ "crypto/ec/ecp_nist.c",
+ "crypto/ec/ecp_nistp224.c",
+ "crypto/ec/ecp_nistp256.c",
+ "crypto/ec/ecp_nistp521.c",
+ "crypto/ec/ecp_nistputil.c",
+ "crypto/ec/ecp_nistz256-x86_64.s",
+ "crypto/ec/ecp_nistz256.c",
+ "crypto/ec/ecp_oct.c",
+ "crypto/ec/ecp_smpl.c",
+ "crypto/ec/ecx_meth.c",
+ "crypto/ec/x25519-x86_64.s",
+ "crypto/engine/eng_all.c",
+ "crypto/engine/eng_cnf.c",
+ "crypto/engine/eng_ctrl.c",
+ "crypto/engine/eng_dyn.c",
+ "crypto/engine/eng_err.c",
+ "crypto/engine/eng_fat.c",
+ "crypto/engine/eng_init.c",
+ "crypto/engine/eng_lib.c",
+ "crypto/engine/eng_list.c",
+ "crypto/engine/eng_openssl.c",
+ "crypto/engine/eng_pkey.c",
+ "crypto/engine/eng_rdrand.c",
+ "crypto/engine/eng_table.c",
+ "crypto/engine/tb_asnmth.c",
+ "crypto/engine/tb_cipher.c",
+ "crypto/engine/tb_dh.c",
+ "crypto/engine/tb_digest.c",
+ "crypto/engine/tb_dsa.c",
+ "crypto/engine/tb_eckey.c",
+ "crypto/engine/tb_pkmeth.c",
+ "crypto/engine/tb_rand.c",
+ "crypto/engine/tb_rsa.c",
+ "crypto/err/err.c",
+ "crypto/err/err_all.c",
+ "crypto/err/err_prn.c",
+ "crypto/evp/bio_b64.c",
+ "crypto/evp/bio_enc.c",
+ "crypto/evp/bio_md.c",
+ "crypto/evp/bio_ok.c",
+ "crypto/evp/c_allc.c",
+ "crypto/evp/c_alld.c",
+ "crypto/evp/cmeth_lib.c",
+ "crypto/evp/digest.c",
+ "crypto/evp/e_aes.c",
+ "crypto/evp/e_aes_cbc_hmac_sha1.c",
+ "crypto/evp/e_aes_cbc_hmac_sha256.c",
+ "crypto/evp/e_aria.c",
+ "crypto/evp/e_bf.c",
+ "crypto/evp/e_camellia.c",
+ "crypto/evp/e_cast.c",
+ "crypto/evp/e_chacha20_poly1305.c",
+ "crypto/evp/e_des.c",
+ "crypto/evp/e_des3.c",
+ "crypto/evp/e_idea.c",
+ "crypto/evp/e_null.c",
+ "crypto/evp/e_old.c",
+ "crypto/evp/e_rc2.c",
+ "crypto/evp/e_rc4.c",
+ "crypto/evp/e_rc4_hmac_md5.c",
+ "crypto/evp/e_rc5.c",
+ "crypto/evp/e_seed.c",
+ "crypto/evp/e_sm4.c",
+ "crypto/evp/e_xcbc_d.c",
+ "crypto/evp/encode.c",
+ "crypto/evp/evp_cnf.c",
+ "crypto/evp/evp_enc.c",
+ "crypto/evp/evp_err.c",
+ "crypto/evp/evp_key.c",
+ "crypto/evp/evp_lib.c",
+ "crypto/evp/evp_pbe.c",
+ "crypto/evp/evp_pkey.c",
+ "crypto/evp/m_md2.c",
+ "crypto/evp/m_md4.c",
+ "crypto/evp/m_md5.c",
+ "crypto/evp/m_md5_sha1.c",
+ "crypto/evp/m_mdc2.c",
+ "crypto/evp/m_null.c",
+ "crypto/evp/m_ripemd.c",
+ "crypto/evp/m_sha1.c",
+ "crypto/evp/m_sha3.c",
+ "crypto/evp/m_sigver.c",
+ "crypto/evp/m_wp.c",
+ "crypto/evp/names.c",
+ "crypto/evp/p5_crpt.c",
+ "crypto/evp/p5_crpt2.c",
+ "crypto/evp/p_dec.c",
+ "crypto/evp/p_enc.c",
+ "crypto/evp/p_lib.c",
+ "crypto/evp/p_open.c",
+ "crypto/evp/p_seal.c",
+ "crypto/evp/p_sign.c",
+ "crypto/evp/p_verify.c",
+ "crypto/evp/pbe_scrypt.c",
+ "crypto/evp/pmeth_fn.c",
+ "crypto/evp/pmeth_gn.c",
+ "crypto/evp/pmeth_lib.c",
+ "crypto/ex_data.c",
+ "crypto/getenv.c",
+ "crypto/hmac/hm_ameth.c",
+ "crypto/hmac/hm_pmeth.c",
+ "crypto/hmac/hmac.c",
+ "crypto/idea/i_cbc.c",
+ "crypto/idea/i_cfb64.c",
+ "crypto/idea/i_ecb.c",
+ "crypto/idea/i_ofb64.c",
+ "crypto/idea/i_skey.c",
+ "crypto/init.c",
+ "crypto/kdf/hkdf.c",
+ "crypto/kdf/kdf_err.c",
+ "crypto/kdf/scrypt.c",
+ "crypto/kdf/tls1_prf.c",
+ "crypto/lhash/lh_stats.c",
+ "crypto/lhash/lhash.c",
+ "crypto/md4/md4_dgst.c",
+ "crypto/md4/md4_one.c",
+ "crypto/md5/md5-x86_64.s",
+ "crypto/md5/md5_dgst.c",
+ "crypto/md5/md5_one.c",
+ "crypto/mdc2/mdc2_one.c",
+ "crypto/mdc2/mdc2dgst.c",
+ "crypto/mem.c",
+ "crypto/mem_dbg.c",
+ "crypto/mem_sec.c",
+ "crypto/modes/aesni-gcm-x86_64.s",
+ "crypto/modes/cbc128.c",
+ "crypto/modes/ccm128.c",
+ "crypto/modes/cfb128.c",
+ "crypto/modes/ctr128.c",
+ "crypto/modes/cts128.c",
+ "crypto/modes/gcm128.c",
+ "crypto/modes/ghash-x86_64.s",
+ "crypto/modes/ocb128.c",
+ "crypto/modes/ofb128.c",
+ "crypto/modes/wrap128.c",
+ "crypto/modes/xts128.c",
+ "crypto/o_dir.c",
+ "crypto/o_fips.c",
+ "crypto/o_fopen.c",
+ "crypto/o_init.c",
+ "crypto/o_str.c",
+ "crypto/o_time.c",
+ "crypto/objects/o_names.c",
+ "crypto/objects/obj_dat.c",
+ "crypto/objects/obj_err.c",
+ "crypto/objects/obj_lib.c",
+ "crypto/objects/obj_xref.c",
+ "crypto/ocsp/ocsp_asn.c",
+ "crypto/ocsp/ocsp_cl.c",
+ "crypto/ocsp/ocsp_err.c",
+ "crypto/ocsp/ocsp_ext.c",
+ "crypto/ocsp/ocsp_ht.c",
+ "crypto/ocsp/ocsp_lib.c",
+ "crypto/ocsp/ocsp_prn.c",
+ "crypto/ocsp/ocsp_srv.c",
+ "crypto/ocsp/ocsp_vfy.c",
+ "crypto/ocsp/v3_ocsp.c",
+ "crypto/pem/pem_all.c",
+ "crypto/pem/pem_err.c",
+ "crypto/pem/pem_info.c",
+ "crypto/pem/pem_lib.c",
+ "crypto/pem/pem_oth.c",
+ "crypto/pem/pem_pk8.c",
+ "crypto/pem/pem_pkey.c",
+ "crypto/pem/pem_sign.c",
+ "crypto/pem/pem_x509.c",
+ "crypto/pem/pem_xaux.c",
+ "crypto/pem/pvkfmt.c",
+ "crypto/pkcs12/p12_add.c",
+ "crypto/pkcs12/p12_asn.c",
+ "crypto/pkcs12/p12_attr.c",
+ "crypto/pkcs12/p12_crpt.c",
+ "crypto/pkcs12/p12_crt.c",
+ "crypto/pkcs12/p12_decr.c",
+ "crypto/pkcs12/p12_init.c",
+ "crypto/pkcs12/p12_key.c",
+ "crypto/pkcs12/p12_kiss.c",
+ "crypto/pkcs12/p12_mutl.c",
+ "crypto/pkcs12/p12_npas.c",
+ "crypto/pkcs12/p12_p8d.c",
+ "crypto/pkcs12/p12_p8e.c",
+ "crypto/pkcs12/p12_sbag.c",
+ "crypto/pkcs12/p12_utl.c",
+ "crypto/pkcs12/pk12err.c",
+ "crypto/pkcs7/bio_pk7.c",
+ "crypto/pkcs7/pk7_asn1.c",
+ "crypto/pkcs7/pk7_attr.c",
+ "crypto/pkcs7/pk7_doit.c",
+ "crypto/pkcs7/pk7_lib.c",
+ "crypto/pkcs7/pk7_mime.c",
+ "crypto/pkcs7/pk7_smime.c",
+ "crypto/pkcs7/pkcs7err.c",
+ "crypto/poly1305/poly1305-x86_64.s",
+ "crypto/poly1305/poly1305.c",
+ "crypto/poly1305/poly1305_ameth.c",
+ "crypto/poly1305/poly1305_pmeth.c",
+ "crypto/rand/drbg_ctr.c",
+ "crypto/rand/drbg_lib.c",
+ "crypto/rand/rand_egd.c",
+ "crypto/rand/rand_err.c",
+ "crypto/rand/rand_lib.c",
+ "crypto/rand/rand_unix.c",
+ "crypto/rand/rand_vms.c",
+ "crypto/rand/rand_win.c",
+ "crypto/rand/randfile.c",
+ "crypto/rc2/rc2_cbc.c",
+ "crypto/rc2/rc2_ecb.c",
+ "crypto/rc2/rc2_skey.c",
+ "crypto/rc2/rc2cfb64.c",
+ "crypto/rc2/rc2ofb64.c",
+ "crypto/rc4/rc4-md5-x86_64.s",
+ "crypto/rc4/rc4-x86_64.s",
+ "crypto/ripemd/rmd_dgst.c",
+ "crypto/ripemd/rmd_one.c",
+ "crypto/rsa/rsa_ameth.c",
+ "crypto/rsa/rsa_asn1.c",
+ "crypto/rsa/rsa_chk.c",
+ "crypto/rsa/rsa_crpt.c",
+ "crypto/rsa/rsa_depr.c",
+ "crypto/rsa/rsa_err.c",
+ "crypto/rsa/rsa_gen.c",
+ "crypto/rsa/rsa_lib.c",
+ "crypto/rsa/rsa_meth.c",
+ "crypto/rsa/rsa_mp.c",
+ "crypto/rsa/rsa_none.c",
+ "crypto/rsa/rsa_oaep.c",
+ "crypto/rsa/rsa_ossl.c",
+ "crypto/rsa/rsa_pk1.c",
+ "crypto/rsa/rsa_pmeth.c",
+ "crypto/rsa/rsa_prn.c",
+ "crypto/rsa/rsa_pss.c",
+ "crypto/rsa/rsa_saos.c",
+ "crypto/rsa/rsa_sign.c",
+ "crypto/rsa/rsa_ssl.c",
+ "crypto/rsa/rsa_x931.c",
+ "crypto/rsa/rsa_x931g.c",
+ "crypto/seed/seed.c",
+ "crypto/seed/seed_cbc.c",
+ "crypto/seed/seed_cfb.c",
+ "crypto/seed/seed_ecb.c",
+ "crypto/seed/seed_ofb.c",
+ "crypto/sha/keccak1600-x86_64.s",
+ "crypto/sha/sha1-mb-x86_64.s",
+ "crypto/sha/sha1-x86_64.s",
+ "crypto/sha/sha1_one.c",
+ "crypto/sha/sha1dgst.c",
+ "crypto/sha/sha256-mb-x86_64.s",
+ "crypto/sha/sha256-x86_64.s",
+ "crypto/sha/sha256.c",
+ "crypto/sha/sha512-x86_64.s",
+ "crypto/sha/sha512.c",
+ "crypto/siphash/siphash.c",
+ "crypto/siphash/siphash_ameth.c",
+ "crypto/siphash/siphash_pmeth.c",
+ "crypto/sm2/sm2_crypt.c",
+ "crypto/sm2/sm2_err.c",
+ "crypto/sm2/sm2_pmeth.c",
+ "crypto/sm2/sm2_sign.c",
+ "crypto/sm3/m_sm3.c",
+ "crypto/sm3/sm3.c",
+ "crypto/sm4/sm4.c",
+ "crypto/srp/srp_lib.c",
+ "crypto/srp/srp_vfy.c",
+ "crypto/stack/stack.c",
+ "crypto/store/loader_file.c",
+ "crypto/store/store_err.c",
+ "crypto/store/store_init.c",
+ "crypto/store/store_lib.c",
+ "crypto/store/store_register.c",
+ "crypto/store/store_strings.c",
+ "crypto/threads_none.c",
+ "crypto/threads_pthread.c",
+ "crypto/threads_win.c",
+ "crypto/ts/ts_asn1.c",
+ "crypto/ts/ts_conf.c",
+ "crypto/ts/ts_err.c",
+ "crypto/ts/ts_lib.c",
+ "crypto/ts/ts_req_print.c",
+ "crypto/ts/ts_req_utils.c",
+ "crypto/ts/ts_rsp_print.c",
+ "crypto/ts/ts_rsp_sign.c",
+ "crypto/ts/ts_rsp_utils.c",
+ "crypto/ts/ts_rsp_verify.c",
+ "crypto/ts/ts_verify_ctx.c",
+ "crypto/txt_db/txt_db.c",
+ "crypto/ui/ui_err.c",
+ "crypto/ui/ui_lib.c",
+ "crypto/ui/ui_null.c",
+ "crypto/ui/ui_openssl.c",
+ "crypto/ui/ui_util.c",
+ "crypto/uid.c",
+ "crypto/whrlpool/wp-x86_64.s",
+ "crypto/whrlpool/wp_dgst.c",
+ "crypto/x509/by_dir.c",
+ "crypto/x509/by_file.c",
+ "crypto/x509/t_crl.c",
+ "crypto/x509/t_req.c",
+ "crypto/x509/t_x509.c",
+ "crypto/x509/x509_att.c",
+ "crypto/x509/x509_cmp.c",
+ "crypto/x509/x509_d2.c",
+ "crypto/x509/x509_def.c",
+ "crypto/x509/x509_err.c",
+ "crypto/x509/x509_ext.c",
+ "crypto/x509/x509_lu.c",
+ "crypto/x509/x509_meth.c",
+ "crypto/x509/x509_obj.c",
+ "crypto/x509/x509_r2x.c",
+ "crypto/x509/x509_req.c",
+ "crypto/x509/x509_set.c",
+ "crypto/x509/x509_trs.c",
+ "crypto/x509/x509_txt.c",
+ "crypto/x509/x509_v3.c",
+ "crypto/x509/x509_vfy.c",
+ "crypto/x509/x509_vpm.c",
+ "crypto/x509/x509cset.c",
+ "crypto/x509/x509name.c",
+ "crypto/x509/x509rset.c",
+ "crypto/x509/x509spki.c",
+ "crypto/x509/x509type.c",
+ "crypto/x509/x_all.c",
+ "crypto/x509/x_attrib.c",
+ "crypto/x509/x_crl.c",
+ "crypto/x509/x_exten.c",
+ "crypto/x509/x_name.c",
+ "crypto/x509/x_pubkey.c",
+ "crypto/x509/x_req.c",
+ "crypto/x509/x_x509.c",
+ "crypto/x509/x_x509a.c",
+ "crypto/x509v3/pcy_cache.c",
+ "crypto/x509v3/pcy_data.c",
+ "crypto/x509v3/pcy_lib.c",
+ "crypto/x509v3/pcy_map.c",
+ "crypto/x509v3/pcy_node.c",
+ "crypto/x509v3/pcy_tree.c",
+ "crypto/x509v3/v3_addr.c",
+ "crypto/x509v3/v3_admis.c",
+ "crypto/x509v3/v3_akey.c",
+ "crypto/x509v3/v3_akeya.c",
+ "crypto/x509v3/v3_alt.c",
+ "crypto/x509v3/v3_asid.c",
+ "crypto/x509v3/v3_bcons.c",
+ "crypto/x509v3/v3_bitst.c",
+ "crypto/x509v3/v3_conf.c",
+ "crypto/x509v3/v3_cpols.c",
+ "crypto/x509v3/v3_crld.c",
+ "crypto/x509v3/v3_enum.c",
+ "crypto/x509v3/v3_extku.c",
+ "crypto/x509v3/v3_genn.c",
+ "crypto/x509v3/v3_ia5.c",
+ "crypto/x509v3/v3_info.c",
+ "crypto/x509v3/v3_int.c",
+ "crypto/x509v3/v3_lib.c",
+ "crypto/x509v3/v3_ncons.c",
+ "crypto/x509v3/v3_pci.c",
+ "crypto/x509v3/v3_pcia.c",
+ "crypto/x509v3/v3_pcons.c",
+ "crypto/x509v3/v3_pku.c",
+ "crypto/x509v3/v3_pmaps.c",
+ "crypto/x509v3/v3_prn.c",
+ "crypto/x509v3/v3_purp.c",
+ "crypto/x509v3/v3_skey.c",
+ "crypto/x509v3/v3_sxnet.c",
+ "crypto/x509v3/v3_tlsf.c",
+ "crypto/x509v3/v3_utl.c",
+ "crypto/x509v3/v3err.c",
+ "crypto/x86_64cpuid.s",
+ ] + CONF_FILES + ["crypto/buildinf.h"] + glob([
+ "*.h",
+ "crypto/**/*.h",
+ "crypto/include/*.h",
+ "include/internal/*.h",
+ ]),
+ hdrs = HDRS + [
+ # These are not independent compile units, but are included in other .c files.
+ "crypto/LPdir_unix.c",
+ "crypto/des/ncbc_enc.c",
+ ],
+ copts = COPTS + [
+ "-isystem external/openssl",
+ "-iquote external/openssl/crypto",
+ "-iquote external/openssl/crypto/include",
+ "-iquote external/openssl/crypto/modes",
+ "-iquote external/openssl/crypto/ec/curve448",
+ "-iquote external/openssl/crypto/ec/curve448/arch_32",
+ "-iquote $(GENDIR)/external/openssl/crypto",
+ "-iquote $(GENDIR)/external/openssl/crypto/include",
+ ],
+ includes = ["include"],
+)
+
+cc_library(
+ name = "libssl",
+ srcs = [
+ "ssl/bio_ssl.c",
+ "ssl/d1_lib.c",
+ "ssl/d1_msg.c",
+ "ssl/d1_srtp.c",
+ "ssl/methods.c",
+ "ssl/packet.c",
+ "ssl/pqueue.c",
+ "ssl/record/dtls1_bitmap.c",
+ "ssl/record/rec_layer_d1.c",
+ "ssl/record/rec_layer_s3.c",
+ "ssl/record/ssl3_buffer.c",
+ "ssl/record/ssl3_record.c",
+ "ssl/record/ssl3_record_tls13.c",
+ "ssl/s3_cbc.c",
+ "ssl/s3_enc.c",
+ "ssl/s3_lib.c",
+ "ssl/s3_msg.c",
+ "ssl/ssl_asn1.c",
+ "ssl/ssl_cert.c",
+ "ssl/ssl_ciph.c",
+ "ssl/ssl_conf.c",
+ "ssl/ssl_err.c",
+ "ssl/ssl_init.c",
+ "ssl/ssl_lib.c",
+ "ssl/ssl_mcnf.c",
+ "ssl/ssl_rsa.c",
+ "ssl/ssl_sess.c",
+ "ssl/ssl_stat.c",
+ "ssl/ssl_txt.c",
+ "ssl/ssl_utst.c",
+ "ssl/statem/extensions.c",
+ "ssl/statem/extensions_clnt.c",
+ "ssl/statem/extensions_cust.c",
+ "ssl/statem/extensions_srvr.c",
+ "ssl/statem/statem.c",
+ "ssl/statem/statem_clnt.c",
+ "ssl/statem/statem_dtls.c",
+ "ssl/statem/statem_lib.c",
+ "ssl/statem/statem_srvr.c",
+ "ssl/t1_enc.c",
+ "ssl/t1_lib.c",
+ "ssl/t1_trce.c",
+ "ssl/tls13_enc.c",
+ "ssl/tls_srp.c",
+ ] + glob([
+ "ssl/**/*.h",
+ ]),
+ hdrs = HDRS,
+ copts = COPTS,
+ deps = [":libcrypto"],
+)
diff --git a/tests/pthread_link_test.cc b/tests/pthread_link_test.cc
new file mode 100644
index 0000000..363ec2f
--- /dev/null
+++ b/tests/pthread_link_test.cc
@@ -0,0 +1,38 @@
+// Copyright 2021 The Bazel Authors.
+//
+// Licensed under the Apache License, Version 2.0(the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http: // www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#if defined(__linux__) && defined(_GNU_SOURCE)
+#include <dlfcn.h>
+#include <assert.h>
+
+// Checks that pthread symbols are loadable.
+//
+// This test verifies that dynamically linked libraries which
+// rely on pthread symbols can still access them.
+// Incorrect order of linking dependencies may remove unused
+// symbols and break shared libraries that are linked later.
+int main() {
+ // Find symbol
+ void* symbol = dlsym(RTLD_NEXT, "pthread_getspecific");
+ // Check that there is no error
+ assert(dlerror() == nullptr && symbol != nullptr);
+
+}
+
+#else//defined(__linux__) && defined(_GNU_SOURCE)
+
+int main() {
+}
+
+#endif//defined(__linux__) && defined(_GNU_SOURCE)
diff --git a/tests/rust/BUILD.bazel b/tests/rust/BUILD.bazel
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/rust/BUILD.bazel
diff --git a/tests/rust/git2-rs-cargo-toml.patch b/tests/rust/git2-rs-cargo-toml.patch
new file mode 100644
index 0000000..a0d588b
--- /dev/null
+++ b/tests/rust/git2-rs-cargo-toml.patch
@@ -0,0 +1,15 @@
+diff --git a/Cargo.toml b/Cargo.toml
+index 5837a47..d6ba77f 100644
+--- a/Cargo.toml
++++ b/Cargo.toml
+@@ -60,10 +60,3 @@ unstable = []
+ vendored-libgit2 = ["libgit2-sys/vendored"]
+ vendored-openssl = ["openssl-sys/vendored", "libgit2-sys/vendored-openssl"]
+ zlib-ng-compat = ["libgit2-sys/zlib-ng-compat"]
+-[target."cfg(all(unix, not(target_os = \"macos\")))".dependencies.openssl-probe]
+-version = "0.1"
+-optional = true
+-
+-[target."cfg(all(unix, not(target_os = \"macos\")))".dependencies.openssl-sys]
+-version = "0.9.0"
+-optional = true
diff --git a/tests/scripts/archlinux_test.sh b/tests/scripts/archlinux_test.sh
new file mode 100755
index 0000000..e2a735b
--- /dev/null
+++ b/tests/scripts/archlinux_test.sh
@@ -0,0 +1,37 @@
+#!/bin/bash
+# Copyright 2018 The Bazel Authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+set -euo pipefail
+
+images=(
+"archlinux:base-devel"
+)
+
+git_root=$(git rev-parse --show-toplevel)
+readonly git_root
+
+for image in "${images[@]}"; do
+ docker pull "${image}"
+ docker run --rm --entrypoint=/bin/bash --volume="${git_root}:/src:ro" "${image}" -c """
+set -exuo pipefail
+
+# Install dependencies
+pacman -Syu --noconfirm --quiet python
+
+# Run tests
+cd /src
+tests/scripts/run_tests.sh
+"""
+done
diff --git a/tests/scripts/bazel.sh b/tests/scripts/bazel.sh
new file mode 100644
index 0000000..87d7cf1
--- /dev/null
+++ b/tests/scripts/bazel.sh
@@ -0,0 +1,30 @@
+os="$(uname -s | tr "[:upper:]" "[:lower:]")"
+readonly os
+
+arch="$(uname -m)"
+if [[ "${arch}" == "x86_64" ]]; then
+ arch="amd64"
+elif [[ "${arch}" == "aarch64" ]]; then
+ arch="arm64"
+else
+ >&2 echo "Unknown architecture: ${arch}"
+fi
+readonly arch
+
+# Use bazelisk to catch migration problems.
+readonly bazelisk_version="v1.10.1"
+readonly url="https://github.com/bazelbuild/bazelisk/releases/download/${bazelisk_version}/bazelisk-${os}-${arch}"
+bazel="${TMPDIR:-/tmp}/bazelisk"
+readonly bazel
+
+readonly common_test_args=(
+ --incompatible_enable_cc_toolchain_resolution
+ --symlink_prefix=/
+ --color=yes
+ --show_progress_rate_limit=30
+ --keep_going
+ --test_output=errors
+)
+
+curl -L -sSf -o "${bazel}" "${url}"
+chmod a+x "${bazel}"
diff --git a/tests/scripts/centos_test.sh b/tests/scripts/centos_test.sh
new file mode 100755
index 0000000..1df0167
--- /dev/null
+++ b/tests/scripts/centos_test.sh
@@ -0,0 +1,40 @@
+#!/bin/bash
+# Copyright 2018 The Bazel Authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+echo "This test is disabled because our supported versions of LLVM do not work with CentOS."
+exit 1
+
+set -euo pipefail
+
+images=(
+"centos:7"
+)
+
+git_root=$(git rev-parse --show-toplevel)
+readonly git_root
+
+for image in "${images[@]}"; do
+ docker pull "${image}"
+ docker run --rm --entrypoint=/bin/bash --volume="${git_root}:/src:ro" "${image}" -c """
+set -exuo pipefail
+
+# Install dependencies
+yum install -y -q gcc
+
+# Run tests
+cd /src
+tests/scripts/run_tests.sh
+"""
+done
diff --git a/tests/scripts/debian_test.sh b/tests/scripts/debian_test.sh
new file mode 100755
index 0000000..9f280c9
--- /dev/null
+++ b/tests/scripts/debian_test.sh
@@ -0,0 +1,41 @@
+#!/bin/bash
+# Copyright 2018 The Bazel Authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+set -euo pipefail
+
+images=(
+"debian:latest"
+)
+
+git_root=$(git rev-parse --show-toplevel)
+readonly git_root
+
+for image in "${images[@]}"; do
+ docker pull "${image}"
+ docker run --rm --entrypoint=/bin/bash --volume="${git_root}:/src:ro" "${image}" -c """
+set -exuo pipefail
+
+# Common setup
+export DEBIAN_FRONTEND=noninteractive
+apt-get -qq update
+apt-get -qq -y install apt-utils curl pkg-config zip g++ zlib1g-dev unzip python gnupg2 libtinfo5 >/dev/null
+# The above command gives some verbose output that can not be silenced easily.
+# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=288778
+
+# Run tests
+cd /src
+tests/scripts/run_tests.sh
+"""
+done
diff --git a/tests/scripts/fedora_test.sh b/tests/scripts/fedora_test.sh
new file mode 100755
index 0000000..39897cc
--- /dev/null
+++ b/tests/scripts/fedora_test.sh
@@ -0,0 +1,38 @@
+#!/bin/bash
+# Copyright 2018 The Bazel Authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+set -euo pipefail
+
+images=(
+"fedora:latest"
+)
+
+git_root=$(git rev-parse --show-toplevel)
+readonly git_root
+
+for image in "${images[@]}"; do
+ docker pull "${image}"
+ docker run --rm --entrypoint=/bin/bash --volume="${git_root}:/src:ro" "${image}" -c """
+set -exuo pipefail
+
+# Install dependencies
+dnf install -qy dnf-plugins-core
+dnf install -qy python gcc ncurses-compat-libs
+
+# Run tests
+cd /src
+tests/scripts/run_tests.sh
+"""
+done
diff --git a/tests/scripts/linux_sysroot_test.sh b/tests/scripts/linux_sysroot_test.sh
new file mode 100755
index 0000000..2b030cb
--- /dev/null
+++ b/tests/scripts/linux_sysroot_test.sh
@@ -0,0 +1,41 @@
+#!/bin/bash
+# Copyright 2018 The Bazel Authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+set -euo pipefail
+
+images=(
+"ubuntu:20.04"
+)
+
+git_root=$(git rev-parse --show-toplevel)
+readonly git_root
+
+for image in "${images[@]}"; do
+ docker pull "${image}"
+ docker run --rm --entrypoint=/bin/bash --volume="${git_root}:/src:ro" "${image}" -c """
+set -exuo pipefail
+
+# Common setup
+export DEBIAN_FRONTEND=noninteractive
+apt-get -qq update
+apt-get -qq -y install apt-utils curl pkg-config zip g++ zlib1g-dev unzip python >/dev/null
+# The above command gives some verbose output that can not be silenced easily.
+# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=288778
+
+# Run tests
+cd /src
+tests/scripts/run_tests.sh -t '@llvm_toolchain_with_sysroot//:cc-toolchain-x86_64-linux'
+"""
+done
diff --git a/tests/scripts/run_external_tests.sh b/tests/scripts/run_external_tests.sh
new file mode 100755
index 0000000..e36ff78
--- /dev/null
+++ b/tests/scripts/run_external_tests.sh
@@ -0,0 +1,35 @@
+#!/bin/bash
+# Copyright 2018 The Bazel Authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+set -euo pipefail
+
+source "$(dirname "${BASH_SOURCE[0]}")/bazel.sh"
+"${bazel}" version
+
+# Generate some files needed for the tests.
+"${bazel}" fetch @io_bazel_rules_go//tests/core/cgo:all
+"$("${bazel}" info output_base)/external/io_bazel_rules_go/tests/core/cgo/generate_imported_dylib.sh"
+
+# We exclude the following targets:
+# - cc_libs_test from rules_go because it assumes that stdlibc++ has been dynamically linked, but we
+# link it statically on linux.
+# - opts_test from rules_go because its include path assumes that the main repo is rules_go (see
+# https://github.com/bazelbuild/rules_go/issues/2955).
+"${bazel}" --bazelrc=/dev/null test "${common_test_args[@]}" \
+ //tests/foreign:pcre \
+ @git2//:all \
+ @openssl//:libssl \
+ $("${bazel}" query 'attr(timeout, short, tests(@com_google_absl//absl/...))') \
+ $("${bazel}" query 'tests(@io_bazel_rules_go//tests/core/cgo:all) except set(@io_bazel_rules_go//tests/core/cgo:cc_libs_test @io_bazel_rules_go//tests/core/cgo:opts_test)')
diff --git a/tests/scripts/run_tests.sh b/tests/scripts/run_tests.sh
new file mode 100755
index 0000000..b411a08
--- /dev/null
+++ b/tests/scripts/run_tests.sh
@@ -0,0 +1,50 @@
+#!/bin/bash
+# Copyright 2018 The Bazel Authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+set -euo pipefail
+
+toolchain_name=""
+
+while getopts "t:h" opt; do
+ case "$opt" in
+ "t") toolchain_name="$OPTARG";;
+ "h") echo "Usage:"
+ echo "-t - Toolchain name to use for testing; default is llvm_toolchain"
+ exit 2
+ ;;
+ "?") echo "invalid option: -$OPTARG"; exit 1;;
+ esac
+done
+
+source "$(dirname "${BASH_SOURCE[0]}")/bazel.sh"
+"${bazel}" version
+
+set -x
+test_args=(
+ --extra_toolchains="${toolchain_name}"
+ --copt=-v
+ --linkopt=-Wl,-t
+)
+if [[ "${TEST_MIGRATION:-}" ]]; then
+ # We can not use bazelisk to test migration because bazelisk does not allow
+ # us to selectively ignore a migration flag.
+ test_args+=("--all_incompatible_changes")
+ # This flag is not quite ready -- https://github.com/bazelbuild/bazel/issues/7347
+ test_args+=("--incompatible_disallow_struct_provider_syntax=false")
+ # the rules_rust repo included in the WORKSPACE is currently incompatible with
+ # '--incompatible_no_rule_outputs_param=true', setting this to false for now.
+ test_args+=("--incompatible_no_rule_outputs_param=false")
+fi
+"${bazel}" --bazelrc=/dev/null test "${common_test_args[@]}" "${test_args[@]}" //tests:all
diff --git a/tests/scripts/run_xcompile_tests.sh b/tests/scripts/run_xcompile_tests.sh
new file mode 100755
index 0000000..b0a7cfb
--- /dev/null
+++ b/tests/scripts/run_xcompile_tests.sh
@@ -0,0 +1,53 @@
+#!/bin/bash
+# Copyright 2021 The Bazel Authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+set -euo pipefail
+
+source "$(dirname "${BASH_SOURCE[0]}")/bazel.sh"
+"${bazel}" version
+
+binpath="$("${bazel}" info bazel-bin)/tests/stdlib_test"
+
+check_with_image() {
+ if "${CI:-false}"; then
+ # macOS GitHub Action Runners do not have docker installed on them.
+ return
+ fi
+ local image="$1"
+ docker run --rm --mount "type=bind,source=${binpath},target=/stdlib_test" "${image}" /stdlib_test
+}
+
+echo ""
+echo "Testing static linked user libraries and dynamic linked system libraries"
+build_args=(
+ --incompatible_enable_cc_toolchain_resolution
+ --platforms=//platforms:linux-x86_64
+ --extra_toolchains=@llvm_toolchain_with_sysroot//:cc-toolchain-x86_64-linux
+ --symlink_prefix=/
+ --color=yes
+ --show_progress_rate_limit=30
+)
+"${bazel}" --bazelrc=/dev/null build "${build_args[@]}" //tests:stdlib_test
+file "${binpath}" | tee /dev/stderr | grep -q ELF
+check_with_image "frolvlad/alpine-glibc" # Need glibc image for system libraries.
+
+echo ""
+echo "Testing static linked user and system libraries"
+build_args+=(
+ --features=fully_static_link
+)
+"${bazel}" --bazelrc=/dev/null build "${build_args[@]}" //tests:stdlib_test
+file "${binpath}" | tee /dev/stderr | grep -q ELF
+check_with_image "alpine"
diff --git a/tests/scripts/suse_leap_test.sh b/tests/scripts/suse_leap_test.sh
new file mode 100755
index 0000000..d4f54a7
--- /dev/null
+++ b/tests/scripts/suse_leap_test.sh
@@ -0,0 +1,40 @@
+#!/bin/bash
+# Copyright 2021 The Bazel Authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+set -euox pipefail
+
+images=(
+"opensuse/leap:latest"
+)
+
+git_root=$(git rev-parse --show-toplevel)
+readonly git_root
+
+echo "git root: $git_root"
+
+for image in "${images[@]}"; do
+ docker pull "${image}"
+ docker run --rm --entrypoint=/bin/bash --volume="${git_root}:/src" "${image}" -c """
+set -exuo pipefail
+
+# Common setup
+zypper -n update
+zypper -n install curl python tar gzip gcc libncurses5 binutils-gold
+
+# Run tests
+cd /src
+tests/scripts/run_tests.sh
+"""
+done
diff --git a/tests/scripts/suse_tumbleweed_test.sh b/tests/scripts/suse_tumbleweed_test.sh
new file mode 100755
index 0000000..785a83c
--- /dev/null
+++ b/tests/scripts/suse_tumbleweed_test.sh
@@ -0,0 +1,40 @@
+#!/bin/bash
+# Copyright 2021 The Bazel Authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+set -euox pipefail
+
+images=(
+"opensuse/tumbleweed:latest"
+)
+
+git_root=$(git rev-parse --show-toplevel)
+readonly git_root
+
+echo "git root: $git_root"
+
+for image in "${images[@]}"; do
+ docker pull "${image}"
+ docker run --rm --entrypoint=/bin/bash --volume="${git_root}:/src" "${image}" -c """
+set -exuo pipefail
+
+# Common setup
+zypper -n update
+zypper -n install pkgconf-pkg-config curl python tar gzip findutils gcc libncurses5 binutils-gold
+
+# Run tests
+cd /src
+tests/scripts/run_tests.sh
+"""
+done
diff --git a/tests/scripts/ubuntu_16_04_test.sh b/tests/scripts/ubuntu_16_04_test.sh
new file mode 100755
index 0000000..419900c
--- /dev/null
+++ b/tests/scripts/ubuntu_16_04_test.sh
@@ -0,0 +1,41 @@
+#!/bin/bash
+# Copyright 2018 The Bazel Authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+set -euo pipefail
+
+images=(
+"ubuntu:16.04"
+)
+
+git_root=$(git rev-parse --show-toplevel)
+readonly git_root
+
+for image in "${images[@]}"; do
+ docker pull "${image}"
+ docker run --rm --entrypoint=/bin/bash --volume="${git_root}:/src:ro" "${image}" -c """
+set -exuo pipefail
+
+# Common setup
+export DEBIAN_FRONTEND=noninteractive
+apt-get -qq update
+apt-get -qq -y install apt-utils curl pkg-config zip g++ zlib1g-dev unzip python >/dev/null
+# The above command gives some verbose output that can not be silenced easily.
+# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=288778
+
+# Run tests
+cd /src
+tests/scripts/run_tests.sh
+"""
+done
diff --git a/tests/scripts/ubuntu_18_04_test.sh b/tests/scripts/ubuntu_18_04_test.sh
new file mode 100755
index 0000000..12da28e
--- /dev/null
+++ b/tests/scripts/ubuntu_18_04_test.sh
@@ -0,0 +1,41 @@
+#!/bin/bash
+# Copyright 2020 The Bazel Authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+set -euo pipefail
+
+images=(
+"ubuntu:18.04"
+)
+
+git_root=$(git rev-parse --show-toplevel)
+readonly git_root
+
+for image in "${images[@]}"; do
+ docker pull "${image}"
+ docker run --rm --entrypoint=/bin/bash --volume="${git_root}:/src:ro" "${image}" -c """
+set -exuo pipefail
+
+# Common setup
+export DEBIAN_FRONTEND=noninteractive
+apt-get -qq update
+apt-get -qq -y install apt-utils curl pkg-config zip g++ zlib1g-dev unzip python >/dev/null
+# The above command gives some verbose output that can not be silenced easily.
+# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=288778
+
+# Run tests
+cd /src
+tests/scripts/run_tests.sh
+"""
+done
diff --git a/tests/scripts/ubuntu_20_04_test.sh b/tests/scripts/ubuntu_20_04_test.sh
new file mode 100755
index 0000000..059f01c
--- /dev/null
+++ b/tests/scripts/ubuntu_20_04_test.sh
@@ -0,0 +1,41 @@
+#!/bin/bash
+# Copyright 2020 The Bazel Authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+set -euo pipefail
+
+images=(
+"ubuntu:20.04"
+)
+
+git_root=$(git rev-parse --show-toplevel)
+readonly git_root
+
+for image in "${images[@]}"; do
+ docker pull "${image}"
+ docker run --rm --entrypoint=/bin/bash --volume="${git_root}:/src:ro" "${image}" -c """
+set -exuo pipefail
+
+# Common setup
+export DEBIAN_FRONTEND=noninteractive
+apt-get -qq update
+apt-get -qq -y install apt-utils curl pkg-config zip g++ zlib1g-dev unzip python >/dev/null
+# The above command gives some verbose output that can not be silenced easily.
+# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=288778
+
+# Run tests
+cd /src
+tests/scripts/run_tests.sh
+"""
+done
diff --git a/tests/stdlib.cc b/tests/stdlib.cc
new file mode 100644
index 0000000..60e7b0d
--- /dev/null
+++ b/tests/stdlib.cc
@@ -0,0 +1,17 @@
+// Copyright 2018 The Bazel Authors.
+//
+// Licensed under the Apache License, Version 2.0(the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http: // www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include <iostream>
+
+void hello() { std::cout << "Hello World!" << std::endl; }
\ No newline at end of file
diff --git a/tests/stdlib.h b/tests/stdlib.h
new file mode 100644
index 0000000..4ce4c60
--- /dev/null
+++ b/tests/stdlib.h
@@ -0,0 +1,17 @@
+// Copyright 2018 The Bazel Authors.
+//
+// Licensed under the Apache License, Version 2.0(the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http: // www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+void hello();
+
+void test_pthread_symbols();
diff --git a/tests/stdlib_test.cc b/tests/stdlib_test.cc
new file mode 100644
index 0000000..5f2904a
--- /dev/null
+++ b/tests/stdlib_test.cc
@@ -0,0 +1,17 @@
+// Copyright 2018 The Bazel Authors.
+//
+// Licensed under the Apache License, Version 2.0(the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http: // www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "stdlib.h"
+
+int main() { hello(); }
diff --git a/tests/transitions.bzl b/tests/transitions.bzl
new file mode 100644
index 0000000..1279d92
--- /dev/null
+++ b/tests/transitions.bzl
@@ -0,0 +1,85 @@
+"""Helper transitions for tests."""
+
+# This transition function sets `--features=per_object_debug_info` and
+# `--fission` as well as the compilation mode.
+#
+# These three Bazel flags influence whether or not `.dwo` and `.dwp` are
+# created.
+def _fission_transition_impl(settings, attr):
+ features = settings["//command_line_option:features"]
+ if "per_object_debug_info" in features:
+ features.remove("per_object_debug_info")
+
+ enable_per_object_debug_info = attr.per_object_debug_info
+ if enable_per_object_debug_info:
+ features.append("per_object_debug_info")
+
+ compilation_mode = settings["//command_line_option:compilation_mode"]
+ if attr.override_compilation_mode:
+ compilation_mode = attr.override_compilation_mode
+
+ return {
+ "//command_line_option:compilation_mode": compilation_mode,
+ "//command_line_option:fission": attr.fission,
+ "//command_line_option:features": features,
+ }
+
+fission_transition = transition(
+ implementation = _fission_transition_impl,
+ inputs = [
+ "//command_line_option:compilation_mode",
+ "//command_line_option:features",
+ ],
+ outputs = [
+ "//command_line_option:compilation_mode",
+ "//command_line_option:features",
+ "//command_line_option:fission",
+ ],
+)
+
+def _dwp_file_impl(ctx):
+ file = ctx.attr.name
+ file = ctx.actions.declare_file(file)
+ ctx.actions.symlink(
+ output = file,
+ target_file = ctx.attr.src[0][DebugPackageInfo].dwp_file,
+ )
+
+ return [DefaultInfo(files = depset([file]))]
+
+dwp_file = rule(
+ implementation = _dwp_file_impl,
+ attrs = {
+ "src": attr.label(
+ cfg = fission_transition,
+ mandatory = True,
+ doc = "The actual target to build and grab the .dwp file from.",
+ providers = [DebugPackageInfo],
+ ),
+ # NOTE: we should eventually be able to remove this (see #109).
+ "per_object_debug_info": attr.bool(
+ default = True,
+ ),
+ "fission": attr.string(
+ default = "yes",
+ values = ["yes", "no", "dbg", "fastbuild", "opt"],
+ ),
+ # NOTE: this should eventually not be necessary; see #109 for context
+ # and also:
+ # - https://reviews.llvm.org/D80391
+ # - https://github.com/bazelbuild/bazel/issues/14038
+ # - https://github.com/bazelbuild/rules_cc/pull/115
+ #
+ # Essentially, we now need to specify `-g2` explicitly to generate
+ # `.dwo` files.
+ "override_compilation_mode": attr.string(
+ default = "",
+ mandatory = False,
+ values = ["dbg", "fastbuild", "opt"],
+ ),
+ "_allowlist_function_transition": attr.label(
+ default = "@bazel_tools//tools/allowlists/function_transition_allowlist",
+ ),
+ },
+ incompatible_use_toolchain_transition = True,
+)