29b186736c
Previously, error strings were kept in arrays for each subdirectory and err.c would iterate over them all and insert them at init time to a hash table. This means that, even if you have a shared library and lots of processes using that, each process has ~30KB of private memory from building that hash table. This this change, all the error strings are built into a sorted list and are thus static data. This means that processes can share the error information and it actually saves binary space because of all the pointer overhead in the old scheme. Also it saves the time taken building the hash table at startup. This removes support for externally-supplied error string data. Change-Id: Ifca04f335c673a048e1a3e76ff2b69c7264635be
199 lines
4.0 KiB
CMake
199 lines
4.0 KiB
CMake
include_directories(. ../include)
|
|
|
|
if(APPLE)
|
|
if (${ARCH} STREQUAL "x86")
|
|
set(PERLASM_FLAGS "-fPIC")
|
|
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")
|
|
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)
|
|
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 ${CMAKE_CURRENT_SOURCE_DIR}/${src} ${PERLASM_STYLE} ${PERLASM_FLAGS} ${ARGN} > ${dest}
|
|
DEPENDS
|
|
${src}
|
|
${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
|
|
ex_data.c
|
|
ex_data_impl.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>
|
|
)
|
|
|
|
add_executable(
|
|
constant_time_test
|
|
|
|
constant_time_test.c
|
|
)
|
|
|
|
target_link_libraries(constant_time_test crypto)
|
|
|
|
perlasm(cpu-x86_64-asm.${ASM_EXT} cpu-x86_64-asm.pl)
|
|
perlasm(cpu-x86-asm.${ASM_EXT} cpu-x86-asm.pl)
|