[go: nahoru, domu]

Skip to content

Commit

Permalink
CMake configuration
Browse files Browse the repository at this point in the history
  • Loading branch information
Marat Dukhan committed Oct 17, 2017
1 parent 251d93e commit b966e59
Show file tree
Hide file tree
Showing 4 changed files with 208 additions and 0 deletions.
116 changes: 116 additions & 0 deletions CMakeLists.txt
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()
32 changes: 32 additions & 0 deletions cmake/FindGBenchmark.cmake
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()
38 changes: 38 additions & 0 deletions cmake/FindGTest.cmake
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()
22 changes: 22 additions & 0 deletions cmake/FindPSIMD.cmake
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()

0 comments on commit b966e59

Please sign in to comment.