-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
124 lines (98 loc) · 4.37 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
cmake_minimum_required(VERSION 2.8)
project(libraries_test)
set(CMAKE_BUILD_TYPE RELEASE)
#set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fstack-protector --param=ssp-buffer-size=4 -D_FORTIFY_SOURCE=2")
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -W -O3 -std=c++11")
# Compiler option viennacl (change them on cmake-gui)
option(ENABLE_OPENCL "Use the OpenCL backend")
option(ENABLE_CUDA "Use the CUDA backend")
option(ENABLE_OPENMP "Use the OPENMP backend")
# Add .exe openCL
set(ENABLE_OPENCL OFF)
# Add .exe CUDA
set(ENABLE_CUDA ON)
# Add .exe openMP
set(ENABLE_OPENMP ON)
# Info compilation flags
#message("${CMAKE_BUILD_TYPE}")
#message("${CMAKE_CXX_FLAGS_RELEASE}")
#message("${CMAKE_CXX_FLAGS}")
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
set(HEADER_FILES
component/benchmark.hpp
component/benchmark.inl
#component/libraries/cuSparse.hpp
)
set(CUDA_HEADER_FILES
component/libraries/mmio.h
)
set(SOURCE_FILES
main.cpp
component/benchmark.cpp
#component/libraries/cuSparse.cpp
)
set(CUDA_SOURCE_FILES
component/libraries/mmio.c
main.cu
)
#### Subdirectories
add_subdirectory(examples)
#### EIGEN
set(EIGEN_LIBRARY_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/extlibs/eigen3")
##### VIENNACL
set(VIENNACL_LIBRARY_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/extlibs/ViennaCL-1.7.1/")
set(VIENNACL_LIBRARY "${CMAKE_CURRENT_SOURCE_DIR}/extlibs/ViennaCL-1.7.1/build/libviennacl/libviennacl.so")
#### OPENCL
set(OPENCL_LIBRARY_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/extlibs/ViennaCL-1.7.1/CL")
set(OPENCL_LIBRARY "/usr/local/cuda-9.0/lib64/libOpenCL.so")
########### COMPILATION FLAGS ############################################
# Targets using OpenCL
if (ENABLE_OPENCL)
add_executable(benchmark ${HEADER_FILES} ${SOURCE_FILES})
set_target_properties(benchmark PROPERTIES COMPILE_FLAGS "-DVIENNACL_WITH_OPENCL")
##### LIBRARY LINKS ############################################
##### VIENNACL
target_include_directories(benchmark PUBLIC ${VIENNACL_LIBRARY_DIRECTORY})
target_link_libraries(benchmark ${VIENNACL_LIBRARY})
#### OPENCL
target_include_directories(benchmark PUBLIC ${OPENCL_LIBRARY_DIRECTORY})
target_link_libraries(benchmark ${OPENCL_LIBRARY})
#### EIGEN
target_include_directories(benchmark PUBLIC ${EIGEN_LIBRARY_DIRECTORY})
endif(ENABLE_OPENCL)
# Targets using CUDA
if (ENABLE_CUDA)
find_package(CUDA QUIET REQUIRED)
include_directories(${VIENNACL_LIBRARY_DIRECTORY})
include_directories(${Boost_INCLUDE_DIRS})
#set_source_files_properties(component/libraries/mmio.c PROPERTIES LANGUAGE CUDA)
set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS}" "-DVIENNACL_WITH_CUDA")
cuda_add_executable(benchmark_cu ${CUDA_SOURCE_FILES} ${CUDA_HEADER_FILES} ${HEADER_FILES})
##### LIBRARY LINKS ############################################
#### CUDA
include_directories(benchmark_cu PUBLIC ${CUDA_INCLUDE_DIRS}) # target_include_directories does not work with CUDA
target_link_libraries(benchmark_cu ${CUDA_LIBRARY} ${CUDA_cusparse_LIBRARY}) # so we include for all the project
##### VIENNACL
include_directories(benchmark_cu PUBLIC ${VIENNACL_LIBRARY_DIRECTORY})
target_link_libraries(benchmark_cu ${VIENNACL_LIBRARY})
##### UBLAS
target_link_libraries(benchmark_cu ${Boost_LIBRARIES})
endif(ENABLE_CUDA)
#### ?? use cuda_arch_flag ??
# set(CUDA_ARCH_FLAG "-arch=sm_30" CACHE STRING "Use one out of sm_13, sm_20, sm_30, ...")
# set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS}" "-DVIENNACL_WITH_CUDA") #"${CUDA_ARCH_FLAG}")
# Targets using OpenMP
if (ENABLE_OPENMP)
find_package(OpenMP)
if (OPENMP_FOUND)
add_executable(benchmark ${HEADER_FILES} ${SOURCE_FILES})
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
set_target_properties(benchmark PROPERTIES COMPILE_FLAGS "-DVIENNACL_WITH_OPENMP")
##### LIBRARY LINKS ############################################
##### VIENNACL
target_include_directories(benchmark PUBLIC ${VIENNACL_LIBRARY_DIRECTORY})
target_link_libraries(benchmark ${VIENNACL_LIBRARY})
#### EIGEN
target_include_directories(benchmark PUBLIC ${EIGEN_LIBRARY_DIRECTORY})
endif(OPENMP_FOUND)
endif(ENABLE_OPENMP)