|
| 1 | +# Copyright (C) 2021 Intel Corporation |
| 2 | +# SPDX-License-Identifier: Apache-2.0 |
| 3 | + |
| 4 | +cmake_minimum_required(VERSION 3.15.1) |
| 5 | + |
| 6 | +project(IPCL VERSION 1.1.3 LANGUAGES C CXX) |
| 7 | + |
| 8 | +include(CMakePackageConfigHelpers) |
| 9 | +include(CheckCCompilerFlag) |
| 10 | +include(CheckCXXCompilerFlag) |
| 11 | + |
| 12 | +if(CMAKE_BUILD_TYPE) |
| 13 | + set(RELEASE_TYPES |
| 14 | + Debug |
| 15 | + Release |
| 16 | + RelWithDebInfo |
| 17 | + MinSizeRel) |
| 18 | + list(FIND RELEASE_TYPES ${CMAKE_BUILD_TYPE} INDEX_FOUND) |
| 19 | + if(${INDEX_FOUND} EQUAL -1) |
| 20 | + message( |
| 21 | + FATAL_ERROR |
| 22 | + "CMAKE_BUILD_TYPE must be one of Debug, Release, RelWithDebInfo, or MinSizeRel" |
| 23 | + ) |
| 24 | + endif() |
| 25 | +else() |
| 26 | + set(CMAKE_BUILD_TYPE Release) |
| 27 | +endif() |
| 28 | + |
| 29 | +set(CMAKE_CXX_STANDARD 17) |
| 30 | +set(CMAKE_CXX_STANDARD_REQUIRED ON) |
| 31 | +set(CMAKE_CXX_EXTENSIONS OFF) |
| 32 | + |
| 33 | +set(CMAKE_EXPORT_COMPILE_COMMANDS ON) |
| 34 | + |
| 35 | +set(CMAKE_POSITION_INDEPENDENT_CODE ON) |
| 36 | +set(CMAKE_INSTALL_MESSAGE LAZY) |
| 37 | +set(CMAKE_INSTALL_RPATH "\$ORIGIN") |
| 38 | + |
| 39 | +set(CMAKE_C_FLAGS "-O2 -Wno-error=deprecated-declarations") |
| 40 | +set(CMAKE_CXX_FLAGS "-O2 -fpermissive -Wno-error=deprecated-declarations") |
| 41 | + |
| 42 | +if(NOT CMAKE_INSTALL_PREFIX) |
| 43 | + set(CMAKE_INSTALL_PREFIX ${CMAKE_CURRENT_BINARY_DIR}) |
| 44 | +endif() |
| 45 | + |
| 46 | +include(GNUInstallDirs) |
| 47 | + |
| 48 | +set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_INSTALL_LIBDIR}) |
| 49 | + |
| 50 | +#--------------------------------------------------- |
| 51 | +option(IPCL_TEST "Enable testing" ON) |
| 52 | +option(IPCL_BENCHMARK "Enable benchmark" ON) |
| 53 | +option(IPCL_ENABLE_OMP "Enable OpenMP testing/benchmarking" ON) |
| 54 | +option(IPCL_THREAD_COUNT "The max number of threads used by OpenMP(If the value is OFF/0, it is determined at runtime)" OFF) |
| 55 | +option(IPCL_DOCS "Enable document building" OFF) |
| 56 | +option(IPCL_SHARED "Build shared library" ON) |
| 57 | +option(IPCL_DEBUG_DISABLE_AVX512IFMA "(Debugging) Disable usage of AVX512IFMA instructions" OFF) |
| 58 | +if(IPCL_ENABLE_OMP) |
| 59 | + add_compile_definitions(IPCL_USE_OMP) |
| 60 | + if(IPCL_THREAD_COUNT) |
| 61 | + add_compile_definitions(IPCL_NUM_THREADS=${IPCL_THREAD_COUNT}) |
| 62 | + endif() |
| 63 | +endif() |
| 64 | + |
| 65 | +if(CMAKE_BUILD_TYPE STREQUAL "Debug") |
| 66 | + set(IPCL_DEBUG ON) |
| 67 | +else() |
| 68 | + set(IPCL_DEBUG OFF) |
| 69 | +endif() |
| 70 | + |
| 71 | +set(IPCL_CMAKE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake/ipcl") |
| 72 | + |
| 73 | +message(STATUS "CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}") |
| 74 | +message(STATUS "CMAKE_C_COMPILER: ${CMAKE_C_COMPILER}") |
| 75 | +message(STATUS "CMAKE_CXX_COMPILER: ${CMAKE_CXX_COMPILER}") |
| 76 | +message(STATUS "CMAKE_INSTALL_PREFIX: ${CMAKE_INSTALL_PREFIX}") |
| 77 | +message(STATUS "IPCL_TEST: ${IPCL_TEST}") |
| 78 | +message(STATUS "IPCL_BENCHMARK: ${IPCL_BENCHMARK}") |
| 79 | +message(STATUS "IPCL_ENABLE_OMP: ${IPCL_ENABLE_OMP}") |
| 80 | +if (IPCL_ENABLE_OMP) |
| 81 | + message(STATUS "IPCL_THREAD_COUNT: ${IPCL_THREAD_COUNT}") |
| 82 | +else() |
| 83 | + message(STATUS "IPCL_THREAD_COUNT: IGNORE") |
| 84 | +endif() |
| 85 | +message(STATUS "IPCL_DOCS: ${IPCL_DOCS}") |
| 86 | +message(STATUS "IPCL_SHARED: ${IPCL_SHARED}") |
| 87 | + |
| 88 | +set(IPCL_ROOT_DIR ${CMAKE_CURRENT_LIST_DIR}) |
| 89 | +set(IPCL_SRC_DIR ${IPCL_ROOT_DIR}/ipcl) |
| 90 | +set(IPCL_INC_DIR ${IPCL_SRC_DIR}/include) |
| 91 | + |
| 92 | +set(IPCL_FORWARD_CMAKE_ARGS |
| 93 | + -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} |
| 94 | + -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} |
| 95 | + -DCMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD} |
| 96 | + -DCMAKE_CXX_STANDARD_REQUIRED=${CMAKE_CXX_STANDARD_REQUIRED} |
| 97 | + -DCMAKE_CXX_EXTENSIONS=${CMAKE_CXX_EXTENSIONS} |
| 98 | + -DCMAKE_EXPORT_COMPILE_COMMANDS=${CMAKE_EXPORT_COMPILE_COMMANDS} |
| 99 | + -DCMAKE_POSITION_INDEPENDENT_CODE=${CMAKE_POSITION_INDEPENDENT_CODE} |
| 100 | + -DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS} |
| 101 | + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} |
| 102 | +) |
| 103 | + |
| 104 | +# check whether cpu support avx512 flag |
| 105 | +if(IPCL_DEBUG_DISABLE_AVX512IFMA) |
| 106 | + message(STATUS "Support AVX512IFMA: False") |
| 107 | +else() |
| 108 | + set(CPU_AVX512_FLAG "avx512ifma") |
| 109 | + execute_process(COMMAND lscpu COMMAND grep ${CPU_AVX512_FLAG} OUTPUT_VARIABLE CPU_ENABLE_AVX512) |
| 110 | + if("${CPU_ENABLE_AVX512}" STREQUAL "") |
| 111 | + message(STATUS "Support AVX512IFMA: False") |
| 112 | + else() |
| 113 | + message(STATUS "Support AVX512IFMA: True") |
| 114 | + add_compile_definitions(IPCL_CRYPTO_MB_MOD_EXP) |
| 115 | + endif() |
| 116 | +endif() |
| 117 | + |
| 118 | +# find package for OpenSSL and Threads |
| 119 | +set(OPENSSL_USE_STATIC_LIBS TRUE) |
| 120 | +find_package(Threads REQUIRED) |
| 121 | +find_package(OpenSSL REQUIRED) |
| 122 | + |
| 123 | +# External dependencies |
| 124 | +set(CMAKE_THREAD_PREFER_PTHREAD ON) |
| 125 | +set(THREADS_PREFER_PTHREAD_FLAG ON) |
| 126 | + |
| 127 | +set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/ipcl) |
| 128 | +include(ipcl-util) |
| 129 | + |
| 130 | +include(cmake/ippcrypto.cmake) |
| 131 | + |
| 132 | +if(IPCL_TEST) |
| 133 | + include(cmake/gtest.cmake) |
| 134 | +endif() |
| 135 | +if(IPCL_BENCHMARK) |
| 136 | + include(cmake/gbenchmark.cmake) |
| 137 | +endif() |
| 138 | + |
| 139 | +add_subdirectory(ipcl) |
| 140 | + |
| 141 | +# unit-test and benchmarks |
| 142 | +if(IPCL_TEST) |
| 143 | + add_subdirectory(test) |
| 144 | + add_custom_target(unittest COMMAND $<TARGET_FILE:unittest_ipcl> DEPENDS unittest_ipcl) |
| 145 | +endif() |
| 146 | +unset(IPCL_TEST CACHE) |
| 147 | + |
| 148 | +if(IPCL_BENCHMARK) |
| 149 | + add_subdirectory(benchmark) |
| 150 | + add_custom_target(benchmark COMMAND $<TARGET_FILE:bench_ipcl> DEPENDS bench_ipcl) |
| 151 | +endif() |
| 152 | + |
| 153 | +if(IPCL_DOCS) |
| 154 | + add_subdirectory(docs) |
| 155 | +endif() |
| 156 | + |
| 157 | +unset(IPCL_BENCHMARK CACHE) |
0 commit comments