tor

The Tor anonymity network
git clone https://git.dasho.dev/tor.git
Log | Files | Refs | README | LICENSE

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})