| include_directories(../include) |
| |
| if(NOT OPENSSL_NO_ASM) |
| if(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. |
| if(APPLE) |
| set(PERLASM_STYLE ios64) |
| else() |
| set(PERLASM_STYLE linux64) |
| endif() |
| elseif(${ARCH} STREQUAL "arm") |
| if(APPLE) |
| set(PERLASM_STYLE ios32) |
| else() |
| set(PERLASM_STYLE linux32) |
| endif() |
| elseif(${ARCH} STREQUAL "ppc64le") |
| set(PERLASM_STYLE linux64le) |
| else() |
| if(${ARCH} STREQUAL "x86") |
| set(PERLASM_FLAGS "-fPIC -DOPENSSL_IA32_SSE2") |
| endif() |
| if(APPLE) |
| set(PERLASM_STYLE macosx) |
| else() |
| set(PERLASM_STYLE elf) |
| endif() |
| endif() |
| set(ASM_EXT S) |
| enable_language(ASM) |
| set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -Wa,--noexecstack") |
| |
| # Clang's integerated assembler does not support debug symbols. |
| if(NOT CMAKE_ASM_COMPILER_ID MATCHES "Clang") |
| set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -Wa,-g") |
| endif() |
| |
| # CMake does not add -isysroot and -arch flags to assembly. |
| if(APPLE) |
| if(CMAKE_OSX_SYSROOT) |
| set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -isysroot \"${CMAKE_OSX_SYSROOT}\"") |
| endif() |
| foreach(arch ${CMAKE_OSX_ARCHITECTURES}) |
| set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -arch ${arch}") |
| endforeach() |
| endif() |
| else() |
| if(${ARCH} STREQUAL "x86_64") |
| set(PERLASM_STYLE nasm) |
| else() |
| set(PERLASM_STYLE win32n) |
| set(PERLASM_FLAGS "-DOPENSSL_IA32_SSE2") |
| endif() |
| set(CMAKE_ASM_NASM_FLAGS "-gcv8") |
| |
| # On Windows, we use the NASM output, specifically built with Yasm. |
| set(ASM_EXT asm) |
| enable_language(ASM_NASM) |
| endif() |
| 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/ppc-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() |
| |
| # 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) |
| add_subdirectory(pool) |
| |
| # Level 0.2 - depends on nothing but itself |
| add_subdirectory(rc4) |
| add_subdirectory(conf) |
| add_subdirectory(chacha) |
| add_subdirectory(poly1305) |
| add_subdirectory(curve25519) |
| |
| # Level 1, depends only on 0.* |
| add_subdirectory(digest_extra) |
| add_subdirectory(cipher_extra) |
| add_subdirectory(rand_extra) |
| add_subdirectory(bio) |
| add_subdirectory(bn_extra) |
| add_subdirectory(obj) |
| add_subdirectory(asn1) |
| |
| # Level 2 |
| add_subdirectory(engine) |
| add_subdirectory(dh) |
| add_subdirectory(dsa) |
| add_subdirectory(rsa_extra) |
| add_subdirectory(ec_extra) |
| add_subdirectory(ecdh_extra) |
| add_subdirectory(ecdsa_extra) |
| |
| # Level 3 |
| add_subdirectory(cmac) |
| add_subdirectory(evp) |
| add_subdirectory(hkdf) |
| add_subdirectory(pem) |
| add_subdirectory(x509) |
| add_subdirectory(x509v3) |
| |
| # Level 4 |
| add_subdirectory(pkcs7) |
| add_subdirectory(pkcs8) |
| |
| # Test support code |
| add_subdirectory(test) |
| |
| add_subdirectory(fipsmodule) |
| |
| add_library( |
| crypto_base |
| |
| OBJECT |
| |
| cpu-aarch64-fuchsia.c |
| cpu-aarch64-linux.c |
| cpu-arm.c |
| cpu-arm-linux.c |
| cpu-intel.c |
| cpu-ppc64le.c |
| crypto.c |
| ex_data.c |
| mem.c |
| refcount_c11.c |
| refcount_lock.c |
| thread.c |
| thread_none.c |
| thread_pthread.c |
| thread_win.c |
| ) |
| |
| if(FIPS_DELOCATE) |
| SET_SOURCE_FILES_PROPERTIES(fipsmodule/bcm.o PROPERTIES EXTERNAL_OBJECT true) |
| SET_SOURCE_FILES_PROPERTIES(fipsmodule/bcm.o PROPERTIES GENERATED true) |
| |
| set( |
| CRYPTO_FIPS_OBJECTS |
| |
| fipsmodule/bcm.o |
| ) |
| endif() |
| |
| add_library( |
| crypto |
| |
| $<TARGET_OBJECTS:crypto_base> |
| $<TARGET_OBJECTS:stack> |
| $<TARGET_OBJECTS:lhash> |
| $<TARGET_OBJECTS:err> |
| $<TARGET_OBJECTS:base64> |
| $<TARGET_OBJECTS:bytestring> |
| $<TARGET_OBJECTS:pool> |
| $<TARGET_OBJECTS:fipsmodule> |
| $<TARGET_OBJECTS:digest_extra> |
| $<TARGET_OBJECTS:cipher_extra> |
| $<TARGET_OBJECTS:rc4> |
| $<TARGET_OBJECTS:conf> |
| $<TARGET_OBJECTS:chacha> |
| $<TARGET_OBJECTS:poly1305> |
| $<TARGET_OBJECTS:curve25519> |
| $<TARGET_OBJECTS:fiat> |
| $<TARGET_OBJECTS:buf> |
| $<TARGET_OBJECTS:bn_extra> |
| $<TARGET_OBJECTS:bio> |
| $<TARGET_OBJECTS:rand_extra> |
| $<TARGET_OBJECTS:obj> |
| $<TARGET_OBJECTS:asn1> |
| $<TARGET_OBJECTS:engine> |
| $<TARGET_OBJECTS:dh> |
| $<TARGET_OBJECTS:dsa> |
| $<TARGET_OBJECTS:rsa_extra> |
| $<TARGET_OBJECTS:ec_extra> |
| $<TARGET_OBJECTS:ecdh_extra> |
| $<TARGET_OBJECTS:ecdsa_extra> |
| $<TARGET_OBJECTS:cmac> |
| $<TARGET_OBJECTS:evp> |
| $<TARGET_OBJECTS:hkdf> |
| $<TARGET_OBJECTS:pem> |
| $<TARGET_OBJECTS:x509> |
| $<TARGET_OBJECTS:x509v3> |
| $<TARGET_OBJECTS:pkcs7> |
| $<TARGET_OBJECTS:pkcs8_lib> |
| |
| ${CRYPTO_FIPS_OBJECTS} |
| ) |
| |
| if(FIPS_DELOCATE) |
| add_dependencies(crypto bcm_o_target) |
| endif() |
| |
| SET_TARGET_PROPERTIES(crypto PROPERTIES LINKER_LANGUAGE C) |
| |
| if(NOT MSVC AND NOT ANDROID) |
| target_link_libraries(crypto pthread) |
| endif() |
| |
| # Every target depends on crypto, so we add libcxx as a dependency here to |
| # simplify injecting it everywhere. |
| if(USE_CUSTOM_LIBCXX) |
| target_link_libraries(crypto libcxx) |
| endif() |
| |
| # TODO(davidben): Convert the remaining tests to GTest. |
| add_executable( |
| crypto_test |
| |
| asn1/asn1_test.cc |
| base64/base64_test.cc |
| buf/buf_test.cc |
| bio/bio_test.cc |
| bytestring/bytestring_test.cc |
| chacha/chacha_test.cc |
| cipher_extra/aead_test.cc |
| cipher_extra/cipher_test.cc |
| cmac/cmac_test.cc |
| compiler_test.cc |
| constant_time_test.cc |
| curve25519/ed25519_test.cc |
| curve25519/spake25519_test.cc |
| curve25519/x25519_test.cc |
| ecdh_extra/ecdh_test.cc |
| dh/dh_test.cc |
| digest_extra/digest_test.cc |
| dsa/dsa_test.cc |
| err/err_test.cc |
| evp/evp_extra_test.cc |
| evp/evp_test.cc |
| evp/pbkdf_test.cc |
| evp/scrypt_test.cc |
| fipsmodule/aes/aes_test.cc |
| fipsmodule/bn/bn_test.cc |
| fipsmodule/ec/ec_test.cc |
| fipsmodule/ec/p256-x86_64_test.cc |
| fipsmodule/ecdsa/ecdsa_test.cc |
| fipsmodule/modes/gcm_test.cc |
| fipsmodule/rand/ctrdrbg_test.cc |
| hkdf/hkdf_test.cc |
| hmac_extra/hmac_test.cc |
| lhash/lhash_test.cc |
| obj/obj_test.cc |
| pkcs7/pkcs7_test.cc |
| pkcs8/pkcs8_test.cc |
| pkcs8/pkcs12_test.cc |
| poly1305/poly1305_test.cc |
| pool/pool_test.cc |
| refcount_test.cc |
| rsa_extra/rsa_test.cc |
| self_test.cc |
| test/file_test_gtest.cc |
| thread_test.cc |
| x509/x509_test.cc |
| x509/x509_time_test.cc |
| x509v3/tab_test.cc |
| x509v3/v3name_test.cc |
| |
| $<TARGET_OBJECTS:crypto_test_data> |
| $<TARGET_OBJECTS:boringssl_gtest_main> |
| $<TARGET_OBJECTS:test_support> |
| ) |
| |
| target_link_libraries(crypto_test crypto boringssl_gtest) |
| if(WIN32) |
| target_link_libraries(crypto_test ws2_32) |
| endif() |
| add_dependencies(all_tests crypto_test) |