f06802f1e4
This is as partial import of upstream's 9b05cbc33e7895ed033b1119e300782d9e0cf23c. It includes the perlasm changes, but not the CPU feature detection bits as we do those differently. This is largely so we don't diverge from upstream, but it'll help with iOS assembly in the future. sha512-armv8.pl is modified slightly from upstream to switch from conditioning on the output file to conditioning on an extra argument. This makes our previous change from upstream (removing the 'open STDOUT' line) more explicit. BUG=338886 Change-Id: Ic8ca1388ae20e94566f475bad3464ccc73f445df Reviewed-on: https://boringssl-review.googlesource.com/4405 Reviewed-by: Adam Langley <agl@google.com>
214 lines
4.3 KiB
CMake
214 lines
4.3 KiB
CMake
include_directories(. ../include)
|
|
|
|
if(APPLE)
|
|
if (${ARCH} STREQUAL "x86")
|
|
set(PERLASM_FLAGS "-fPIC -DOPENSSL_IA32_SSE2")
|
|
endif()
|
|
set(PERLASM_STYLE macosx)
|
|
set(ASM_EXT S)
|
|
enable_language(ASM)
|
|
elseif(UNIX)
|
|
if (${ARCH} STREQUAL "aarch64")
|
|
# The "armx" Perl scripts look for "64" in the style argument
|
|
# in order to decide whether to generate 32- or 64-bit asm.
|
|
set(PERLASM_STYLE linux64)
|
|
elseif (${ARCH} STREQUAL "x86")
|
|
set(PERLASM_FLAGS "-fPIC -DOPENSSL_IA32_SSE2")
|
|
set(PERLASM_STYLE elf)
|
|
else()
|
|
set(PERLASM_STYLE elf)
|
|
endif()
|
|
set(ASM_EXT S)
|
|
enable_language(ASM)
|
|
else()
|
|
if (CMAKE_CL_64)
|
|
message("Using nasm")
|
|
set(PERLASM_STYLE nasm)
|
|
else()
|
|
message("Using win32n")
|
|
set(PERLASM_STYLE win32n)
|
|
set(PERLASM_FLAGS "-DOPENSSL_IA32_SSE2")
|
|
endif()
|
|
|
|
# On Windows, we use the NASM output, specifically built with Yasm.
|
|
set(ASM_EXT asm)
|
|
enable_language(ASM_NASM)
|
|
endif()
|
|
|
|
function(perlasm dest src)
|
|
add_custom_command(
|
|
OUTPUT ${dest}
|
|
COMMAND ${PERL_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/${src} ${PERLASM_STYLE} ${PERLASM_FLAGS} ${ARGN} > ${dest}
|
|
DEPENDS
|
|
${src}
|
|
${PROJECT_SOURCE_DIR}/crypto/perlasm/arm-xlate.pl
|
|
${PROJECT_SOURCE_DIR}/crypto/perlasm/x86_64-xlate.pl
|
|
${PROJECT_SOURCE_DIR}/crypto/perlasm/x86asm.pl
|
|
${PROJECT_SOURCE_DIR}/crypto/perlasm/x86gas.pl
|
|
${PROJECT_SOURCE_DIR}/crypto/perlasm/x86masm.pl
|
|
${PROJECT_SOURCE_DIR}/crypto/perlasm/x86nasm.pl
|
|
WORKING_DIRECTORY .
|
|
)
|
|
endfunction()
|
|
|
|
if (${ARCH} STREQUAL "x86_64")
|
|
set(
|
|
CRYPTO_ARCH_SOURCES
|
|
|
|
cpu-x86_64-asm.${ASM_EXT}
|
|
cpu-intel.c
|
|
)
|
|
endif()
|
|
|
|
if (${ARCH} STREQUAL "x86")
|
|
set(
|
|
CRYPTO_ARCH_SOURCES
|
|
|
|
cpu-x86-asm.${ASM_EXT}
|
|
cpu-intel.c
|
|
)
|
|
endif()
|
|
|
|
if (${ARCH} STREQUAL "arm")
|
|
set(
|
|
CRYPTO_ARCH_SOURCES
|
|
|
|
cpu-arm.c
|
|
cpu-arm-asm.S
|
|
)
|
|
endif()
|
|
|
|
if (${ARCH} STREQUAL "aarch64")
|
|
set(
|
|
CRYPTO_ARCH_SOURCES
|
|
|
|
cpu-arm.c
|
|
)
|
|
endif()
|
|
|
|
# Level 0.1 - depends on nothing outside this set.
|
|
add_subdirectory(stack)
|
|
add_subdirectory(lhash)
|
|
add_subdirectory(err)
|
|
add_subdirectory(buf)
|
|
add_subdirectory(base64)
|
|
add_subdirectory(bytestring)
|
|
|
|
# Level 0.2 - depends on nothing but itself
|
|
add_subdirectory(sha)
|
|
add_subdirectory(md4)
|
|
add_subdirectory(md5)
|
|
add_subdirectory(modes)
|
|
add_subdirectory(aes)
|
|
add_subdirectory(des)
|
|
add_subdirectory(rc4)
|
|
add_subdirectory(conf)
|
|
add_subdirectory(chacha)
|
|
add_subdirectory(poly1305)
|
|
|
|
# Level 1, depends only on 0.*
|
|
add_subdirectory(digest)
|
|
add_subdirectory(cipher)
|
|
add_subdirectory(rand)
|
|
add_subdirectory(bio)
|
|
add_subdirectory(bn)
|
|
add_subdirectory(obj)
|
|
add_subdirectory(asn1)
|
|
|
|
# Level 2
|
|
add_subdirectory(engine)
|
|
add_subdirectory(dh)
|
|
add_subdirectory(dsa)
|
|
add_subdirectory(rsa)
|
|
add_subdirectory(ec)
|
|
add_subdirectory(ecdh)
|
|
add_subdirectory(ecdsa)
|
|
add_subdirectory(hmac)
|
|
|
|
# Level 3
|
|
add_subdirectory(evp)
|
|
add_subdirectory(hkdf)
|
|
add_subdirectory(pem)
|
|
add_subdirectory(x509)
|
|
add_subdirectory(x509v3)
|
|
|
|
# Level 4
|
|
add_subdirectory(pkcs8)
|
|
|
|
add_library(
|
|
crypto
|
|
|
|
crypto.c
|
|
mem.c
|
|
thread.c
|
|
thread_pthread.c
|
|
thread_win.c
|
|
ex_data.c
|
|
time_support.c
|
|
directory_posix.c
|
|
directory_win.c
|
|
|
|
${CRYPTO_ARCH_SOURCES}
|
|
|
|
$<TARGET_OBJECTS:stack>
|
|
$<TARGET_OBJECTS:lhash>
|
|
$<TARGET_OBJECTS:err>
|
|
$<TARGET_OBJECTS:base64>
|
|
$<TARGET_OBJECTS:bytestring>
|
|
$<TARGET_OBJECTS:sha>
|
|
$<TARGET_OBJECTS:md4>
|
|
$<TARGET_OBJECTS:md5>
|
|
$<TARGET_OBJECTS:digest>
|
|
$<TARGET_OBJECTS:cipher>
|
|
$<TARGET_OBJECTS:modes>
|
|
$<TARGET_OBJECTS:aes>
|
|
$<TARGET_OBJECTS:des>
|
|
$<TARGET_OBJECTS:rc4>
|
|
$<TARGET_OBJECTS:conf>
|
|
$<TARGET_OBJECTS:chacha>
|
|
$<TARGET_OBJECTS:poly1305>
|
|
$<TARGET_OBJECTS:buf>
|
|
$<TARGET_OBJECTS:bn>
|
|
$<TARGET_OBJECTS:bio>
|
|
$<TARGET_OBJECTS:rand>
|
|
$<TARGET_OBJECTS:obj>
|
|
$<TARGET_OBJECTS:asn1>
|
|
$<TARGET_OBJECTS:engine>
|
|
$<TARGET_OBJECTS:dh>
|
|
$<TARGET_OBJECTS:dsa>
|
|
$<TARGET_OBJECTS:rsa>
|
|
$<TARGET_OBJECTS:ec>
|
|
$<TARGET_OBJECTS:ecdh>
|
|
$<TARGET_OBJECTS:ecdsa>
|
|
$<TARGET_OBJECTS:hmac>
|
|
$<TARGET_OBJECTS:evp>
|
|
$<TARGET_OBJECTS:hkdf>
|
|
$<TARGET_OBJECTS:pem>
|
|
$<TARGET_OBJECTS:x509>
|
|
$<TARGET_OBJECTS:x509v3>
|
|
$<TARGET_OBJECTS:pkcs8>
|
|
)
|
|
|
|
if(NOT MSVC)
|
|
target_link_libraries(crypto pthread)
|
|
endif()
|
|
|
|
add_executable(
|
|
constant_time_test
|
|
|
|
constant_time_test.c
|
|
)
|
|
|
|
target_link_libraries(constant_time_test crypto)
|
|
|
|
add_executable(
|
|
thread_test
|
|
|
|
thread_test.c
|
|
)
|
|
|
|
target_link_libraries(thread_test crypto)
|
|
|
|
perlasm(cpu-x86_64-asm.${ASM_EXT} cpu-x86_64-asm.pl)
|
|
perlasm(cpu-x86-asm.${ASM_EXT} cpu-x86-asm.pl)
|