CMakeLists.txt raw

   1  # Copyright (c) 2023-present The Limenka developers
   2  # Distributed under the MIT software license, see the accompanying
   3  # file COPYING or https://opensource.org/license/mit/.
   4  
   5  add_library(limenka_crypto STATIC EXCLUDE_FROM_ALL
   6    aes.cpp
   7    bignum.cpp
   8    bulletproofs.cpp
   9    chacha20.cpp
  10    chacha20poly1305.cpp
  11    hex_base.cpp
  12    hkdf_sha256_32.cpp
  13    hmac_sha256.cpp
  14    hmac_sha512.cpp
  15    muhash.cpp
  16    poly1305.cpp
  17    ripemd160.cpp
  18    sha1.cpp
  19    sha256.cpp
  20    sha256_sse4.cpp
  21    sha3.cpp
  22    sha512.cpp
  23    siphash.cpp
  24    ../support/cleanse.cpp
  25  )
  26  
  27  target_link_libraries(limenka_crypto
  28    PRIVATE
  29      core_interface
  30  )
  31  
  32  if(HAVE_SSE41)
  33    target_compile_definitions(limenka_crypto PRIVATE ENABLE_SSE41)
  34    target_sources(limenka_crypto PRIVATE sha256_sse41.cpp)
  35    set_property(SOURCE sha256_sse41.cpp PROPERTY
  36      COMPILE_OPTIONS ${SSE41_CXXFLAGS}
  37    )
  38  endif()
  39  
  40  if(HAVE_AVX2)
  41    target_compile_definitions(limenka_crypto PRIVATE ENABLE_AVX2)
  42    target_sources(limenka_crypto PRIVATE sha256_avx2.cpp)
  43    set_property(SOURCE sha256_avx2.cpp PROPERTY
  44      COMPILE_OPTIONS ${AVX2_CXXFLAGS}
  45    )
  46  endif()
  47  
  48  if(HAVE_SSE41 AND HAVE_X86_SHANI)
  49    target_compile_definitions(limenka_crypto PRIVATE ENABLE_SSE41 ENABLE_X86_SHANI)
  50    target_sources(limenka_crypto PRIVATE sha256_x86_shani.cpp)
  51    set_property(SOURCE sha256_x86_shani.cpp PROPERTY
  52      COMPILE_OPTIONS ${SSE41_CXXFLAGS} ${X86_SHANI_CXXFLAGS}
  53    )
  54  endif()
  55  
  56  if(HAVE_ARM_SHANI)
  57    target_compile_definitions(limenka_crypto PRIVATE ENABLE_ARM_SHANI)
  58    target_sources(limenka_crypto PRIVATE sha256_arm_shani.cpp)
  59    set_property(SOURCE sha256_arm_shani.cpp PROPERTY
  60      COMPILE_OPTIONS ${ARM_SHANI_CXXFLAGS}
  61    )
  62  endif()
  63  
  64  if(ENABLE_POWER8)
  65    target_compile_definitions(limenka_crypto PRIVATE
  66      ENABLE_POWER8
  67      $<IF:$<STREQUAL:${CMAKE_CXX_BYTE_ORDER},BIG_ENDIAN>,WORDS_BIGENDIAN,>
  68    )
  69    target_sources(limenka_crypto PRIVATE sha256_power8.cpp)
  70    set_property(SOURCE sha256_power8.cpp PROPERTY
  71      COMPILE_OPTIONS ${POWER8_CXXFLAGS}
  72    )
  73  endif()
  74