diff --git a/setup.py b/setup.py index 90df0a1042e..40e5fcd3fe0 100644 --- a/setup.py +++ b/setup.py @@ -17,6 +17,13 @@ # undesirable behaviors or errors. import setuptools +# Monkey Patch the unix compiler to accept ASM +# files used by boring SSL. +from distutils.unixccompiler import UnixCCompiler +UnixCCompiler.src_extensions.append('.S') +del UnixCCompiler + +from distutils import ccompiler from distutils import cygwinccompiler from distutils import extension as _extension from distutils import util @@ -97,6 +104,8 @@ CLASSIFIERS = [ 'License :: OSI Approved :: Apache Software License', ] +BUILD_WITH_BORING_SSL_ASM = os.environ.get('GRPC_BUILD_WITH_BORING_SSL_ASM', False) + # Environment variable to determine whether or not the Cython extension should # *use* Cython or use the generated C files. Note that this requires the C files # to have been generated by building first *with* Cython support. Even if this @@ -261,9 +270,26 @@ if BUILD_WITH_SYSTEM_ZLIB: if BUILD_WITH_SYSTEM_CARES: EXTENSION_LIBRARIES += ('cares',) -DEFINE_MACROS = (('OPENSSL_NO_ASM', 1), ('_WIN32_WINNT', 0x600)) +DEFINE_MACROS = (('_WIN32_WINNT', 0x600),) +asm_files = [] +NO_BORING_ASM = True +if BUILD_WITH_BORING_SSL_ASM: + LINUX_X86_64 = "linux-x86_64" + if LINUX_X86_64 == util.get_platform(): + asm_files = [f for f in grpc_core_dependencies.ASM_SOURCE_FILES + if (LINUX_X86_64 in f or "hrss/asm" in f) + and "test" not in f] + print(asm_files) + NO_BORING_ASM = False + else: + print("ASM Builds for BoringSSL currently only supported " + "on linux-x86-64. Found:", util.get_platform()) +if NO_BORING_ASM: + DEFINE_MACROS += (('OPENSSL_NO_ASM', 1),) + if not DISABLE_LIBC_COMPATIBILITY: DEFINE_MACROS += (('GPR_BACKWARDS_COMPATIBILITY_MODE', 1),) + if "win32" in sys.platform: # TODO(zyc): Re-enable c-ares on x64 and x86 windows after fixing the # ares_library_init compilation issue @@ -328,7 +354,8 @@ def cython_extensions_and_necessity(): extensions = [ _extension.Extension( name=module_name, - sources=[module_file] + list(CYTHON_HELPER_C_FILES) + core_c_files, + sources=([module_file] + list(CYTHON_HELPER_C_FILES) + + core_c_files + asm_files), include_dirs=list(EXTENSION_INCLUDE_DIRECTORIES), libraries=list(EXTENSION_LIBRARIES), define_macros=list(DEFINE_MACROS), diff --git a/src/boringssl/gen_build_yaml.py b/src/boringssl/gen_build_yaml.py index 0b869fa64f3..404226f645d 100755 --- a/src/boringssl/gen_build_yaml.py +++ b/src/boringssl/gen_build_yaml.py @@ -65,6 +65,9 @@ class Grpc(object): 'src': sorted( map_dir(f) for f in files['ssl'] + files['crypto']), + 'asm_src': + sorted(map_dir(f) + for _, srcs in asm_outputs for f in srcs), 'headers': sorted( map_dir(f) diff --git a/src/python/grpcio/grpc_core_dependencies.py b/src/python/grpcio/grpc_core_dependencies.py index 59034638175..10c8e43299e 100644 --- a/src/python/grpcio/grpc_core_dependencies.py +++ b/src/python/grpcio/grpc_core_dependencies.py @@ -905,3 +905,149 @@ CORE_SOURCE_FILES = [ 'third_party/zlib/uncompr.c', 'third_party/zlib/zutil.c', ] +ASM_SOURCE_FILES = [ + 'third_party/boringssl-with-bazel/ios-aarch64/crypto/chacha/chacha-armv8.S', + 'third_party/boringssl-with-bazel/ios-aarch64/crypto/fipsmodule/aesv8-armx64.S', + 'third_party/boringssl-with-bazel/ios-aarch64/crypto/fipsmodule/armv8-mont.S', + 'third_party/boringssl-with-bazel/ios-aarch64/crypto/fipsmodule/ghash-neon-armv8.S', + 'third_party/boringssl-with-bazel/ios-aarch64/crypto/fipsmodule/ghashv8-armx64.S', + 'third_party/boringssl-with-bazel/ios-aarch64/crypto/fipsmodule/sha1-armv8.S', + 'third_party/boringssl-with-bazel/ios-aarch64/crypto/fipsmodule/sha256-armv8.S', + 'third_party/boringssl-with-bazel/ios-aarch64/crypto/fipsmodule/sha512-armv8.S', + 'third_party/boringssl-with-bazel/ios-aarch64/crypto/fipsmodule/vpaes-armv8.S', + 'third_party/boringssl-with-bazel/ios-aarch64/crypto/test/trampoline-armv8.S', + 'third_party/boringssl-with-bazel/ios-arm/crypto/chacha/chacha-armv4.S', + 'third_party/boringssl-with-bazel/ios-arm/crypto/fipsmodule/aesv8-armx32.S', + 'third_party/boringssl-with-bazel/ios-arm/crypto/fipsmodule/armv4-mont.S', + 'third_party/boringssl-with-bazel/ios-arm/crypto/fipsmodule/bsaes-armv7.S', + 'third_party/boringssl-with-bazel/ios-arm/crypto/fipsmodule/ghash-armv4.S', + 'third_party/boringssl-with-bazel/ios-arm/crypto/fipsmodule/ghashv8-armx32.S', + 'third_party/boringssl-with-bazel/ios-arm/crypto/fipsmodule/sha1-armv4-large.S', + 'third_party/boringssl-with-bazel/ios-arm/crypto/fipsmodule/sha256-armv4.S', + 'third_party/boringssl-with-bazel/ios-arm/crypto/fipsmodule/sha512-armv4.S', + 'third_party/boringssl-with-bazel/ios-arm/crypto/fipsmodule/vpaes-armv7.S', + 'third_party/boringssl-with-bazel/ios-arm/crypto/test/trampoline-armv4.S', + 'third_party/boringssl-with-bazel/linux-aarch64/crypto/chacha/chacha-armv8.S', + 'third_party/boringssl-with-bazel/linux-aarch64/crypto/fipsmodule/aesv8-armx64.S', + 'third_party/boringssl-with-bazel/linux-aarch64/crypto/fipsmodule/armv8-mont.S', + 'third_party/boringssl-with-bazel/linux-aarch64/crypto/fipsmodule/ghash-neon-armv8.S', + 'third_party/boringssl-with-bazel/linux-aarch64/crypto/fipsmodule/ghashv8-armx64.S', + 'third_party/boringssl-with-bazel/linux-aarch64/crypto/fipsmodule/sha1-armv8.S', + 'third_party/boringssl-with-bazel/linux-aarch64/crypto/fipsmodule/sha256-armv8.S', + 'third_party/boringssl-with-bazel/linux-aarch64/crypto/fipsmodule/sha512-armv8.S', + 'third_party/boringssl-with-bazel/linux-aarch64/crypto/fipsmodule/vpaes-armv8.S', + 'third_party/boringssl-with-bazel/linux-aarch64/crypto/test/trampoline-armv8.S', + 'third_party/boringssl-with-bazel/linux-arm/crypto/chacha/chacha-armv4.S', + 'third_party/boringssl-with-bazel/linux-arm/crypto/fipsmodule/aesv8-armx32.S', + 'third_party/boringssl-with-bazel/linux-arm/crypto/fipsmodule/armv4-mont.S', + 'third_party/boringssl-with-bazel/linux-arm/crypto/fipsmodule/bsaes-armv7.S', + 'third_party/boringssl-with-bazel/linux-arm/crypto/fipsmodule/ghash-armv4.S', + 'third_party/boringssl-with-bazel/linux-arm/crypto/fipsmodule/ghashv8-armx32.S', + 'third_party/boringssl-with-bazel/linux-arm/crypto/fipsmodule/sha1-armv4-large.S', + 'third_party/boringssl-with-bazel/linux-arm/crypto/fipsmodule/sha256-armv4.S', + 'third_party/boringssl-with-bazel/linux-arm/crypto/fipsmodule/sha512-armv4.S', + 'third_party/boringssl-with-bazel/linux-arm/crypto/fipsmodule/vpaes-armv7.S', + 'third_party/boringssl-with-bazel/linux-arm/crypto/test/trampoline-armv4.S', + 'third_party/boringssl-with-bazel/linux-ppc64le/crypto/fipsmodule/aesp8-ppc.S', + 'third_party/boringssl-with-bazel/linux-ppc64le/crypto/fipsmodule/ghashp8-ppc.S', + 'third_party/boringssl-with-bazel/linux-ppc64le/crypto/test/trampoline-ppc.S', + 'third_party/boringssl-with-bazel/linux-x86/crypto/chacha/chacha-x86.S', + 'third_party/boringssl-with-bazel/linux-x86/crypto/fipsmodule/aesni-x86.S', + 'third_party/boringssl-with-bazel/linux-x86/crypto/fipsmodule/bn-586.S', + 'third_party/boringssl-with-bazel/linux-x86/crypto/fipsmodule/co-586.S', + 'third_party/boringssl-with-bazel/linux-x86/crypto/fipsmodule/ghash-ssse3-x86.S', + 'third_party/boringssl-with-bazel/linux-x86/crypto/fipsmodule/ghash-x86.S', + 'third_party/boringssl-with-bazel/linux-x86/crypto/fipsmodule/md5-586.S', + 'third_party/boringssl-with-bazel/linux-x86/crypto/fipsmodule/sha1-586.S', + 'third_party/boringssl-with-bazel/linux-x86/crypto/fipsmodule/sha256-586.S', + 'third_party/boringssl-with-bazel/linux-x86/crypto/fipsmodule/sha512-586.S', + 'third_party/boringssl-with-bazel/linux-x86/crypto/fipsmodule/vpaes-x86.S', + 'third_party/boringssl-with-bazel/linux-x86/crypto/fipsmodule/x86-mont.S', + 'third_party/boringssl-with-bazel/linux-x86/crypto/test/trampoline-x86.S', + 'third_party/boringssl-with-bazel/linux-x86_64/crypto/chacha/chacha-x86_64.S', + 'third_party/boringssl-with-bazel/linux-x86_64/crypto/cipher_extra/aes128gcmsiv-x86_64.S', + 'third_party/boringssl-with-bazel/linux-x86_64/crypto/cipher_extra/chacha20_poly1305_x86_64.S', + 'third_party/boringssl-with-bazel/linux-x86_64/crypto/fipsmodule/aesni-gcm-x86_64.S', + 'third_party/boringssl-with-bazel/linux-x86_64/crypto/fipsmodule/aesni-x86_64.S', + 'third_party/boringssl-with-bazel/linux-x86_64/crypto/fipsmodule/ghash-ssse3-x86_64.S', + 'third_party/boringssl-with-bazel/linux-x86_64/crypto/fipsmodule/ghash-x86_64.S', + 'third_party/boringssl-with-bazel/linux-x86_64/crypto/fipsmodule/md5-x86_64.S', + 'third_party/boringssl-with-bazel/linux-x86_64/crypto/fipsmodule/p256-x86_64-asm.S', + 'third_party/boringssl-with-bazel/linux-x86_64/crypto/fipsmodule/p256_beeu-x86_64-asm.S', + 'third_party/boringssl-with-bazel/linux-x86_64/crypto/fipsmodule/rdrand-x86_64.S', + 'third_party/boringssl-with-bazel/linux-x86_64/crypto/fipsmodule/rsaz-avx2.S', + 'third_party/boringssl-with-bazel/linux-x86_64/crypto/fipsmodule/sha1-x86_64.S', + 'third_party/boringssl-with-bazel/linux-x86_64/crypto/fipsmodule/sha256-x86_64.S', + 'third_party/boringssl-with-bazel/linux-x86_64/crypto/fipsmodule/sha512-x86_64.S', + 'third_party/boringssl-with-bazel/linux-x86_64/crypto/fipsmodule/vpaes-x86_64.S', + 'third_party/boringssl-with-bazel/linux-x86_64/crypto/fipsmodule/x86_64-mont.S', + 'third_party/boringssl-with-bazel/linux-x86_64/crypto/fipsmodule/x86_64-mont5.S', + 'third_party/boringssl-with-bazel/linux-x86_64/crypto/test/trampoline-x86_64.S', + 'third_party/boringssl-with-bazel/mac-x86/crypto/chacha/chacha-x86.S', + 'third_party/boringssl-with-bazel/mac-x86/crypto/fipsmodule/aesni-x86.S', + 'third_party/boringssl-with-bazel/mac-x86/crypto/fipsmodule/bn-586.S', + 'third_party/boringssl-with-bazel/mac-x86/crypto/fipsmodule/co-586.S', + 'third_party/boringssl-with-bazel/mac-x86/crypto/fipsmodule/ghash-ssse3-x86.S', + 'third_party/boringssl-with-bazel/mac-x86/crypto/fipsmodule/ghash-x86.S', + 'third_party/boringssl-with-bazel/mac-x86/crypto/fipsmodule/md5-586.S', + 'third_party/boringssl-with-bazel/mac-x86/crypto/fipsmodule/sha1-586.S', + 'third_party/boringssl-with-bazel/mac-x86/crypto/fipsmodule/sha256-586.S', + 'third_party/boringssl-with-bazel/mac-x86/crypto/fipsmodule/sha512-586.S', + 'third_party/boringssl-with-bazel/mac-x86/crypto/fipsmodule/vpaes-x86.S', + 'third_party/boringssl-with-bazel/mac-x86/crypto/fipsmodule/x86-mont.S', + 'third_party/boringssl-with-bazel/mac-x86/crypto/test/trampoline-x86.S', + 'third_party/boringssl-with-bazel/mac-x86_64/crypto/chacha/chacha-x86_64.S', + 'third_party/boringssl-with-bazel/mac-x86_64/crypto/cipher_extra/aes128gcmsiv-x86_64.S', + 'third_party/boringssl-with-bazel/mac-x86_64/crypto/cipher_extra/chacha20_poly1305_x86_64.S', + 'third_party/boringssl-with-bazel/mac-x86_64/crypto/fipsmodule/aesni-gcm-x86_64.S', + 'third_party/boringssl-with-bazel/mac-x86_64/crypto/fipsmodule/aesni-x86_64.S', + 'third_party/boringssl-with-bazel/mac-x86_64/crypto/fipsmodule/ghash-ssse3-x86_64.S', + 'third_party/boringssl-with-bazel/mac-x86_64/crypto/fipsmodule/ghash-x86_64.S', + 'third_party/boringssl-with-bazel/mac-x86_64/crypto/fipsmodule/md5-x86_64.S', + 'third_party/boringssl-with-bazel/mac-x86_64/crypto/fipsmodule/p256-x86_64-asm.S', + 'third_party/boringssl-with-bazel/mac-x86_64/crypto/fipsmodule/p256_beeu-x86_64-asm.S', + 'third_party/boringssl-with-bazel/mac-x86_64/crypto/fipsmodule/rdrand-x86_64.S', + 'third_party/boringssl-with-bazel/mac-x86_64/crypto/fipsmodule/rsaz-avx2.S', + 'third_party/boringssl-with-bazel/mac-x86_64/crypto/fipsmodule/sha1-x86_64.S', + 'third_party/boringssl-with-bazel/mac-x86_64/crypto/fipsmodule/sha256-x86_64.S', + 'third_party/boringssl-with-bazel/mac-x86_64/crypto/fipsmodule/sha512-x86_64.S', + 'third_party/boringssl-with-bazel/mac-x86_64/crypto/fipsmodule/vpaes-x86_64.S', + 'third_party/boringssl-with-bazel/mac-x86_64/crypto/fipsmodule/x86_64-mont.S', + 'third_party/boringssl-with-bazel/mac-x86_64/crypto/fipsmodule/x86_64-mont5.S', + 'third_party/boringssl-with-bazel/mac-x86_64/crypto/test/trampoline-x86_64.S', + 'third_party/boringssl-with-bazel/src/crypto/curve25519/asm/x25519-asm-arm.S', + 'third_party/boringssl-with-bazel/src/crypto/hrss/asm/poly_rq_mul.S', + 'third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm_asm.S', + 'third_party/boringssl-with-bazel/win-x86/crypto/chacha/chacha-x86.asm', + 'third_party/boringssl-with-bazel/win-x86/crypto/fipsmodule/aesni-x86.asm', + 'third_party/boringssl-with-bazel/win-x86/crypto/fipsmodule/bn-586.asm', + 'third_party/boringssl-with-bazel/win-x86/crypto/fipsmodule/co-586.asm', + 'third_party/boringssl-with-bazel/win-x86/crypto/fipsmodule/ghash-ssse3-x86.asm', + 'third_party/boringssl-with-bazel/win-x86/crypto/fipsmodule/ghash-x86.asm', + 'third_party/boringssl-with-bazel/win-x86/crypto/fipsmodule/md5-586.asm', + 'third_party/boringssl-with-bazel/win-x86/crypto/fipsmodule/sha1-586.asm', + 'third_party/boringssl-with-bazel/win-x86/crypto/fipsmodule/sha256-586.asm', + 'third_party/boringssl-with-bazel/win-x86/crypto/fipsmodule/sha512-586.asm', + 'third_party/boringssl-with-bazel/win-x86/crypto/fipsmodule/vpaes-x86.asm', + 'third_party/boringssl-with-bazel/win-x86/crypto/fipsmodule/x86-mont.asm', + 'third_party/boringssl-with-bazel/win-x86/crypto/test/trampoline-x86.asm', + 'third_party/boringssl-with-bazel/win-x86_64/crypto/chacha/chacha-x86_64.asm', + 'third_party/boringssl-with-bazel/win-x86_64/crypto/cipher_extra/aes128gcmsiv-x86_64.asm', + 'third_party/boringssl-with-bazel/win-x86_64/crypto/cipher_extra/chacha20_poly1305_x86_64.asm', + 'third_party/boringssl-with-bazel/win-x86_64/crypto/fipsmodule/aesni-gcm-x86_64.asm', + 'third_party/boringssl-with-bazel/win-x86_64/crypto/fipsmodule/aesni-x86_64.asm', + 'third_party/boringssl-with-bazel/win-x86_64/crypto/fipsmodule/ghash-ssse3-x86_64.asm', + 'third_party/boringssl-with-bazel/win-x86_64/crypto/fipsmodule/ghash-x86_64.asm', + 'third_party/boringssl-with-bazel/win-x86_64/crypto/fipsmodule/md5-x86_64.asm', + 'third_party/boringssl-with-bazel/win-x86_64/crypto/fipsmodule/p256-x86_64-asm.asm', + 'third_party/boringssl-with-bazel/win-x86_64/crypto/fipsmodule/p256_beeu-x86_64-asm.asm', + 'third_party/boringssl-with-bazel/win-x86_64/crypto/fipsmodule/rdrand-x86_64.asm', + 'third_party/boringssl-with-bazel/win-x86_64/crypto/fipsmodule/rsaz-avx2.asm', + 'third_party/boringssl-with-bazel/win-x86_64/crypto/fipsmodule/sha1-x86_64.asm', + 'third_party/boringssl-with-bazel/win-x86_64/crypto/fipsmodule/sha256-x86_64.asm', + 'third_party/boringssl-with-bazel/win-x86_64/crypto/fipsmodule/sha512-x86_64.asm', + 'third_party/boringssl-with-bazel/win-x86_64/crypto/fipsmodule/vpaes-x86_64.asm', + 'third_party/boringssl-with-bazel/win-x86_64/crypto/fipsmodule/x86_64-mont.asm', + 'third_party/boringssl-with-bazel/win-x86_64/crypto/fipsmodule/x86_64-mont5.asm', + 'third_party/boringssl-with-bazel/win-x86_64/crypto/test/trampoline-x86_64.asm', +] diff --git a/templates/src/python/grpcio/grpc_core_dependencies.py.template b/templates/src/python/grpcio/grpc_core_dependencies.py.template index a62b54e45b0..36c2e38ae92 100644 --- a/templates/src/python/grpcio/grpc_core_dependencies.py.template +++ b/templates/src/python/grpcio/grpc_core_dependencies.py.template @@ -17,14 +17,24 @@ # AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio/grpc_core_dependencies.py.template`!!! <% srcs = [] + asm_srcs = [] for lib in libs: if lib.name in python_dependencies.transitive_deps: for src in lib.src: srcs.append(src) + if hasattr(lib, 'asm_src'): + for src in lib.asm_src: + asm_srcs.append(src) srcs = sorted(set(srcs)) + asm_srcs = sorted(set(asm_srcs)) %> CORE_SOURCE_FILES = [ % for src in srcs: '${src}', % endfor ] + ASM_SOURCE_FILES = [ + % for src in asm_srcs: + '${src}', + % endfor + ] diff --git a/tools/buildgen/plugins/check_attrs.py b/tools/buildgen/plugins/check_attrs.py index 467406f4b93..a9acd1ea550 100644 --- a/tools/buildgen/plugins/check_attrs.py +++ b/tools/buildgen/plugins/check_attrs.py @@ -38,6 +38,7 @@ VALID_ATTRIBUTE_KEYS_MAP = { 'uses': anything(), }, 'lib': { + 'asm_src': anything(), 'baselib': anything(), 'boringssl': one_of((True,)), 'build_system': anything(),