-
Notifications
You must be signed in to change notification settings - Fork 85
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Marat Dukhan
committed
Oct 17, 2017
1 parent
251d93e
commit b966e59
Showing
4 changed files
with
208 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,116 @@ | ||
CMAKE_MINIMUM_REQUIRED(VERSION 3.0 FATAL_ERROR) | ||
|
||
INCLUDE(GNUInstallDirs) | ||
|
||
# ---[ Project | ||
PROJECT(FP16 LANGUAGES C CXX) | ||
|
||
# ---[ Options. | ||
OPTION(FP16_BUILD_TESTS "Build FP16 unit tests" ON) | ||
OPTION(FP16_BUILD_BENCHMARKS "Build FP16 micro-benchmarks" ON) | ||
|
||
# ---[ CMake options | ||
LIST(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake) | ||
IF(FP16_BUILD_TESTS) | ||
ENABLE_TESTING() | ||
ENDIF() | ||
|
||
# ---[ Build flags | ||
IF(NOT MSVC) | ||
SET(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -std=c99") | ||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") | ||
ENDIF() | ||
|
||
# ---[ FP16 library | ||
ADD_LIBRARY(fp16 INTERFACE) | ||
TARGET_INCLUDE_DIRECTORIES(fp16 INTERFACE include) | ||
|
||
INSTALL(FILES include/fp16.h | ||
include/fp16/bitcasts.h | ||
include/fp16/fp16.h | ||
include/fp16/psimd.h | ||
include/fp16/__init__.py | ||
include/fp16/avx.py | ||
include/fp16/avx2.py | ||
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) | ||
|
||
IF(FP16_BUILD_TESTS OR FP16_BUILD_BENCHMARKS) | ||
FIND_PACKAGE(PSIMD REQUIRED) | ||
ENDIF() | ||
|
||
IF(FP16_BUILD_TESTS) | ||
FIND_PACKAGE(GTest REQUIRED) | ||
|
||
ADD_EXECUTABLE(ieee-to-fp32-bits-test test/ieee-to-fp32-bits.cc test/tables.cc) | ||
TARGET_INCLUDE_DIRECTORIES(ieee-to-fp32-bits-test PRIVATE test ${GTEST_INCLUDE_DIRS}) | ||
TARGET_LINK_LIBRARIES(ieee-to-fp32-bits-test fp16 ${GTEST_BOTH_LIBRARIES}) | ||
ADD_TEST(ieee-to-fp32-bits ieee-to-fp32-bits-test) | ||
|
||
ADD_EXECUTABLE(ieee-to-fp32-value-test test/ieee-to-fp32-value.cc test/tables.cc) | ||
TARGET_INCLUDE_DIRECTORIES(ieee-to-fp32-value-test PRIVATE test ${GTEST_INCLUDE_DIRS}) | ||
TARGET_LINK_LIBRARIES(ieee-to-fp32-value-test fp16 ${GTEST_BOTH_LIBRARIES}) | ||
ADD_TEST(ieee-to-fp32-value ieee-to-fp32-value-test) | ||
|
||
ADD_EXECUTABLE(ieee-from-fp32-value-test test/ieee-from-fp32-value.cc test/tables.cc) | ||
TARGET_INCLUDE_DIRECTORIES(ieee-from-fp32-value-test PRIVATE test ${GTEST_INCLUDE_DIRS}) | ||
TARGET_LINK_LIBRARIES(ieee-from-fp32-value-test fp16 ${GTEST_BOTH_LIBRARIES}) | ||
ADD_TEST(ieee-from-fp32-value ieee-from-fp32-value-test) | ||
|
||
ADD_EXECUTABLE(alt-to-fp32-bits-test test/alt-to-fp32-bits.cc test/tables.cc) | ||
TARGET_INCLUDE_DIRECTORIES(alt-to-fp32-bits-test PRIVATE test ${GTEST_INCLUDE_DIRS}) | ||
TARGET_LINK_LIBRARIES(alt-to-fp32-bits-test fp16 ${GTEST_BOTH_LIBRARIES}) | ||
ADD_TEST(alt-to-fp32-bits alt-to-fp32-bits-test) | ||
|
||
ADD_EXECUTABLE(alt-to-fp32-value-test test/alt-to-fp32-value.cc test/tables.cc) | ||
TARGET_INCLUDE_DIRECTORIES(alt-to-fp32-value-test PRIVATE test ${GTEST_INCLUDE_DIRS}) | ||
TARGET_LINK_LIBRARIES(alt-to-fp32-value-test fp16 ${GTEST_BOTH_LIBRARIES}) | ||
ADD_TEST(alt-to-fp32-value alt-to-fp32-value-test) | ||
|
||
ADD_EXECUTABLE(alt-from-fp32-value-test test/alt-from-fp32-value.cc test/tables.cc) | ||
TARGET_INCLUDE_DIRECTORIES(alt-from-fp32-value-test PRIVATE test ${GTEST_INCLUDE_DIRS}) | ||
TARGET_LINK_LIBRARIES(alt-from-fp32-value-test fp16 ${GTEST_BOTH_LIBRARIES}) | ||
ADD_TEST(alt-from-fp32-value alt-from-fp32-value-test) | ||
|
||
ADD_EXECUTABLE(bitcasts-test test/bitcasts.cc) | ||
TARGET_INCLUDE_DIRECTORIES(bitcasts-test PRIVATE ${GTEST_INCLUDE_DIRS}) | ||
TARGET_LINK_LIBRARIES(bitcasts-test fp16 ${GTEST_BOTH_LIBRARIES}) | ||
ADD_TEST(bitcasts bitcasts-test) | ||
ENDIF() | ||
|
||
IF(FP16_BUILD_BENCHMARKS) | ||
FIND_PACKAGE(GBenchmark REQUIRED) | ||
|
||
ADD_EXECUTABLE(ieee-element-bench bench/ieee-element.cc) | ||
ADD_DEPENDENCIES(ieee-element-bench ${PSIMD_DEPENDENCY}) | ||
TARGET_INCLUDE_DIRECTORIES(ieee-element-bench PRIVATE ${PSIMD_INCLUDE_DIRS} ${GBENCHMARK_INCLUDE_DIRS}) | ||
TARGET_LINK_LIBRARIES(ieee-element-bench fp16 ${GBENCHMARK_LIBRARIES}) | ||
|
||
ADD_EXECUTABLE(alt-element-bench bench/alt-element.cc) | ||
ADD_DEPENDENCIES(alt-element-bench ${PSIMD_DEPENDENCY}) | ||
TARGET_INCLUDE_DIRECTORIES(alt-element-bench PRIVATE ${PSIMD_INCLUDE_DIRS} ${GBENCHMARK_INCLUDE_DIRS}) | ||
TARGET_LINK_LIBRARIES(alt-element-bench fp16 ${GBENCHMARK_LIBRARIES}) | ||
|
||
ADD_EXECUTABLE(from-ieee-array-bench bench/from-ieee-array.cc) | ||
ADD_DEPENDENCIES(from-ieee-array-bench ${PSIMD_DEPENDENCY}) | ||
TARGET_COMPILE_DEFINITIONS(from-ieee-array-bench PRIVATE "-DFP16_COMPARATIVE_BENCHMARKS=1") | ||
TARGET_INCLUDE_DIRECTORIES(from-ieee-array-bench PRIVATE ${PROJECT_SOURCE_DIR} ${PSIMD_INCLUDE_DIRS} ${GBENCHMARK_INCLUDE_DIRS}) | ||
TARGET_LINK_LIBRARIES(from-ieee-array-bench fp16 ${GBENCHMARK_LIBRARIES}) | ||
|
||
ADD_EXECUTABLE(from-alt-array-bench bench/from-alt-array.cc) | ||
ADD_DEPENDENCIES(from-alt-array-bench ${PSIMD_DEPENDENCY}) | ||
TARGET_COMPILE_DEFINITIONS(from-alt-array-bench PRIVATE "-DFP16_COMPARATIVE_BENCHMARKS=1") | ||
TARGET_INCLUDE_DIRECTORIES(from-alt-array-bench PRIVATE ${PROJECT_SOURCE_DIR} ${PSIMD_INCLUDE_DIRS} ${GBENCHMARK_INCLUDE_DIRS}) | ||
TARGET_LINK_LIBRARIES(from-alt-array-bench fp16 ${GBENCHMARK_LIBRARIES}) | ||
|
||
ADD_EXECUTABLE(to-ieee-array-bench bench/to-ieee-array.cc) | ||
ADD_DEPENDENCIES(to-ieee-array-bench ${PSIMD_DEPENDENCY}) | ||
TARGET_COMPILE_DEFINITIONS(to-ieee-array-bench PRIVATE "-DFP16_COMPARATIVE_BENCHMARKS=1") | ||
TARGET_INCLUDE_DIRECTORIES(to-ieee-array-bench PRIVATE ${PROJECT_SOURCE_DIR} ${PSIMD_INCLUDE_DIRS} ${GBENCHMARK_INCLUDE_DIRS}) | ||
TARGET_LINK_LIBRARIES(to-ieee-array-bench fp16 ${GBENCHMARK_LIBRARIES}) | ||
|
||
ADD_EXECUTABLE(to-alt-array-bench bench/to-alt-array.cc) | ||
ADD_DEPENDENCIES(to-alt-array-bench ${PSIMD_DEPENDENCY}) | ||
TARGET_COMPILE_DEFINITIONS(to-alt-array-bench PRIVATE "-DFP16_COMPARATIVE_BENCHMARKS=1") | ||
TARGET_INCLUDE_DIRECTORIES(to-alt-array-bench PRIVATE ${PROJECT_SOURCE_DIR} ${PSIMD_INCLUDE_DIRS} ${GBENCHMARK_INCLUDE_DIRS}) | ||
TARGET_LINK_LIBRARIES(to-alt-array-bench fp16 ${GBENCHMARK_LIBRARIES}) | ||
ENDIF() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
CMAKE_MINIMUM_REQUIRED(VERSION 3.2 FATAL_ERROR) | ||
|
||
FUNCTION(BUILD_GBENCHMARK) | ||
INCLUDE(ExternalProject) | ||
SET(BENCHMARK_ENABLE_TESTING OFF CACHE BOOL "") | ||
ExternalProject_Add(google_benchmark | ||
URL https://github.com/google/benchmark/archive/v1.2.0.zip | ||
URL_HASH SHA256=cc463b28cb3701a35c0855fbcefb75b29068443f1952b64dd5f4f669272e95ea | ||
INSTALL_COMMAND "" | ||
BUILD_BYPRODUCTS <BINARY_DIR>/src/libbenchmark.a | ||
) | ||
|
||
ExternalProject_Get_Property(google_benchmark install_dir) | ||
|
||
ADD_LIBRARY(gbenchmark STATIC IMPORTED) | ||
ADD_DEPENDENCIES(gbenchmark google_benchmark) | ||
|
||
ExternalProject_Get_Property(google_benchmark source_dir) | ||
SET(GBENCHMARK_INCLUDE_DIRS ${source_dir}/include PARENT_SCOPE) | ||
|
||
ExternalProject_Get_Property(google_benchmark binary_dir) | ||
SET_TARGET_PROPERTIES(gbenchmark PROPERTIES IMPORTED_LOCATION ${binary_dir}/src/libbenchmark.a) | ||
|
||
SET(GBENCHMARK_FOUND TRUE PARENT_SCOPE) | ||
SET(GBENCHMARK_LIBRARIES gbenchmark PARENT_SCOPE) | ||
|
||
MARK_AS_ADVANCED(FORCE GBENCHMARK_FOUND) | ||
MARK_AS_ADVANCED(FORCE GBENCHMARK_INCLUDE_DIRS) | ||
MARK_AS_ADVANCED(FORCE GBENCHMARK_LIBRARIES) | ||
ENDFUNCTION(BUILD_GBENCHMARK) | ||
|
||
BUILD_GBENCHMARK() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
CMAKE_MINIMUM_REQUIRED(VERSION 3.2 FATAL_ERROR) | ||
|
||
FUNCTION(BUILD_GTEST) | ||
INCLUDE(ExternalProject) | ||
SET(BUILD_GTEST ON CACHE BOOL "" FORCE) | ||
SET(BUILD_GMOCK OFF CACHE BOOL "" FORCE) | ||
ExternalProject_Add(googletest | ||
URL https://github.com/google/googletest/archive/release-1.8.0.zip | ||
URL_HASH SHA256=f3ed3b58511efd272eb074a3a6d6fb79d7c2e6a0e374323d1e6bcbcc1ef141bf | ||
INSTALL_COMMAND "" | ||
BUILD_BYPRODUCTS <BINARY_DIR>/googlemock/gtest/libgtest.a <BINARY_DIR>/googlemock/gtest/libgtest_main.a | ||
) | ||
|
||
ADD_LIBRARY(gtest UNKNOWN IMPORTED) | ||
ADD_LIBRARY(gtest_main UNKNOWN IMPORTED) | ||
ADD_DEPENDENCIES(gtest googletest) | ||
ADD_DEPENDENCIES(gtest_main googletest) | ||
|
||
ExternalProject_Get_Property(googletest source_dir) | ||
SET(GTEST_INCLUDE_DIRS ${source_dir}/googletest/include PARENT_SCOPE) | ||
|
||
ExternalProject_Get_Property(googletest binary_dir) | ||
SET_TARGET_PROPERTIES(gtest PROPERTIES IMPORTED_LOCATION ${binary_dir}/googlemock/gtest/libgtest.a) | ||
SET_TARGET_PROPERTIES(gtest_main PROPERTIES IMPORTED_LOCATION ${binary_dir}/googlemock/gtest/libgtest_main.a) | ||
|
||
SET(GTEST_FOUND TRUE PARENT_SCOPE) | ||
SET(GTEST_BOTH_LIBRARIES gtest gtest_main PARENT_SCOPE) | ||
SET(GTEST_LIBRARIES gtest PARENT_SCOPE) | ||
SET(GTEST_MAIN_LIBRARIES gtest_main PARENT_SCOPE) | ||
|
||
MARK_AS_ADVANCED(FORCE GTEST_FOUND) | ||
MARK_AS_ADVANCED(FORCE GTEST_INCLUDE_DIRS) | ||
MARK_AS_ADVANCED(FORCE GTEST_LIBRARIES) | ||
MARK_AS_ADVANCED(FORCE GTEST_MAIN_LIBRARIES) | ||
MARK_AS_ADVANCED(FORCE GTEST_BOTH_LIBRARIES) | ||
ENDFUNCTION(BUILD_GTEST) | ||
|
||
BUILD_GTEST() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
CMAKE_MINIMUM_REQUIRED(VERSION 3.2 FATAL_ERROR) | ||
|
||
FUNCTION(BUILD_PSIMD) | ||
INCLUDE(ExternalProject) | ||
ExternalProject_Add(psimd | ||
GIT_REPOSITORY https://github.com/Maratyszcza/psimd.git | ||
GIT_TAG master | ||
INSTALL_COMMAND "" | ||
BUILD_BYPRODUCTS <SOURCE_DIR>/include/psimd.h | ||
) | ||
|
||
ExternalProject_Get_Property(psimd source_dir) | ||
SET(PSIMD_FOUND TRUE PARENT_SCOPE) | ||
SET(PSIMD_DEPENDENCY psimd PARENT_SCOPE) | ||
SET(PSIMD_INCLUDE_DIRS ${source_dir}/include PARENT_SCOPE) | ||
|
||
MARK_AS_ADVANCED(FORCE PSIMD_FOUND) | ||
MARK_AS_ADVANCED(FORCE PSIMD_DEPENDENCY) | ||
MARK_AS_ADVANCED(FORCE PSIMD_INCLUDE_DIRS) | ||
ENDFUNCTION(BUILD_PSIMD) | ||
|
||
BUILD_PSIMD() |