Marat Dukhan | 0493348 | 2017-10-17 18:30:34 -0700 | [diff] [blame] | 1 | CMAKE_MINIMUM_REQUIRED(VERSION 2.8.12 FATAL_ERROR) |
Marat Dukhan | b966e59 | 2017-10-17 14:47:06 -0700 | [diff] [blame] | 2 | |
| 3 | INCLUDE(GNUInstallDirs) |
| 4 | |
| 5 | # ---[ Project |
Marat Dukhan | 5856b58 | 2017-10-26 00:59:30 +0000 | [diff] [blame] | 6 | PROJECT(FP16 C CXX) |
Marat Dukhan | b966e59 | 2017-10-17 14:47:06 -0700 | [diff] [blame] | 7 | |
| 8 | # ---[ Options. |
| 9 | OPTION(FP16_BUILD_TESTS "Build FP16 unit tests" ON) |
| 10 | OPTION(FP16_BUILD_BENCHMARKS "Build FP16 micro-benchmarks" ON) |
| 11 | |
| 12 | # ---[ CMake options |
Marat Dukhan | b966e59 | 2017-10-17 14:47:06 -0700 | [diff] [blame] | 13 | IF(FP16_BUILD_TESTS) |
| 14 | ENABLE_TESTING() |
| 15 | ENDIF() |
| 16 | |
Marat Dukhan | 43d6d17 | 2018-02-25 00:30:28 +0100 | [diff] [blame] | 17 | MACRO(FP16_TARGET_ENABLE_CXX11 target) |
Marat Dukhan | fb64e16 | 2018-02-25 00:23:20 +0100 | [diff] [blame] | 18 | IF(${CMAKE_VERSION} VERSION_LESS "3.1") |
| 19 | IF(NOT MSVC) |
| 20 | TARGET_COMPILE_OPTIONS(${target} PRIVATE -std=c++11) |
| 21 | ENDIF() |
| 22 | ELSE() |
| 23 | SET_TARGET_PROPERTIES(${target} PROPERTIES |
| 24 | CXX_STANDARD 11 |
| 25 | CXX_STANDARD_REQUIRED YES |
Marat Dukhan | 4b37bd3 | 2018-07-08 14:22:44 -0700 | [diff] [blame] | 26 | CXX_EXTENSIONS YES) |
Marat Dukhan | fb64e16 | 2018-02-25 00:23:20 +0100 | [diff] [blame] | 27 | ENDIF() |
| 28 | ENDMACRO() |
| 29 | |
Marat Dukhan | 0493348 | 2017-10-17 18:30:34 -0700 | [diff] [blame] | 30 | # ---[ Download deps |
| 31 | SET(CONFU_DEPENDENCIES_SOURCE_DIR ${CMAKE_SOURCE_DIR}/deps |
| 32 | CACHE PATH "Confu-style dependencies source directory") |
| 33 | SET(CONFU_DEPENDENCIES_BINARY_DIR ${CMAKE_BINARY_DIR}/deps |
| 34 | CACHE PATH "Confu-style dependencies binary directory") |
| 35 | |
Marat Dukhan | af4eeb5 | 2018-01-31 17:56:56 -0800 | [diff] [blame] | 36 | IF(NOT DEFINED PSIMD_SOURCE_DIR) |
| 37 | MESSAGE(STATUS "Downloading PSimd to ${CONFU_DEPENDENCIES_SOURCE_DIR}/psimd (define PSIMD_SOURCE_DIR to avoid it)") |
Marat Dukhan | c485bd7 | 2018-02-24 16:41:19 +0100 | [diff] [blame] | 38 | CONFIGURE_FILE(cmake/DownloadPSimd.cmake "${CONFU_DEPENDENCIES_BINARY_DIR}/psimd-download/CMakeLists.txt") |
Marat Dukhan | 0493348 | 2017-10-17 18:30:34 -0700 | [diff] [blame] | 39 | EXECUTE_PROCESS(COMMAND "${CMAKE_COMMAND}" -G "${CMAKE_GENERATOR}" . |
Marat Dukhan | c485bd7 | 2018-02-24 16:41:19 +0100 | [diff] [blame] | 40 | WORKING_DIRECTORY "${CONFU_DEPENDENCIES_BINARY_DIR}/psimd-download") |
Marat Dukhan | 0493348 | 2017-10-17 18:30:34 -0700 | [diff] [blame] | 41 | EXECUTE_PROCESS(COMMAND "${CMAKE_COMMAND}" --build . |
Marat Dukhan | c485bd7 | 2018-02-24 16:41:19 +0100 | [diff] [blame] | 42 | WORKING_DIRECTORY "${CONFU_DEPENDENCIES_BINARY_DIR}/psimd-download") |
Marat Dukhan | af4eeb5 | 2018-01-31 17:56:56 -0800 | [diff] [blame] | 43 | SET(PSIMD_SOURCE_DIR "${CONFU_DEPENDENCIES_SOURCE_DIR}/psimd" CACHE STRING "PSimd source directory") |
Marat Dukhan | 0493348 | 2017-10-17 18:30:34 -0700 | [diff] [blame] | 44 | ENDIF() |
| 45 | |
Marat Dukhan | af4eeb5 | 2018-01-31 17:56:56 -0800 | [diff] [blame] | 46 | IF(FP16_BUILD_TESTS AND NOT DEFINED GOOGLETEST_SOURCE_DIR) |
| 47 | MESSAGE(STATUS "Downloading Google Test to ${CONFU_DEPENDENCIES_SOURCE_DIR}/googletest (define GOOGLETEST_SOURCE_DIR to avoid it)") |
Marat Dukhan | c485bd7 | 2018-02-24 16:41:19 +0100 | [diff] [blame] | 48 | CONFIGURE_FILE(cmake/DownloadGoogleTest.cmake "${CONFU_DEPENDENCIES_BINARY_DIR}/googletest-download/CMakeLists.txt") |
Marat Dukhan | 0493348 | 2017-10-17 18:30:34 -0700 | [diff] [blame] | 49 | EXECUTE_PROCESS(COMMAND "${CMAKE_COMMAND}" -G "${CMAKE_GENERATOR}" . |
Marat Dukhan | c485bd7 | 2018-02-24 16:41:19 +0100 | [diff] [blame] | 50 | WORKING_DIRECTORY "${CONFU_DEPENDENCIES_BINARY_DIR}/googletest-download") |
Marat Dukhan | 0493348 | 2017-10-17 18:30:34 -0700 | [diff] [blame] | 51 | EXECUTE_PROCESS(COMMAND "${CMAKE_COMMAND}" --build . |
Marat Dukhan | c485bd7 | 2018-02-24 16:41:19 +0100 | [diff] [blame] | 52 | WORKING_DIRECTORY "${CONFU_DEPENDENCIES_BINARY_DIR}/googletest-download") |
Marat Dukhan | af4eeb5 | 2018-01-31 17:56:56 -0800 | [diff] [blame] | 53 | SET(GOOGLETEST_SOURCE_DIR "${CONFU_DEPENDENCIES_SOURCE_DIR}/googletest" CACHE STRING "Google Test source directory") |
Marat Dukhan | 0493348 | 2017-10-17 18:30:34 -0700 | [diff] [blame] | 54 | ENDIF() |
| 55 | |
Marat Dukhan | af4eeb5 | 2018-01-31 17:56:56 -0800 | [diff] [blame] | 56 | IF(FP16_BUILD_BENCHMARKS AND NOT DEFINED GOOGLEBENCHMARK_SOURCE_DIR) |
| 57 | MESSAGE(STATUS "Downloading Google Benchmark to ${CONFU_DEPENDENCIES_SOURCE_DIR}/googlebenchmark (define GOOGLEBENCHMARK_SOURCE_DIR to avoid it)") |
Marat Dukhan | c485bd7 | 2018-02-24 16:41:19 +0100 | [diff] [blame] | 58 | CONFIGURE_FILE(cmake/DownloadGoogleBenchmark.cmake "${CONFU_DEPENDENCIES_BINARY_DIR}/googlebenchmark-download/CMakeLists.txt") |
Marat Dukhan | 0493348 | 2017-10-17 18:30:34 -0700 | [diff] [blame] | 59 | EXECUTE_PROCESS(COMMAND "${CMAKE_COMMAND}" -G "${CMAKE_GENERATOR}" . |
Marat Dukhan | c485bd7 | 2018-02-24 16:41:19 +0100 | [diff] [blame] | 60 | WORKING_DIRECTORY "${CONFU_DEPENDENCIES_BINARY_DIR}/googlebenchmark-download") |
Marat Dukhan | 0493348 | 2017-10-17 18:30:34 -0700 | [diff] [blame] | 61 | EXECUTE_PROCESS(COMMAND "${CMAKE_COMMAND}" --build . |
Marat Dukhan | c485bd7 | 2018-02-24 16:41:19 +0100 | [diff] [blame] | 62 | WORKING_DIRECTORY "${CONFU_DEPENDENCIES_BINARY_DIR}/googlebenchmark-download") |
Marat Dukhan | af4eeb5 | 2018-01-31 17:56:56 -0800 | [diff] [blame] | 63 | SET(GOOGLEBENCHMARK_SOURCE_DIR "${CONFU_DEPENDENCIES_SOURCE_DIR}/googlebenchmark" CACHE STRING "Google Benchmark source directory") |
Marat Dukhan | 0493348 | 2017-10-17 18:30:34 -0700 | [diff] [blame] | 64 | ENDIF() |
| 65 | |
Marat Dukhan | b966e59 | 2017-10-17 14:47:06 -0700 | [diff] [blame] | 66 | # ---[ FP16 library |
Marat Dukhan | 5856b58 | 2017-10-26 00:59:30 +0000 | [diff] [blame] | 67 | IF(${CMAKE_VERSION} VERSION_LESS "3.0") |
| 68 | ADD_LIBRARY(fp16 STATIC |
| 69 | include/fp16.h |
| 70 | include/fp16/fp16.h |
| 71 | include/fp16/bitcasts.h |
| 72 | include/fp16/psimd.h) |
| 73 | SET_TARGET_PROPERTIES(fp16 PROPERTIES LINKER_LANGUAGE C) |
| 74 | ELSE() |
| 75 | ADD_LIBRARY(fp16 INTERFACE) |
| 76 | ENDIF() |
Yangqing Jia | febbb1c | 2018-11-28 10:36:19 -0800 | [diff] [blame] | 77 | TARGET_INCLUDE_DIRECTORIES(fp16 INTERFACE |
| 78 | $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> |
| 79 | $<INSTALL_INTERFACE:include>) |
Marat Dukhan | b966e59 | 2017-10-17 14:47:06 -0700 | [diff] [blame] | 80 | |
| 81 | INSTALL(FILES include/fp16.h |
Yangqing Jia | febbb1c | 2018-11-28 10:36:19 -0800 | [diff] [blame] | 82 | DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) |
| 83 | INSTALL(FILES |
Marat Dukhan | b966e59 | 2017-10-17 14:47:06 -0700 | [diff] [blame] | 84 | include/fp16/bitcasts.h |
| 85 | include/fp16/fp16.h |
| 86 | include/fp16/psimd.h |
| 87 | include/fp16/__init__.py |
| 88 | include/fp16/avx.py |
| 89 | include/fp16/avx2.py |
Yangqing Jia | febbb1c | 2018-11-28 10:36:19 -0800 | [diff] [blame] | 90 | DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/fp16) |
Marat Dukhan | b966e59 | 2017-10-17 14:47:06 -0700 | [diff] [blame] | 91 | |
Marat Dukhan | 0493348 | 2017-10-17 18:30:34 -0700 | [diff] [blame] | 92 | # ---[ Configure psimd |
| 93 | IF(NOT TARGET psimd) |
| 94 | ADD_SUBDIRECTORY( |
Marat Dukhan | af4eeb5 | 2018-01-31 17:56:56 -0800 | [diff] [blame] | 95 | "${PSIMD_SOURCE_DIR}" |
Marat Dukhan | 0493348 | 2017-10-17 18:30:34 -0700 | [diff] [blame] | 96 | "${CONFU_DEPENDENCIES_BINARY_DIR}/psimd") |
Marat Dukhan | b966e59 | 2017-10-17 14:47:06 -0700 | [diff] [blame] | 97 | ENDIF() |
| 98 | |
| 99 | IF(FP16_BUILD_TESTS) |
Marat Dukhan | 0493348 | 2017-10-17 18:30:34 -0700 | [diff] [blame] | 100 | # ---[ Build google test |
| 101 | IF(NOT TARGET gtest) |
| 102 | SET(gtest_force_shared_crt ON CACHE BOOL "" FORCE) |
| 103 | ADD_SUBDIRECTORY( |
Marat Dukhan | af4eeb5 | 2018-01-31 17:56:56 -0800 | [diff] [blame] | 104 | "${GOOGLETEST_SOURCE_DIR}" |
Marat Dukhan | 0493348 | 2017-10-17 18:30:34 -0700 | [diff] [blame] | 105 | "${CONFU_DEPENDENCIES_BINARY_DIR}/googletest") |
| 106 | ENDIF() |
Marat Dukhan | b966e59 | 2017-10-17 14:47:06 -0700 | [diff] [blame] | 107 | |
Marat Dukhan | 0493348 | 2017-10-17 18:30:34 -0700 | [diff] [blame] | 108 | # ---[ Build FP16 unit tests |
Marat Dukhan | b966e59 | 2017-10-17 14:47:06 -0700 | [diff] [blame] | 109 | ADD_EXECUTABLE(ieee-to-fp32-bits-test test/ieee-to-fp32-bits.cc test/tables.cc) |
Marat Dukhan | 0493348 | 2017-10-17 18:30:34 -0700 | [diff] [blame] | 110 | TARGET_INCLUDE_DIRECTORIES(ieee-to-fp32-bits-test PRIVATE test) |
| 111 | TARGET_LINK_LIBRARIES(ieee-to-fp32-bits-test fp16 gtest gtest_main) |
Marat Dukhan | b966e59 | 2017-10-17 14:47:06 -0700 | [diff] [blame] | 112 | ADD_TEST(ieee-to-fp32-bits ieee-to-fp32-bits-test) |
| 113 | |
| 114 | ADD_EXECUTABLE(ieee-to-fp32-value-test test/ieee-to-fp32-value.cc test/tables.cc) |
Marat Dukhan | 0493348 | 2017-10-17 18:30:34 -0700 | [diff] [blame] | 115 | TARGET_INCLUDE_DIRECTORIES(ieee-to-fp32-value-test PRIVATE test) |
| 116 | TARGET_LINK_LIBRARIES(ieee-to-fp32-value-test fp16 gtest gtest_main) |
Marat Dukhan | b966e59 | 2017-10-17 14:47:06 -0700 | [diff] [blame] | 117 | ADD_TEST(ieee-to-fp32-value ieee-to-fp32-value-test) |
| 118 | |
| 119 | ADD_EXECUTABLE(ieee-from-fp32-value-test test/ieee-from-fp32-value.cc test/tables.cc) |
Marat Dukhan | 0493348 | 2017-10-17 18:30:34 -0700 | [diff] [blame] | 120 | TARGET_INCLUDE_DIRECTORIES(ieee-from-fp32-value-test PRIVATE test) |
| 121 | TARGET_LINK_LIBRARIES(ieee-from-fp32-value-test fp16 gtest gtest_main) |
Marat Dukhan | b966e59 | 2017-10-17 14:47:06 -0700 | [diff] [blame] | 122 | ADD_TEST(ieee-from-fp32-value ieee-from-fp32-value-test) |
| 123 | |
| 124 | ADD_EXECUTABLE(alt-to-fp32-bits-test test/alt-to-fp32-bits.cc test/tables.cc) |
Marat Dukhan | 0493348 | 2017-10-17 18:30:34 -0700 | [diff] [blame] | 125 | TARGET_INCLUDE_DIRECTORIES(alt-to-fp32-bits-test PRIVATE test) |
| 126 | TARGET_LINK_LIBRARIES(alt-to-fp32-bits-test fp16 gtest gtest_main) |
Marat Dukhan | b966e59 | 2017-10-17 14:47:06 -0700 | [diff] [blame] | 127 | ADD_TEST(alt-to-fp32-bits alt-to-fp32-bits-test) |
| 128 | |
| 129 | ADD_EXECUTABLE(alt-to-fp32-value-test test/alt-to-fp32-value.cc test/tables.cc) |
Marat Dukhan | 0493348 | 2017-10-17 18:30:34 -0700 | [diff] [blame] | 130 | TARGET_INCLUDE_DIRECTORIES(alt-to-fp32-value-test PRIVATE test) |
| 131 | TARGET_LINK_LIBRARIES(alt-to-fp32-value-test fp16 gtest gtest_main) |
Marat Dukhan | b966e59 | 2017-10-17 14:47:06 -0700 | [diff] [blame] | 132 | ADD_TEST(alt-to-fp32-value alt-to-fp32-value-test) |
| 133 | |
| 134 | ADD_EXECUTABLE(alt-from-fp32-value-test test/alt-from-fp32-value.cc test/tables.cc) |
Marat Dukhan | 0493348 | 2017-10-17 18:30:34 -0700 | [diff] [blame] | 135 | TARGET_INCLUDE_DIRECTORIES(alt-from-fp32-value-test PRIVATE test) |
| 136 | TARGET_LINK_LIBRARIES(alt-from-fp32-value-test fp16 gtest gtest_main) |
Marat Dukhan | b966e59 | 2017-10-17 14:47:06 -0700 | [diff] [blame] | 137 | ADD_TEST(alt-from-fp32-value alt-from-fp32-value-test) |
| 138 | |
| 139 | ADD_EXECUTABLE(bitcasts-test test/bitcasts.cc) |
Marat Dukhan | 0493348 | 2017-10-17 18:30:34 -0700 | [diff] [blame] | 140 | TARGET_LINK_LIBRARIES(bitcasts-test fp16 gtest gtest_main) |
Marat Dukhan | b966e59 | 2017-10-17 14:47:06 -0700 | [diff] [blame] | 141 | ADD_TEST(bitcasts bitcasts-test) |
| 142 | ENDIF() |
| 143 | |
| 144 | IF(FP16_BUILD_BENCHMARKS) |
Marat Dukhan | 0493348 | 2017-10-17 18:30:34 -0700 | [diff] [blame] | 145 | # ---[ Build google benchmark |
| 146 | IF(NOT TARGET benchmark) |
Marat Dukhan | 816fae6 | 2017-11-10 15:48:06 -0800 | [diff] [blame] | 147 | SET(BENCHMARK_ENABLE_TESTING OFF CACHE BOOL "") |
Marat Dukhan | 0493348 | 2017-10-17 18:30:34 -0700 | [diff] [blame] | 148 | ADD_SUBDIRECTORY( |
Marat Dukhan | af4eeb5 | 2018-01-31 17:56:56 -0800 | [diff] [blame] | 149 | "${GOOGLEBENCHMARK_SOURCE_DIR}" |
Marat Dukhan | 0493348 | 2017-10-17 18:30:34 -0700 | [diff] [blame] | 150 | "${CONFU_DEPENDENCIES_BINARY_DIR}/googlebenchmark") |
| 151 | ENDIF() |
Marat Dukhan | b966e59 | 2017-10-17 14:47:06 -0700 | [diff] [blame] | 152 | |
Marat Dukhan | 0493348 | 2017-10-17 18:30:34 -0700 | [diff] [blame] | 153 | # ---[ Build FP16 benchmarks |
Marat Dukhan | b966e59 | 2017-10-17 14:47:06 -0700 | [diff] [blame] | 154 | ADD_EXECUTABLE(ieee-element-bench bench/ieee-element.cc) |
Marat Dukhan | fb64e16 | 2018-02-25 00:23:20 +0100 | [diff] [blame] | 155 | TARGET_COMPILE_DEFINITIONS(ieee-element-bench PRIVATE FP16_COMPARATIVE_BENCHMARKS=1) |
| 156 | TARGET_INCLUDE_DIRECTORIES(ieee-element-bench PRIVATE ${PROJECT_SOURCE_DIR}) |
Marat Dukhan | 0493348 | 2017-10-17 18:30:34 -0700 | [diff] [blame] | 157 | TARGET_LINK_LIBRARIES(ieee-element-bench fp16 psimd benchmark) |
Marat Dukhan | b966e59 | 2017-10-17 14:47:06 -0700 | [diff] [blame] | 158 | |
| 159 | ADD_EXECUTABLE(alt-element-bench bench/alt-element.cc) |
Marat Dukhan | 0493348 | 2017-10-17 18:30:34 -0700 | [diff] [blame] | 160 | TARGET_LINK_LIBRARIES(alt-element-bench fp16 psimd benchmark) |
Marat Dukhan | b966e59 | 2017-10-17 14:47:06 -0700 | [diff] [blame] | 161 | |
| 162 | ADD_EXECUTABLE(from-ieee-array-bench bench/from-ieee-array.cc) |
Marat Dukhan | 43d6d17 | 2018-02-25 00:30:28 +0100 | [diff] [blame] | 163 | FP16_TARGET_ENABLE_CXX11(from-ieee-array-bench) |
Marat Dukhan | fb64e16 | 2018-02-25 00:23:20 +0100 | [diff] [blame] | 164 | TARGET_COMPILE_DEFINITIONS(from-ieee-array-bench PRIVATE FP16_COMPARATIVE_BENCHMARKS=1) |
Marat Dukhan | 0493348 | 2017-10-17 18:30:34 -0700 | [diff] [blame] | 165 | TARGET_INCLUDE_DIRECTORIES(from-ieee-array-bench PRIVATE ${PROJECT_SOURCE_DIR}) |
| 166 | TARGET_LINK_LIBRARIES(from-ieee-array-bench fp16 psimd benchmark) |
Marat Dukhan | b966e59 | 2017-10-17 14:47:06 -0700 | [diff] [blame] | 167 | |
| 168 | ADD_EXECUTABLE(from-alt-array-bench bench/from-alt-array.cc) |
Marat Dukhan | 43d6d17 | 2018-02-25 00:30:28 +0100 | [diff] [blame] | 169 | FP16_TARGET_ENABLE_CXX11(from-alt-array-bench) |
Marat Dukhan | 0493348 | 2017-10-17 18:30:34 -0700 | [diff] [blame] | 170 | TARGET_LINK_LIBRARIES(from-alt-array-bench fp16 psimd benchmark) |
Marat Dukhan | b966e59 | 2017-10-17 14:47:06 -0700 | [diff] [blame] | 171 | |
| 172 | ADD_EXECUTABLE(to-ieee-array-bench bench/to-ieee-array.cc) |
Marat Dukhan | 43d6d17 | 2018-02-25 00:30:28 +0100 | [diff] [blame] | 173 | FP16_TARGET_ENABLE_CXX11(to-ieee-array-bench) |
Marat Dukhan | fb64e16 | 2018-02-25 00:23:20 +0100 | [diff] [blame] | 174 | TARGET_COMPILE_DEFINITIONS(to-ieee-array-bench PRIVATE FP16_COMPARATIVE_BENCHMARKS=1) |
Marat Dukhan | 0493348 | 2017-10-17 18:30:34 -0700 | [diff] [blame] | 175 | TARGET_INCLUDE_DIRECTORIES(to-ieee-array-bench PRIVATE ${PROJECT_SOURCE_DIR}) |
| 176 | TARGET_LINK_LIBRARIES(to-ieee-array-bench fp16 psimd benchmark) |
Marat Dukhan | b966e59 | 2017-10-17 14:47:06 -0700 | [diff] [blame] | 177 | |
| 178 | ADD_EXECUTABLE(to-alt-array-bench bench/to-alt-array.cc) |
Marat Dukhan | 43d6d17 | 2018-02-25 00:30:28 +0100 | [diff] [blame] | 179 | FP16_TARGET_ENABLE_CXX11(to-alt-array-bench) |
Marat Dukhan | 0493348 | 2017-10-17 18:30:34 -0700 | [diff] [blame] | 180 | TARGET_LINK_LIBRARIES(to-alt-array-bench fp16 psimd benchmark) |
Marat Dukhan | b966e59 | 2017-10-17 14:47:06 -0700 | [diff] [blame] | 181 | ENDIF() |