############################################################################ # CMakeLists.txt # # Released under the MIT License. See LICENSE.txt for license information. # ############################################################################ if(MSVC) add_definitions(-D_CRT_SECURE_NO_WARNINGS) endif() set(DECAF_HEADER_FILES include/constant_time.h include/field.h include/keccak_internal.h include/portable_endian.h include/word.h ) set(DECAF_SOURCE_FILES_C utils.c shake.c sha512.c spongerng.c ) # default target arch is arch_32 which shall be generic enough to compile mostly on anything # target arch dirs: # global one to get the include/arch_intrinsics.h # availables: arch_32, arch_arm_32, arch_neon, arch_ref64, arch_x86_64 set(TARGET_ARCH_DIR arch_32) # specific to p25519, to get f_impl.c/h in p25519 #availables: arch_32, arch_ref64, arch_x86_64 set(TARGET_ARCH_DIR_P25519 arch_32) # specific to p448, to get f_impl.c/h in p448 # availables: arch_32, arch_arm_32, arch_neon, arch_ref64, arch_x86_64 set(TARGET_ARCH_DIR_P448 arch_32) if(MSVC)# On MSVC Windows, Processor is always AMD64 on both platforms (x86/x64) set(MSVC_ARCH ${CMAKE_CXX_COMPILER_ARCHITECTURE_ID})# ${MSVC_ARCH} MATCHES "X64" else() set(MSVC_ARCH ${CMAKE_SYSTEM_PROCESSOR})# just to have a value endif() if(${CMAKE_SYSTEM_PROCESSOR} MATCHES "x86_64" AND NOT MSVC)#Decaf doesn't support 64bits on MSVC yet message("Target architecture is x86_64") set(TARGET_ARCH_DIR arch_x86_64) set(TARGET_ARCH_DIR_P25519 arch_x86_64) set(TARGET_ARCH_DIR_P448 arch_x86_64) elseif(${CMAKE_SYSTEM_PROCESSOR} MATCHES "arch64") # shall be arm64 bits, stick to ref64. message("Target architecture is 64 bits general purpose(arm64 shall use this)") set(TARGET_ARCH_DIR arch_ref64) set(TARGET_ARCH_DIR_P25519 arch_ref64) set(TARGET_ARCH_DIR_P448 arch_ref64) elseif(${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm") # is an arm 32 bits if (NOT ${CMAKE_ANDROID_ARCH_ABI} STREQUAL "armeabi") # arm <= 5.0 does not support instructions from the lib, keep arch_32 if(${ANDROID_ARM_NEON}) message("Target architecture is arm32 NEON") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfpu=neon") # build with neon flag set(TARGET_ARCH_DIR arch_neon) set(TARGET_ARCH_DIR_P25519 arch_32) # nothing specific for neon on p25519 set(TARGET_ARCH_DIR_P448 arch_neon) else(${ANDROID_ARM_NEON}) message("Target architecture is arm32 no NEON") set(TARGET_ARCH_DIR arch_arm_32) set(TARGET_ARCH_DIR_P25519 arch_32) # nothing specific for arch_arm on p25519 set(TARGET_ARCH_DIR_P448 arch_arm_32) endif(${ANDROID_ARM_NEON}) endif (NOT ${CMAKE_ANDROID_ARCH_ABI} STREQUAL "armeabi") else() # nothing picked yet, stick to the message("Target architecture is general purpose 32bits") endif() include_directories( ${PROJECT_SOURCE_DIR}/src/include/${TARGET_ARCH_DIR} ) set(DECAF_SOURCE_FILES_CXX ) add_subdirectory(curve25519) add_subdirectory(ed448goldilocks) add_subdirectory(p25519) add_subdirectory(p448) add_subdirectory(generator) if(ENABLE_STATIC) add_library(decaf-static STATIC ${DECAF_HEADER_FILES} ${DECAF_SOURCE_FILES_C} ${DECAF_SOURCE_FILES_CXX} $ $ $ $) add_dependencies(decaf-static generatedCode) set_target_properties(decaf-static PROPERTIES OUTPUT_NAME decaf) target_include_directories(decaf-static INTERFACE $) target_link_libraries(decaf-static INTERFACE) endif() if(ENABLE_SHARED) add_library(decaf SHARED ${DECAF_HEADER_FILES} ${DECAF_SOURCE_FILES_C} ${DECAF_SOURCE_FILES_CXX} $ $ $ $) add_dependencies(decaf generatedCode) set_target_properties(decaf PROPERTIES VERSION ${DECAF_SO_VERSION}) target_include_directories(decaf INTERFACE $) target_link_libraries(decaf PRIVATE) if(MSVC) if(CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo") install(FILES $ DESTINATION ${CMAKE_INSTALL_BINDIR} PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE ) endif() endif() endif() if(ENABLE_STATIC) install(TARGETS decaf-static EXPORT ${EXPORT_TARGETS_NAME}Targets RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE ) endif() if(ENABLE_SHARED) install(TARGETS decaf EXPORT ${EXPORT_TARGETS_NAME}Targets RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE ) endif() install(DIRECTORY ${GSOURCE_PATH}/include/ DESTINATION include/decaf FILES_MATCHING PATTERN "*.h*" PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ )