CMakeLists.txt (2633B)
1 # Copyright (c) 2020 tevador <tevador@gmail.com> 2 # See LICENSE for licensing information 3 4 cmake_minimum_required(VERSION 2.8.8) 5 6 set(HASHX_VERSION 1) 7 set(HASHX_VERSION_MINOR 0) 8 set(HASHX_VERSION_PATCH 0) 9 set(HASHX_VERSION_STR "${HASHX_VERSION}.${HASHX_VERSION_MINOR}.${HASHX_VERSION_PATCH}") 10 11 project(hashx) 12 13 set(hashx_sources 14 src/blake2.c 15 src/compiler.c 16 src/compiler_a64.c 17 src/compiler_x86.c 18 src/context.c 19 src/hashx.c 20 src/program.c 21 src/program_exec.c 22 src/siphash.c 23 src/siphash_rng.c 24 src/virtual_memory.c) 25 26 if(NOT CMAKE_BUILD_TYPE) 27 set(CMAKE_BUILD_TYPE Release) 28 message(STATUS "Setting default build type: ${CMAKE_BUILD_TYPE}") 29 endif() 30 31 option(HASHX_BLOCK_MODE "Hash function for block mode" OFF) 32 33 if(HASHX_BLOCK_MODE) 34 add_definitions(-DHASHX_BLOCK_MODE) 35 endif() 36 37 set(HASHX_SIZE CACHE STRING "Hash function output size in bytes") 38 39 if(HASHX_SIZE) 40 if(HASHX_SIZE GREATER 32) 41 message(SEND_ERROR "The maximum hash size is 32 bytes") 42 else() 43 add_definitions(-DHASHX_SIZE=${HASHX_SIZE}) 44 endif() 45 endif() 46 47 set(HASHX_SALT CACHE STRING "Implementation-specific salt value") 48 49 if(HASHX_SALT) 50 string(LENGTH ${HASHX_SALT} HASHX_SALT_LENGTH) 51 if(HASHX_SALT_LENGTH GREATER 15) 52 message(SEND_ERROR "The maximum salt length is 15 characters") 53 else() 54 add_definitions(-DHASHX_SALT=${HASHX_SALT}) 55 endif() 56 endif() 57 58 include_directories(include/) 59 60 add_library(hashx SHARED ${hashx_sources}) 61 set_property(TARGET hashx PROPERTY POSITION_INDEPENDENT_CODE ON) 62 set_property(TARGET hashx PROPERTY PUBLIC_HEADER include/hashx.h) 63 target_compile_definitions(hashx PRIVATE HASHX_SHARED) 64 set_target_properties(hashx PROPERTIES VERSION ${HASHX_VERSION_STR} 65 SOVERSION ${HASHX_VERSION}) 66 67 add_library(hashx_static STATIC ${hashx_sources}) 68 set_property(TARGET hashx_static PROPERTY POSITION_INDEPENDENT_CODE ON) 69 set_target_properties(hashx_static PROPERTIES OUTPUT_NAME hashx) 70 71 include(GNUInstallDirs) 72 install(TARGETS hashx hashx_static 73 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} 74 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} 75 PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) 76 77 add_executable(hashx-tests 78 src/tests.c) 79 target_compile_definitions(hashx-tests PRIVATE HASHX_STATIC) 80 target_link_libraries(hashx-tests 81 PRIVATE hashx_static) 82 83 if(NOT Threads_FOUND AND UNIX AND NOT APPLE) 84 set(THREADS_PREFER_PTHREAD_FLAG ON) 85 find_package(Threads) 86 endif() 87 88 add_executable(hashx-bench 89 src/bench.c 90 src/hashx_thread.c 91 src/hashx_time.c) 92 target_compile_definitions(hashx-bench PRIVATE HASHX_STATIC) 93 target_link_libraries(hashx-bench 94 PRIVATE hashx_static 95 PRIVATE ${CMAKE_THREAD_LIBS_INIT})