-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathCMakeLists.txt
152 lines (127 loc) · 5.48 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
145
146
147
148
149
150
151
152
# Select compiler, supports gcc, clang
cmake_minimum_required (VERSION 3.5)
PROJECT(toolkitICL)
option(BUILDREL "Official release build" OFF)
if(DEFINED ENV{AMDPROFILERPATH})
message(STATUS "Found AMD profiling driver at: $ENV{AMDPROFILERPATH}")
option(USEAMDP "Use AMD Profiling" ON)
add_definitions(-DUSEAMDP)
ELSE()
option(USEAMDP "Use AMD Profiling" OFF)
endif()
find_package(CUDA)
IF(CUDA_FOUND)
option(USENVML "Use NVML" ON)
ELSE()
option(USENVML "Use NVML" OFF)
ENDIF()
IF(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC" OR APPLE)
option(USEIRAPL "Use RAPL" OFF)
ELSE()
option(USEIRAPL "Use RAPL" ON)
ENDIF()
IF(DEFINED ENV{IPG_Dir} OR EXISTS "/Library/Frameworks/IntelPowerGadget.framework")
message(STATUS "Found Intel Power Gadget Driver")
option(USEIPG "Use Intel Power Gadget" ON)
ELSE()
option(USEIPG "Use Intel Power Gadget" OFF)
ENDIF()
IF(USEIPG)
MESSAGE(STATUS "Using Intel Power Gadget")
add_definitions(-DUSEIPG)
option(USEIRAPL "Use RAPL" OFF)
ENDIF()
IF(USEIRAPL)
MESSAGE(STATUS "Using Intel RAPL")
add_definitions(-DUSEIRAPL)
ENDIF()
IF(USENVML)
MESSAGE(STATUS "Using NVML")
add_definitions(-DUSENVML)
ENDIF()
set(CMAKE_CONFIGURATION_TYPES "Release" CACHE STRING "" FORCE)
SET(CMAKE_VERBOSE_MAKEFILE "false")
# Includes modules to find OCL
SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/CMake/")
# compiler flags
IF(BUILDREL)
MESSAGE(STATUS "Building release version")
IF(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
MESSAGE(STATUS "Microsoft Visual Studio detected. Corresponding compiler flags have been set.")
SET(CMAKE_CXX_FLAGS " /std=c++11 /O2 /DH5_BUILT_AS_DYNAMIC_LIB")
SET(CMAKE_C_FLAGS " /std=c++11 /O2 /DH5_BUILT_AS_DYNAMIC_LIB")
ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
MESSAGE(STATUS "GNU Compiler Collection detected. Corresponding compiler flags have been set.")
SET(CMAKE_CXX_FLAGS " -std=c++11 -O2 -funroll-loops -fstrict-aliasing -msse2 -fPIC -Wall -mfpmath=sse -Wcast-align -Wl,-E")
ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
MESSAGE(STATUS "LLVM Clang detected. Corresponding compiler flags have been set.")
SET(CMAKE_CXX_FLAGS " -std=c++11 -O2 -funroll-loops -fstrict-aliasing -msse2 -fPIC -Wall")
ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
MESSAGE(STATUS "Apple Clang detected. Corresponding compiler flags have been set.")
SET(CMAKE_CXX_FLAGS " -std=c++11 -O2 -funroll-loops -fstrict-aliasing -msse2 -fPIC -Wall")
ELSE()
MESSAGE(STATUS "Compiler ${CMAKE_CXX_COMPILER_ID} unknown. Simple compiler flags have been set.")
SET(CMAKE_CXX_FLAGS " -std=c++11 -O2 -fstrict-aliasing -fPIC -Wall")
ENDIF()
ELSE(BUILDREL)
IF(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
MESSAGE(STATUS "Microsoft Visual Studio detected. Corresponding compiler flags have been set.")
SET(CMAKE_CXX_FLAGS " /std=c++11 /O2 /DH5_BUILT_AS_DYNAMIC_LIB")
SET(CMAKE_C_FLAGS " /std=c++11 /O2 /DH5_BUILT_AS_DYNAMIC_LIB")
ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
MESSAGE(STATUS "GNU Compiler Collection detected. Corresponding compiler flags have been set.")
SET(CMAKE_CXX_FLAGS " -std=c++11 -O2 -funroll-loops -fstrict-aliasing -march=native -fPIC -Wall -mfpmath=sse -Wcast-align -Wl,-E")
ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
MESSAGE(STATUS "LLVM Clang detected. Corresponding compiler flags have been set.")
SET(CMAKE_CXX_FLAGS " -std=c++11 -O2 -funroll-loops -fstrict-aliasing -march=native -fPIC -Wall")
ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
MESSAGE(STATUS "Apple Clang detected. Corresponding compiler flags have been set.")
SET(CMAKE_CXX_FLAGS " -std=c++11 -O2 -funroll-loops -fstrict-aliasing -march=native -fPIC -Wall")
ELSE()
MESSAGE(STATUS "Compiler ${CMAKE_CXX_COMPILER_ID} unknown. Simple compiler flags have been set.")
SET(CMAKE_CXX_FLAGS " -std=c++11 -O2 -fstrict-aliasing -march=native -fPIC -Wall")
ENDIF()
ENDIF(BUILDREL)
# Get cl2.hpp header file
OPTION(GET_CL2HPP "Download cl2.hpp from Khronos" OFF)
SET(CL2_URL https://github.com/KhronosGroup/OpenCL-CLHPP/releases/download/v2.0.10/cl2.hpp)
IF(GET_CL2HPP)
# download to default directory
FILE(DOWNLOAD ${CL2_URL} ${CMAKE_CURRENT_SOURCE_DIR}/include/CL/cl2.hpp)
ENDIF()
IF(APPLE)
# Apple does not distribute a cl2.hpp include file and uses another default path for OpenCL
FILE(DOWNLOAD ${CL2_URL} ${CMAKE_CURRENT_SOURCE_DIR}/include/OpenCL/cl2.hpp)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -framework OpenCL")
IF(USEIPG)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -F/Library/Frameworks -framework IntelPowerGadget")
ENDIF()
ENDIF()
# NVML: NVIDIA Management Library, used to query GPU power and temperature
IF(USENVML)
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${CUDA_TOOLKIT_INCLUDE})
ELSE()
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include)
ENDIF(USENVML)
# Check for HDF5
find_package(HDF5 REQUIRED COMPONENTS CXX HL)
IF(HDF5_FOUND)
MESSAGE(STATUS "Looking for HDF5 - found at\n ${HDF5_INCLUDE_DIRS}\n ${HDF5_LIBRARIES}\n ${HDF5_HL_LIBRARIES}")
ELSE(HDF5_FOUND)
MESSAGE(STATUS "Looking for HDF5 - not found!")
ENDIF(HDF5_FOUND)
# Check for OpenCL
find_package(OpenCL REQUIRED)
IF(OpenCL_FOUND)
MESSAGE(STATUS "Looking for OpenCL - found at\n ${OpenCL_INCLUDE_DIRS}\n ${OpenCL_LIBRARY}")
ELSE(OpenCL_FOUND)
MESSAGE(STATUS "Looking for OpenCL - not found")
ENDIF(OpenCL_FOUND)
# toolkitICL
ADD_SUBDIRECTORY(src)
# tests
OPTION(TESTS "Build unit tests" OFF)
IF(TESTS)
enable_testing()
ADD_SUBDIRECTORY(test)
ENDIF()