forked from Michoumichmich/zfp
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
144 lines (119 loc) · 4.38 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
set(CMAKE_CXX_STANDARD 11)
# CMAKE_SH-NOTFOUND needed for mingw builds
if(MINGW)
list(APPEND CMOCKA_ARGS "-DCMAKE_SH=CMAKE_SH-NOTFOUND")
list(APPEND GTEST_ARGS "-DCMAKE_SH=CMAKE_SH-NOTFOUND")
endif()
# clone cmocka 1.1.0 into /build
list(APPEND CMOCKA_ARGS "-DWITH_STATIC_LIB=ON;-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER};-DUNIT_TESTING=OFF")
include(ExternalProject)
ExternalProject_Add(
cmocka_cloned
GIT_REPOSITORY https://git.cryptomilk.org/projects/cmocka.git
GIT_TAG cmocka-1.1.0
SOURCE_DIR "${CMAKE_BINARY_DIR}/cmocka-src"
BINARY_DIR "${CMAKE_BINARY_DIR}/cmocka-build"
CMAKE_ARGS ${CMOCKA_ARGS}
BUILD_COMMAND ${CMAKE_COMMAND} --build . --config ${CMAKE_BUILD_TYPE} WORKING_DIRECTORY ${CMAKE_BINARY_DIR} cmocka_static
INSTALL_COMMAND ""
STEP_TARGETS build
EXCLUDE_FROM_ALL TRUE
)
ExternalProject_Get_Property(cmocka_cloned source_dir binary_dir)
# name static library cmocka, wire up against cmocka_cloned
add_library(cmocka STATIC IMPORTED GLOBAL)
# choose proper library path & extension
if(MSVC)
set(IMPORTED_LOCATION_PATH "${binary_dir}/src/${CMAKE_BUILD_TYPE}/cmocka.lib")
else()
set(IMPORTED_LOCATION_PATH "${binary_dir}/src/libcmocka.a")
endif()
set_property(TARGET cmocka
PROPERTY
IMPORTED_LOCATION "${IMPORTED_LOCATION_PATH}"
)
add_dependencies(cmocka cmocka_cloned)
include_directories(${source_dir}/include)
# include home dir so #include statements are clear in test files
include_directories(${ZFP_SOURCE_DIR} ${ZFP_SOURCE_DIR}/include)
# access to constants/ and utils/
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
# suppress warnings for all targets
if(CMAKE_C_COMPILER_ID STREQUAL "GNU" OR CMAKE_C_COMPILER_ID STREQUAL "Clang")
add_compile_options(-Wno-unused-function)
endif()
# -Wno-variadic-macros was not working for gcc...revisit
if(CMAKE_C_COMPILER_ID STREQUAL "Clang")
add_compile_options(-Wno-gnu-zero-variadic-macro-arguments)
endif()
# suppress googletest warning "conversion from 'float' to 'testing::internal::BiggestInt', possible loss of data"
if(MSVC)
add_compile_options(/wd4244)
endif()
add_subdirectory(utils)
add_subdirectory(src)
if(BUILD_CFP)
add_subdirectory(cfp)
endif()
if(BUILD_ZFORP)
add_subdirectory(fortran)
endif()
# needed to compile gtest on MSVC
if(MSVC)
list(APPEND GTEST_ARGS "/D:_SILENCE_TR1_DEPRECATION_NAMESPACE_WARNING=1")
endif()
# TODO: spend time getting googletest to compile on MinGW
# checksums are generated through C tests, no need to compile C++ tests
if((NOT MINGW) AND (NOT DEFINED ZFP_OMP_TESTS_ONLY) AND (NOT PRINT_CHECKSUMS))
# clone googletest into build/
configure_file(CMakeLists.txt.in ${ZFP_BINARY_DIR}/tests/googletest-download/CMakeLists.txt)
execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" ${GTEST_ARGS} .
RESULT_VARIABLE result
WORKING_DIRECTORY ${ZFP_BINARY_DIR}/tests/googletest-download
)
if(result)
message(FATAL_ERROR "CMake step for googletest failed: ${result}")
endif()
# build gtest
execute_process(COMMAND ${CMAKE_COMMAND} --build .
RESULT_VARIABLE result
WORKING_DIRECTORY ${ZFP_BINARY_DIR}/tests/googletest-download
)
if(result)
message(FATAL_ERROR "Build step for googletest failed: ${result}")
endif()
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
add_subdirectory(${ZFP_BINARY_DIR}/tests/googletest-src
${ZFP_BINARY_DIR}/tests/googletest-build
)
if(CMAKE_VERSION VERSION_LESS 2.8.11)
include_directories("${gtest_SOURCE_DIR}/include")
endif()
# needed to compile zfp tests with gtest on MSVC
if(MSVC)
target_compile_definitions(gtest_main INTERFACE GTEST_LINKED_AS_SHARED_LIBRARY=1)
endif()
add_subdirectory(array)
endif()
add_executable(testzfp testzfp.cpp)
target_link_libraries(testzfp zfp)
target_compile_definitions(testzfp PRIVATE ${zfp_compressed_array_defs})
option(ZFP_BUILD_TESTING_SMALL "Enable small-sized array testing" ON)
if(ZFP_BUILD_TESTING_SMALL)
foreach(D IN ITEMS 1 2 3 4)
foreach(P IN ITEMS 32 64)
add_test(NAME small-arrays-${D}d-fp${P} COMMAND testzfp small ${D}d fp${P})
endforeach()
endforeach()
endif()
option(ZFP_BUILD_TESTING_LARGE "Enable large-sized array testing" OFF)
if(ZFP_BUILD_TESTING_LARGE)
foreach(D IN ITEMS 1 2 3 4)
foreach(P IN ITEMS 32 64)
add_test(NAME large-arrays-${D}d-fp${P} COMMAND testzfp large ${D}d fp${P})
endforeach()
endforeach()
endif()
if(BUILD_ZFPY)
add_subdirectory(python)
endif()