11# CMake below 3.4 does not work with CUDA separable compilation at all
2- cmake_minimum_required (VERSION 3.4 )
2+ cmake_minimum_required (VERSION 3.12 )
33
4- project (PopSift VERSION 1.0.0)
4+ project (PopSift VERSION 1.0.0 LANGUAGES CXX)
5+
6+ # Set build path as a folder named as the platform (linux, windows, darwin...) plus the processor type
7+ set (EXECUTABLE_OUTPUT_PATH "${PROJECT_BINARY_DIR} /${CMAKE_SYSTEM_NAME} -${CMAKE_SYSTEM_PROCESSOR} " )
8+ set (LIBRARY_OUTPUT_PATH "${PROJECT_BINARY_DIR} /${CMAKE_SYSTEM_NAME} -${CMAKE_SYSTEM_PROCESSOR} " )
9+
10+ option (PopSift_BUILD_EXAMPLES "Build PopSift applications." ON )
11+ option (PopSift_USE_NVTX_PROFILING "Use CUDA NVTX for profiling." OFF )
12+ option (PopSift_ERRCHK_AFTER_KERNEL "Synchronize and check CUDA error after every kernel." OFF )
13+ option (PopSift_USE_POSITION_INDEPENDENT_CODE "Generate position independent code." ON )
14+ option (PopSift_USE_GRID_FILTER "Switch off grid filtering to massively reduce compile time while debugging other things." ON )
15+ option (PopSift_USE_NORMF "The __normf function computes Euclidian distance on large arrays. Fast but stability is uncertain." OFF )
16+ option (PopSift_USE_TEST_CMD "Add testing step for functional verification" OFF )
17+ option (PopSift_NVCC_WARNINGS "Switch on several additional warning for CUDA nvcc" OFF )
18+ option (BUILD_SHARED_LIBS "Build shared libraries" ON )
519
6- OPTION (PopSift_BUILD_EXAMPLES "Build PopSift applications." ON )
7- OPTION (PopSift_USE_NVTX_PROFILING "Use CUDA NVTX for profiling." OFF )
8- OPTION (PopSift_ERRCHK_AFTER_KERNEL "Synchronize and check CUDA error after every kernel." OFF )
9- OPTION (PopSift_USE_POSITION_INDEPENDENT_CODE "Generate position independent code." ON )
10- OPTION (PopSift_USE_GRID_FILTER "Switch off grid filtering to massively reduce compile time while debugging other things." ON )
11- OPTION (PopSift_USE_NORMF "The __normf function computes Euclidian distance on large arrays. Fast but stability is uncertain." OFF )
12- OPTION (PopSift_USE_TEST_CMD "Add testing step for functional verification" OFF )
13- OPTION (PopSift_NVCC_WARNINGS "Switch on several additional warning for CUDA nvcc" OFF )
1420
1521if (PopSift_USE_POSITION_INDEPENDENT_CODE)
1622 set (CMAKE_POSITION_INDEPENDENT_CODE ON )
@@ -26,14 +32,20 @@ else()
2632 message (STATUS "Building in ${CMAKE_BUILD_TYPE} configuration" )
2733endif ()
2834
29- set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3" )
30- set (CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O3" )
35+ # for some reason this line is necessary to propagate the standard to nvcc
3136set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11" )
3237set (CMAKE_CXX_STANDARD 11)
3338set (CMAKE_CXX_STANDARD_REQUIRED ON )
39+ set (CMAKE_CUDA_STANDARD 11)
40+ set (CMAKE_CUDA_STANDARD_REQUIRED ON )
41+
42+ # ==============================================================================
43+ # GNUInstallDirs CMake module
44+ # - Define GNU standard installation directories
45+ # - Provides install directory variables as defined by the GNU Coding Standards.
46+ # ==============================================================================
47+ include (GNUInstallDirs)
3448
35- # set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -G")
36- # set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -G")
3749
3850if (BUILD_SHARED_LIBS )
3951 message (STATUS "BUILD_SHARED_LIBS ON" )
@@ -53,6 +65,9 @@ endif()
5365# Require threads because of std::thread.
5466find_package (Threads REQUIRED)
5567
68+ ###################
69+ # CUDA
70+ ###################
5671find_package (CUDA 7.0 REQUIRED)
5772
5873if (NOT CUDA_FOUND)
@@ -136,9 +151,9 @@ if( ( CUDA_VERSION VERSION_EQUAL "7.5" ) OR ( CUDA_VERSION VERSION_GREATER "7.5"
136151endif ()
137152
138153if (PopSift_USE_NORMF AND CUDA_VERSION VERSION_GREATER "7.4" )
139- set (HAVE_NORMF 1)
154+ set (PopSift_HAVE_NORMF 1)
140155else ()
141- set (HAVE_NORMF 0)
156+ set (PopSift_HAVE_NORMF 0)
142157endif ()
143158
144159if ( ( CUDA_VERSION VERSION_EQUAL "9.0" ) OR ( CUDA_VERSION VERSION_GREATER "9.0" ) )
@@ -160,7 +175,9 @@ cuda_find_library_local_first(CUDA_CUDADEVRT_LIBRARY cudadevrt "\"cudadevrt\" li
160175if (PopSift_USE_NVTX_PROFILING)
161176 # library required for NVTX profiling of the CPU
162177 cuda_find_library_local_first(CUDA_NVTX_LIBRARY nvToolsExt "NVTX library" )
163- add_definitions (-DUSE_NVTX)
178+ set (PopSift_USE_NVTX 1)
179+ else ()
180+ set (PopSift_USE_NVTX 0)
164181endif ()
165182
166183add_subdirectory (src)
@@ -175,5 +192,27 @@ CONFIGURE_FILE(
175192 "${CMAKE_CURRENT_BINARY_DIR} /cmake/cmake_uninstall.cmake"
176193 IMMEDIATE @ONLY)
177194ADD_CUSTOM_TARGET (uninstall
178- "${CMAKE_COMMAND} " -P "${CMAKE_CURRENT_BINARY_DIR} /cmake/cmake_uninstall.cmake" )
179-
195+ "${CMAKE_COMMAND} " -P "${CMAKE_CURRENT_BINARY_DIR} /cmake/cmake_uninstall.cmake" )
196+
197+
198+ ######################################
199+ # SUMMARY
200+ ######################################
201+ message ("\n " )
202+ message ("******************************************" )
203+ message ("Building configuration:\n " )
204+ message (STATUS "PopSift version: " ${PROJECT_VERSION} )
205+ message (STATUS "Build type: " ${CMAKE_BUILD_TYPE} )
206+ message (STATUS "Build Shared libs: " ${BUILD_SHARED_LIBS} )
207+ message (STATUS "Build examples: " ${PopSift_BUILD_EXAMPLES} )
208+ message (STATUS "Generate position independent code: " ${PopSift_USE_POSITION_INDEPENDENT_CODE} )
209+ message (STATUS "Use CUDA NVTX for profiling: " ${PopSift_USE_NVTX_PROFILING} )
210+ message (STATUS "Synchronize and check CUDA error after every kernel: " ${PopSift_ERRCHK_AFTER_KERNEL} )
211+ message (STATUS "Grid filtering: " ${PopSift_USE_GRID_FILTER} )
212+ message (STATUS "Testing step: " ${PopSift_USE_TEST_CMD} )
213+ message (STATUS "Link with static Boost libraries: " ${PopSift_BOOST_USE_STATIC_LIBS} )
214+ message (STATUS "Additional warning for CUDA nvcc: " ${PopSift_NVCC_WARNINGS} )
215+ message (STATUS "Compiling for CUDA CCs: ${PopSift_CUDA_CC_LIST} " )
216+ message (STATUS "Install path: " ${CMAKE_INSTALL_PREFIX} )
217+ message ("\n ******************************************" )
218+ message ("\n " )
0 commit comments