Skip to content

Commit 142186d

Browse files
author
contuandrea
committed
First commit
1 parent c2a2ceb commit 142186d

27 files changed

+7123
-0
lines changed

CMakeLists.txt

Lines changed: 175 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,175 @@
1+
### CMakeList for TCoDe
2+
cmake_minimum_required(VERSION 3.2)
3+
4+
# project name
5+
project(TCoDe)
6+
7+
# warn user if system is not UNIX
8+
if(NOT UNIX)
9+
message(FATAL_ERROR "This is an unsupported system.")
10+
endif()
11+
12+
#cmake path dir
13+
SET(TCoDe_CMAKE_DIR "${PROJECT_SOURCE_DIR}/cmake")
14+
SET(CMAKE_MODULE_PATH "${TCoDe_CMAKE_DIR}" ${CMAKE_MODULE_PATH})
15+
SET(CMAKE_VERBOSE_MAKEFILE ON)
16+
17+
#check if compiler is C++14 compliant
18+
include(CheckCXXCompilerFlag)
19+
CHECK_CXX_COMPILER_FLAG("--std=c++14" COMPILER_SUPPORTS_CXX14)
20+
if(NOT COMPILER_SUPPORTS_CXX14)
21+
message(FATAL "The compiler ${CMAKE_CXX_COMPILER} has no C++14 support. Please use a different C++ compiler.")
22+
endif()
23+
24+
#compiler flags
25+
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
26+
27+
MESSAGE(STATUS "Setting Clang flags")
28+
set(CMAKE_CXX_FLAGS " --std=c++14 -W -march=native -fPIC -O3 -ldl" CACHE STRING "compile flags" FORCE)
29+
30+
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
31+
32+
MESSAGE(STATUS "Setting GCC flags")
33+
set(CMAKE_CXX_FLAGS " --std=c++14 -W -march=native -fPIC -O4 -ldl" CACHE STRING "compile flags" FORCE)
34+
35+
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel")
36+
37+
MESSAGE(STATUS "Setting ICC flags")
38+
set(CMAKE_CXX_FLAGS " --std=c++14 -W -march=native -fPIC -O4 -ldl" CACHE STRING "compile flags" FORCE)
39+
40+
#elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
41+
#MESSAGE(STATUS "===> Compiling with MSVC")
42+
endif()
43+
44+
# get Hydra
45+
find_package(Hydra REQUIRED)
46+
include_directories(${HYDRA_INCLUDE_DIR})
47+
48+
49+
# get libconfig
50+
find_package(LibConfig REQUIRED)
51+
include_directories(${LIBCONFIG_INCLUDE_DIR})
52+
link_directories(${LIBCONFIG_LIBRARY})
53+
54+
55+
# get TCLAP
56+
find_package(TCLAP REQUIRED)
57+
include_directories(${TCLAP_INCLUDE_DIR})
58+
59+
# get ROOT
60+
find_package(ROOT COMPONENTS Minuit2 TreePlayer)
61+
if(ROOT_FOUND)
62+
include_directories(${ROOT_INCLUDE_DIR})
63+
link_directories(${ROOT_LIBRARY_DIR})
64+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_ROOT_AVAILABLE_")
65+
if(${ROOT_Minuit2_LIBRARY} MATCHES "libMinuit2.so")
66+
set(Minuit2_FOUND ON)
67+
else(Minuit2_FOUND OFF)
68+
endif()
69+
endif(ROOT_FOUND)
70+
71+
#get CUDA
72+
find_package(CUDA 8.0)
73+
if(CUDA_FOUND)
74+
link_directories( ${CUDA_TOOLKIT_ROOT_DIR}/lib64/)
75+
76+
#set cuda flags
77+
SET(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} -ftemplate-backtrace-limit=0; --cudart; static; -O4; --expt-relaxed-constexpr; -fmad=true; --expt-extended-lambda;--relocatable-device-code=false ;
78+
-Xptxas -dlcm=ca; -Xptxas --opt-level=4 )
79+
80+
SET(CUDA_PROPAGATE_HOST_FLAGS ON)
81+
SET(CUDA_SEPARABLE_COMPILATION OFF)
82+
SET(CUDA_VERBOSE_BUILD OFF)
83+
84+
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.8)
85+
LIST(APPEND CUDA_NVCC_FLAGS " -Xcompiler -D_MWAITXINTRIN_H_INCLUDED ")
86+
endif()
87+
88+
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 5.4)
89+
LIST(APPEND CUDA_NVCC_FLAGS " -Xcompiler -D__CORRECT_ISO_CPP14_MATH_H_PROTO ")
90+
endif()
91+
# Detect CUDA architecture and get best NVCC flags
92+
93+
INCLUDE(${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindCudaArch.cmake)
94+
95+
SELECT_NVCC_ARCH_FLAGS(NVCC_FLAGS_EXTRA)
96+
97+
LIST(APPEND CUDA_NVCC_FLAGS ${NVCC_FLAGS_EXTRA})
98+
99+
endif(CUDA_FOUND)
100+
101+
#get TBB
102+
find_package(TBB )
103+
if(TBB_FOUND)
104+
include_directories(${TBB_INCLUDE_DIRS})
105+
link_directories(${TBB_LIBRARY})
106+
endif(TBB_FOUND)
107+
108+
#get OpenMP
109+
find_package(OpenMP)
110+
if(OPENMP_CXX_FOUND OR OPENMP_FOUND)
111+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
112+
endif(OPENMP_CXX_FOUND OR OPENMP_FOUND)
113+
114+
#generate API documentation with Doxygen
115+
find_package(Doxygen)
116+
option(BUILD_DOCUMENTATION "Create and install the HTML based API documentation (requires Doxygen)" NO)
117+
118+
# examples etc
119+
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
120+
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
121+
122+
#always on
123+
SET(BUILD_CPP_TARGETS ON)
124+
125+
#crucial for clang build, where openmp support is not embeded in the compiler
126+
if( OPENMP_CXX_FOUND OR OPENMP_FOUND)
127+
128+
SET(BUILD_OMP_TARGETS ON)
129+
else()
130+
SET(BUILD_OMP_TARGETS OFF)
131+
endif()
132+
133+
#not every computer has a GPU and/or cuda installed or
134+
if( CUDA_FOUND )
135+
SET(BUILD_CUDA_TARGETS ON)
136+
else()
137+
SET(BUILD_CUDA_TARGETS OFF)
138+
endif()
139+
140+
# to enable tbb builds
141+
if(TBB_FOUND)
142+
SET(BUILD_TBB_TARGETS ON)
143+
else()
144+
SET(BUILD_TBB_TARGETS OFF)
145+
endif(TBB_FOUND)
146+
147+
# messages
148+
MESSAGE(STATUS "TCLAP Include path: ${TCLAP_INCLUDE_DIR}")
149+
MESSAGE(STATUS "ROOT include path: ${ROOT_INCLUDE_DIR}")
150+
MESSAGE(STATUS "ROOT library path: ${ROOT_LIBRARY_DIR}" )
151+
MESSAGE(STATUS "ROOT libraries: ${ROOT_LIBRARIES}")
152+
MESSAGE(STATUS "ROOT::Minuit2: ${ROOT_Minuit2_LIBRARY}")
153+
MESSAGE(STATUS "Build CUDA/NVCC-based targets: ${BUILD_CUDA_TARGETS}")
154+
MESSAGE(STATUS "CUDA include: ${CUDA_INCLUDE_DIRS}" )
155+
MESSAGE(STATUS "CUDA libraries: ${CUDA_LIBRARIES}" )
156+
MESSAGE(STATUS "NVCC flags: ${CUDA_NVCC_FLAGS}" )
157+
MESSAGE(STATUS "Build TBB targets: ${BUILD_TBB_TARGETS}")
158+
MESSAGE(STATUS "TBB include: ${TBB_INCLUDE_DIRS}" )
159+
MESSAGE(STATUS "TBB libraries: ${TBB_LIBRARIES}" )
160+
MESSAGE(STATUS "Build OpenMP targets: ${BUILD_OMP_TARGETS}")
161+
MESSAGE(STATUS "OpenMP flags: ${OpenMP_CXX_FLAGS}" )
162+
MESSAGE(STATUS "OpenMP libraries: ${OpenMP_CXX_LIBRARIES}" )
163+
MESSAGE(STATUS "Host compiler flags: ${CMAKE_CXX_FLAGS}" )
164+
MESSAGE(STATUS "Install diretory: ${CMAKE_INSTALL_PREFIX}" )
165+
MESSAGE(STATUS "Project source dir: ${PROJECT_SOURCE_DIR}" )
166+
MESSAGE(STATUS "Project build dir: ${PROJECT_BINARY_DIR}" )
167+
168+
#+++++++++++++++++++++++++++
169+
# targets +
170+
#+++++++++++++++++++++++++++
171+
include(${TCoDe_CMAKE_DIR}/AddAnalysisTarget.cmake)
172+
173+
ADD_ANALYSIS(simulation)
174+
ADD_ANALYSIS(loadmaps)
175+

cmake/AddAnalysisTarget.cmake

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
function(ADD_ANALYSIS target_name)
2+
message(STATUS "-----------")
3+
#+++++++++++++++++++++++++
4+
# CUDA TARGETS |
5+
#+++++++++++++++++++++++++
6+
if(BUILD_CUDA_TARGETS)
7+
message(STATUS "Adding target ${target_name} to CUDA backend. Executable file name: ${target_name}_cuda")
8+
9+
cuda_add_executable("${target_name}_cuda"
10+
#EXCLUDE_FROM_ALL
11+
"${CMAKE_CURRENT_SOURCE_DIR}/src/${target_name}.cu"
12+
OPTIONS -Xcompiler -DHYDRA_DEVICE_SYSTEM=CUDA -DHYDRA_HOST_SYSTEM=CPP)
13+
14+
target_link_libraries("${target_name}_cuda" ${ROOT_LIBRARIES} ${LIBCONFIGPP_LIBRARIES} )
15+
16+
17+
endif(BUILD_CUDA_TARGETS)
18+
19+
#+++++++++++++++++++++++++
20+
# TBB TARGETS |
21+
#+++++++++++++++++++++++++
22+
if(BUILD_TBB_TARGETS)
23+
message(STATUS "Adding target ${target_name} to TBB backend. Executable file name: ${target_name}_tbb")
24+
add_executable("${target_name}_tbb"
25+
# EXCLUDE_FROM_ALL
26+
"${CMAKE_CURRENT_SOURCE_DIR}/src/${target_name}.cpp" )
27+
28+
set_target_properties( "${target_name}_tbb"
29+
PROPERTIES COMPILE_FLAGS "-DHYDRA_HOST_SYSTEM=CPP -DHYDRA_DEVICE_SYSTEM=TBB")
30+
31+
target_link_libraries( "${target_name}_tbb" ${ROOT_LIBRARIES} ${TBB_LIBRARIES} ${LIBCONFIGPP_LIBRARIES} )
32+
33+
34+
endif(BUILD_TBB_TARGETS)
35+
36+
#+++++++++++++++++++++++++
37+
# CPP TARGETS |
38+
#+++++++++++++++++++++++++
39+
if(BUILD_CPP_TARGETS)
40+
message(STATUS "Adding target ${target_name} to CPP backend. Executable file name: ${target_name}_cpp")
41+
add_executable("${target_name}_cpp"
42+
# EXCLUDE_FROM_ALL
43+
"${CMAKE_CURRENT_SOURCE_DIR}/src/${target_name}.cpp" )
44+
45+
set_target_properties( "${target_name}_cpp"
46+
PROPERTIES COMPILE_FLAGS "-DHYDRA_HOST_SYSTEM=CPP -DHYDRA_DEVICE_SYSTEM=CPP")
47+
48+
target_link_libraries( "${target_name}_cpp" ${ROOT_LIBRARIES} ${TBB_LIBRARIES} ${LIBCONFIGPP_LIBRARIES} )
49+
50+
51+
endif(BUILD_CPP_TARGETS)
52+
53+
54+
#+++++++++++++++++++++++++
55+
# OMP TARGETS |
56+
#+++++++++++++++++++++++++
57+
if(BUILD_OMP_TARGETS)
58+
message(STATUS "Adding target ${target_name} to OMP backend. Executable file name: ${target_name}_omp")
59+
add_executable("${target_name}_omp"
60+
#EXCLUDE_FROM_ALL
61+
"${CMAKE_CURRENT_SOURCE_DIR}/src/${target_name}.cpp" )
62+
63+
set_target_properties( "${target_name}_omp"
64+
PROPERTIES COMPILE_FLAGS "-DHYDRA_HOST_SYSTEM=CPP -DHYDRA_DEVICE_SYSTEM=OMP ${OpenMP_CXX_FLAGS}")
65+
66+
target_link_libraries( "${target_name}_omp" ${ROOT_LIBRARIES} ${OpenMP_CXX_LIBRARIES} ${LIBCONFIGPP_LIBRARIES} )
67+
68+
69+
endif(BUILD_OMP_TARGETS)
70+
71+
endfunction(ADD_ANALYSIS)

0 commit comments

Comments
 (0)