@@ -3,6 +3,8 @@ set (CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
33set (libwebrtc_DERIVED_SOURCES_DIR "${CMAKE_BINARY_DIR} /libwebrtc/DerivedSources" )
44file (MAKE_DIRECTORY ${libwebrtc_DERIVED_SOURCES_DIR} )
55
6+ enable_language (ASM )
7+
68if (NOT APPLE )
79 find_package (LibVpx 1.10.0 )
810 if (NOT LIBVPX_FOUND)
@@ -221,6 +223,7 @@ set(webrtc_SOURCES
221223 Source/third_party/boringssl/src/crypto/cpu_aarch64_fuchsia.c
222224 Source/third_party/boringssl/src/crypto/cpu_aarch64_linux.c
223225 Source/third_party/boringssl/src/crypto/cpu_aarch64_win.c
226+ Source/third_party/boringssl/src/crypto/cpu_arm.c
224227 Source/third_party/boringssl/src/crypto/cpu_arm_linux.c
225228 Source/third_party/boringssl/src/crypto/cpu_intel.c
226229 Source/third_party/boringssl/src/crypto/crypto.c
@@ -1878,6 +1881,130 @@ if (WTF_CPU_ARM64)
18781881 add_definitions (-DWEBRTC_ARCH_ARM64 )
18791882endif ()
18801883
1884+ # Source/third_party/boringssl/src/cmake/perlasm.cmake cannot be re-used as-is, so vendor the
1885+ # adapted version here.
1886+
1887+ macro (append_to_parent_scope var )
1888+ foreach (arg IN ITEMS ${ARGN} )
1889+ list (APPEND ${var} "${CMAKE_BINARY_DIR} /Source/ThirdParty/libwebrtc/${arg} " )
1890+ endforeach ()
1891+ set (${var} "${${var} }" PARENT_SCOPE )
1892+ endmacro ()
1893+
1894+ function (add_perlasm_target dest src )
1895+ add_custom_command (
1896+ OUTPUT ${dest}
1897+ COMMAND ${PERL_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR} /${src} ${ARGN}
1898+ ${dest}
1899+ DEPENDS
1900+ ${src}
1901+ Source /third_party/boringssl/src/crypto/perlasm/arm-xlate.pl
1902+ Source /third_party/boringssl/src/crypto/perlasm/x86_64-xlate.pl
1903+ Source /third_party/boringssl/src/crypto/perlasm/x86asm.pl
1904+ Source /third_party/boringssl/src/crypto/perlasm/x86gas.pl
1905+ Source /third_party/boringssl/src/crypto/perlasm/x86masm.pl
1906+ Source /third_party/boringssl/src/crypto/perlasm/x86nasm.pl
1907+ WORKING_DIRECTORY .
1908+ )
1909+ endfunction ()
1910+
1911+ # perlasm generates perlasm output from a given file. arch specifies the
1912+ # architecture. dest specifies the basename of the output file. The list of
1913+ # generated files will be appended to ${var}_ASM and ${var}_NASM depending on
1914+ # the assembler used.
1915+ function (perlasm var arch dest src )
1916+ if (arch STREQUAL "aarch64" )
1917+ add_perlasm_target ("${dest} -apple.S" ${src} ios64 )
1918+ add_perlasm_target ("${dest} -linux.S" ${src} linux64 )
1919+ add_perlasm_target ("${dest} -win.S" ${src} win64 )
1920+ append_to_parent_scope ("${var} _ASM" "${dest} -apple.S" "${dest} -linux.S" "${dest} -win.S" )
1921+ elseif (arch STREQUAL "arm" )
1922+ add_perlasm_target ("${dest} -apple.S" ${src} ios32 )
1923+ add_perlasm_target ("${dest} -linux.S" ${src} linux32 )
1924+ append_to_parent_scope ("${var} _ASM" "${dest} -apple.S" "${dest} -linux.S" )
1925+ elseif (arch STREQUAL "x86" )
1926+ add_perlasm_target ("${dest} -apple.S" ${src} macosx -fPIC -DOPENSSL_IA32_SSE2 )
1927+ add_perlasm_target ("${dest} -linux.S" ${src} elf -fPIC -DOPENSSL_IA32_SSE2 )
1928+ add_perlasm_target ("${dest} -win.asm" ${src} win32n -DOPENSSL_IA32_SSE2 )
1929+ append_to_parent_scope ("${var} _ASM" "${dest} -apple.S" "${dest} -linux.S" )
1930+ append_to_parent_scope ("${var} _NASM" "${dest} -win.asm" )
1931+ elseif (arch STREQUAL "x86_64" )
1932+ add_perlasm_target ("${dest} -apple.S" ${src} macosx )
1933+ add_perlasm_target ("${dest} -linux.S" ${src} elf )
1934+ add_perlasm_target ("${dest} -win.asm" ${src} nasm )
1935+ append_to_parent_scope ("${var} _ASM" "${dest} -apple.S" "${dest} -linux.S" )
1936+ append_to_parent_scope ("${var} _NASM" "${dest} -win.asm" )
1937+ else ()
1938+ message (FATAL_ERROR "Unknown perlasm architecture: $arch" )
1939+ endif ()
1940+ endfunction ()
1941+
1942+ set (FIPS_PATH Source/third_party/boringssl/src/crypto/fipsmodule)
1943+ perlasm (BCM_SOURCES aarch64 aesv8-armv8 ${FIPS_PATH} /aes/asm/aesv8-armx.pl )
1944+ perlasm (BCM_SOURCES aarch64 aesv8-gcm-armv8 ${FIPS_PATH} /modes/asm/aesv8-gcm-armv8.pl )
1945+ perlasm (BCM_SOURCES aarch64 armv8-mont ${FIPS_PATH} /bn/asm/armv8-mont.pl )
1946+ perlasm (BCM_SOURCES aarch64 bn-armv8 ${FIPS_PATH} /bn/asm/bn-armv8.pl )
1947+ perlasm (BCM_SOURCES aarch64 ghash-neon-armv8 ${FIPS_PATH} /modes/asm/ghash-neon-armv8.pl )
1948+ perlasm (BCM_SOURCES aarch64 ghashv8-armv8 ${FIPS_PATH} /modes/asm/ghashv8-armx.pl )
1949+ perlasm (BCM_SOURCES aarch64 p256_beeu-armv8-asm ${FIPS_PATH} /ec/asm/p256_beeu-armv8-asm.pl )
1950+ perlasm (BCM_SOURCES aarch64 p256-armv8-asm ${FIPS_PATH} /ec/asm/p256-armv8-asm.pl )
1951+ perlasm (BCM_SOURCES aarch64 sha1-armv8 ${FIPS_PATH} /sha/asm/sha1-armv8.pl )
1952+ perlasm (BCM_SOURCES aarch64 sha256-armv8 ${FIPS_PATH} /sha/asm/sha512-armv8.pl )
1953+ perlasm (BCM_SOURCES aarch64 sha512-armv8 ${FIPS_PATH} /sha/asm/sha512-armv8.pl )
1954+ perlasm (BCM_SOURCES aarch64 vpaes-armv8 ${FIPS_PATH} /aes/asm/vpaes-armv8.pl )
1955+ perlasm (BCM_SOURCES arm aesv8-armv7 ${FIPS_PATH} /aes/asm/aesv8-armx.pl )
1956+ perlasm (BCM_SOURCES arm armv4-mont ${FIPS_PATH} /bn/asm/armv4-mont.pl )
1957+ perlasm (BCM_SOURCES arm bsaes-armv7 ${FIPS_PATH} /aes/asm/bsaes-armv7.pl )
1958+ perlasm (BCM_SOURCES arm ghash-armv4 ${FIPS_PATH} /modes/asm/ghash-armv4.pl )
1959+ perlasm (BCM_SOURCES arm ghashv8-armv7 ${FIPS_PATH} /modes/asm/ghashv8-armx.pl )
1960+ perlasm (BCM_SOURCES arm sha1-armv4-large ${FIPS_PATH} /sha/asm/sha1-armv4-large.pl )
1961+ perlasm (BCM_SOURCES arm sha256-armv4 ${FIPS_PATH} /sha/asm/sha256-armv4.pl )
1962+ perlasm (BCM_SOURCES arm sha512-armv4 ${FIPS_PATH} /sha/asm/sha512-armv4.pl )
1963+ perlasm (BCM_SOURCES arm vpaes-armv7 ${FIPS_PATH} /aes/asm/vpaes-armv7.pl )
1964+ perlasm (BCM_SOURCES x86 aesni-x86 ${FIPS_PATH} /aes/asm/aesni-x86.pl )
1965+ perlasm (BCM_SOURCES x86 bn-586 ${FIPS_PATH} /bn/asm/bn-586.pl )
1966+ perlasm (BCM_SOURCES x86 co-586 ${FIPS_PATH} /bn/asm/co-586.pl )
1967+ perlasm (BCM_SOURCES x86 ghash-ssse3-x86 ${FIPS_PATH} /modes/asm/ghash-ssse3-x86.pl )
1968+ perlasm (BCM_SOURCES x86 ghash-x86 ${FIPS_PATH} /modes/asm/ghash-x86.pl )
1969+ perlasm (BCM_SOURCES x86 md5-586 ${FIPS_PATH} /md5/asm/md5-586.pl )
1970+ perlasm (BCM_SOURCES x86 sha1-586 ${FIPS_PATH} /sha/asm/sha1-586.pl )
1971+ perlasm (BCM_SOURCES x86 sha256-586 ${FIPS_PATH} /sha/asm/sha256-586.pl )
1972+ perlasm (BCM_SOURCES x86 sha512-586 ${FIPS_PATH} /sha/asm/sha512-586.pl )
1973+ perlasm (BCM_SOURCES x86 vpaes-x86 ${FIPS_PATH} /aes/asm/vpaes-x86.pl )
1974+ perlasm (BCM_SOURCES x86 x86-mont ${FIPS_PATH} /bn/asm/x86-mont.pl )
1975+ perlasm (BCM_SOURCES x86_64 aesni-gcm-x86_64 ${FIPS_PATH} /modes/asm/aesni-gcm-x86_64.pl )
1976+ perlasm (BCM_SOURCES x86_64 aesni-x86_64 ${FIPS_PATH} /aes/asm/aesni-x86_64.pl )
1977+ perlasm (BCM_SOURCES x86_64 ghash-ssse3-x86_64 ${FIPS_PATH} /modes/asm/ghash-ssse3-x86_64.pl )
1978+ perlasm (BCM_SOURCES x86_64 ghash-x86_64 ${FIPS_PATH} /modes/asm/ghash-x86_64.pl )
1979+ perlasm (BCM_SOURCES x86_64 md5-x86_64 ${FIPS_PATH} /md5/asm/md5-x86_64.pl )
1980+ perlasm (BCM_SOURCES x86_64 p256_beeu-x86_64-asm ${FIPS_PATH} /ec/asm/p256_beeu-x86_64-asm.pl )
1981+ perlasm (BCM_SOURCES x86_64 p256-x86_64-asm ${FIPS_PATH} /ec/asm/p256-x86_64-asm.pl )
1982+ perlasm (BCM_SOURCES x86_64 rdrand-x86_64 ${FIPS_PATH} /rand/asm/rdrand-x86_64.pl )
1983+ perlasm (BCM_SOURCES x86_64 rsaz-avx2 ${FIPS_PATH} /bn/asm/rsaz-avx2.pl )
1984+ perlasm (BCM_SOURCES x86_64 sha1-x86_64 ${FIPS_PATH} /sha/asm/sha1-x86_64.pl )
1985+ perlasm (BCM_SOURCES x86_64 sha256-x86_64 ${FIPS_PATH} /sha/asm/sha512-x86_64.pl )
1986+ perlasm (BCM_SOURCES x86_64 sha512-x86_64 ${FIPS_PATH} /sha/asm/sha512-x86_64.pl )
1987+ perlasm (BCM_SOURCES x86_64 vpaes-x86_64 ${FIPS_PATH} /aes/asm/vpaes-x86_64.pl )
1988+ perlasm (BCM_SOURCES x86_64 x86_64-mont ${FIPS_PATH} /bn/asm/x86_64-mont.pl )
1989+ perlasm (BCM_SOURCES x86_64 x86_64-mont5 ${FIPS_PATH} /bn/asm/x86_64-mont5.pl )
1990+
1991+ set (CRYPTO_PATH Source/third_party/boringssl/src/crypto)
1992+ perlasm (CRYPTO_SOURCES aarch64 chacha/chacha-armv8 ${CRYPTO_PATH} /chacha/asm/chacha-armv8.pl )
1993+ perlasm (CRYPTO_SOURCES aarch64 cipher_extra/chacha20_poly1305_armv8 ${CRYPTO_PATH} /cipher_extra/asm/chacha20_poly1305_armv8.pl )
1994+ perlasm (CRYPTO_SOURCES aarch64 test /trampoline-armv8 ${CRYPTO_PATH} /test/asm/trampoline-armv8.pl )
1995+ perlasm (CRYPTO_SOURCES arm chacha/chacha-armv4 ${CRYPTO_PATH} /chacha/asm/chacha-armv4.pl )
1996+ perlasm (CRYPTO_SOURCES arm test /trampoline-armv4 ${CRYPTO_PATH} /test/asm/trampoline-armv4.pl )
1997+ perlasm (CRYPTO_SOURCES x86 chacha/chacha-x86 ${CRYPTO_PATH} /chacha/asm/chacha-x86.pl )
1998+ perlasm (CRYPTO_SOURCES x86 test /trampoline-x86 ${CRYPTO_PATH} /test/asm/trampoline-x86.pl )
1999+ perlasm (CRYPTO_SOURCES x86_64 chacha/chacha-x86_64 ${CRYPTO_PATH} /chacha/asm/chacha-x86_64.pl )
2000+ perlasm (CRYPTO_SOURCES x86_64 cipher_extra/aes128gcmsiv-x86_64 ${CRYPTO_PATH} /cipher_extra/asm/aes128gcmsiv-x86_64.pl )
2001+ perlasm (CRYPTO_SOURCES x86_64 cipher_extra/chacha20_poly1305_x86_64 ${CRYPTO_PATH} /cipher_extra/asm/chacha20_poly1305_x86_64.pl )
2002+ perlasm (CRYPTO_SOURCES x86_64 test /trampoline-x86_64 ${CRYPTO_PATH} /test/asm/trampoline-x86_64.pl )
2003+
2004+ # TODO: _NASM support for platforms that require it.
2005+ list (APPEND webrtc_SOURCES ${BCM_SOURCES_ASM} )
2006+ list (APPEND webrtc_SOURCES ${CRYPTO_SOURCES_ASM} )
2007+
18812008if (WTF_CPU_ARM OR WTF_CPU_ARM64)
18822009 list (APPEND webrtc_neon_SOURCES
18832010 Source/webrtc/common_audio/fir_filter_neon.cc
@@ -2200,7 +2327,7 @@ target_compile_definitions(webrtc PRIVATE
22002327 JSON_USE_EXCEPTION=0
22012328 NON_WINDOWS_DEFINE
22022329 NO_MAIN_THREAD_WRAPPING
2203- OPENSSL_NO_ASM
2330+ OPENSSL_ASM
22042331 OPUS_BUILD
22052332 OPUS_EXPORT=
22062333 RTC_ENABLE_VP9
@@ -2226,6 +2353,7 @@ target_compile_definitions(webrtc PRIVATE
22262353 WEBRTC_USE_H265=1
22272354 WTF_USE_DYNAMIC_ANNOTATIONS=1
22282355 _GNU_SOURCE
2356+ HWAES
22292357)
22302358
22312359if (APPLE )
0 commit comments