|
1 | | -project(mallocMC LANGUAGES CUDA CXX) |
| 1 | +project(mallocMC LANGUAGES CXX) |
2 | 2 | cmake_minimum_required(VERSION 3.8) |
3 | 3 |
|
4 | | -set(CMAKE_CXX_STANDARD 11) |
| 4 | +set(CMAKE_CXX_STANDARD 14) |
5 | 5 | set(CMAKE_CXX_STANDARD_REQUIRED ON) |
6 | 6 |
|
7 | | -# helper for libs and packages |
8 | | -set(CMAKE_CUDA_STANDARD 11) |
9 | | -set(CMAKE_CUDA_STANDARD_REQUIRED ON) |
10 | | -set(CMAKE_PREFIX_PATH "/usr/lib/x86_64-linux-gnu/" |
11 | | - "$ENV{CUDA_ROOT}" "$ENV{BOOST_ROOT}") |
12 | | - |
13 | | - |
14 | | -################################################################################ |
15 | | -# CMake policies |
16 | | -# |
17 | | -# Search in <PackageName>_ROOT: |
18 | | -# https://cmake.org/cmake/help/v3.12/policy/CMP0074.html |
19 | | -################################################################################ |
20 | | - |
21 | 7 | if(POLICY CMP0074) |
22 | 8 | cmake_policy(SET CMP0074 NEW) |
23 | 9 | endif() |
24 | 10 |
|
25 | | - |
26 | | -############################################################################### |
27 | | -# CUDA |
28 | | -############################################################################### |
29 | | -if(NOT DEFINED COMPUTE_CAPABILITY) |
30 | | - set(COMPUTE_CAPABILITY "30") |
| 11 | +# find alpaka |
| 12 | +set(mallocMC_ALPAKA_PROVIDER "intern" CACHE STRING "Select which alpaka is used") |
| 13 | +set_property(CACHE mallocMC_ALPAKA_PROVIDER PROPERTY STRINGS "intern;extern") |
| 14 | +mark_as_advanced(mallocMC_ALPAKA_PROVIDER) |
| 15 | +if(${mallocMC_ALPAKA_PROVIDER} STREQUAL "intern") |
| 16 | + set(alpaka_BUILD_EXAMPLES OFF) |
| 17 | + set(BUILD_TESTING OFF) |
| 18 | + add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/alpaka ${CMAKE_BINARY_DIR}/alpaka) |
| 19 | +else() |
| 20 | + find_package(alpaka HINTS $ENV{ALPAKA_ROOT}) |
31 | 21 | endif() |
32 | | -set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -arch=sm_${COMPUTE_CAPABILITY} -use_fast_math") |
33 | 22 |
|
34 | | -OPTION(CUDA_OUTPUT_INTERMEDIATE_CODE "Output ptx code" OFF) |
35 | | -if(CUDA_OUTPUT_INTERMEDIATE_CODE) |
36 | | - set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -Xptxas -v --keep") |
| 23 | +if(NOT TARGET alpaka::alpaka) |
| 24 | + message(FATAL "Required mallocMC dependency alpaka could not be found!") |
37 | 25 | endif() |
38 | 26 |
|
39 | | -SET(CUDA_OPTIMIZATION_TYPE "unset" CACHE STRING "CUDA Optimization") |
40 | | -set_property(CACHE CUDA_OPTIMIZATION_TYPE PROPERTY STRINGS "unset;-G0;-O0;-O1;-O2;-O3") |
41 | | -if(NOT ${CUDA_OPTIMIZATION_TYPE} STREQUAL "unset") |
42 | | - set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} ${CUDA_OPTIMIZATION_TYPE}") |
| 27 | +# Catch2 |
| 28 | +set(mallocMC_CATCH2_PROVIDER "intern" CACHE STRING "Select which Catch2 is used") |
| 29 | +set_property(CACHE mallocMC_CATCH2_PROVIDER PROPERTY STRINGS "intern;extern") |
| 30 | +mark_as_advanced(mallocMC_CATCH2_PROVIDER) |
| 31 | +if(${mallocMC_CATCH2_PROVIDER} STREQUAL "intern") |
| 32 | + add_library(Catch2::Catch2 INTERFACE IMPORTED) |
| 33 | + target_include_directories(Catch2::Catch2 INTERFACE ${CMAKE_CURRENT_LIST_DIR}/thirdParty/catch2/include) |
| 34 | +else() |
| 35 | + find_package(Catch2 CONFIG REQUIRED) |
43 | 36 | endif() |
44 | 37 |
|
| 38 | +# for installation, just copy include folder to install folder |
| 39 | +install( |
| 40 | + DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/src/include/." |
| 41 | + DESTINATION include |
| 42 | +) |
45 | 43 |
|
46 | | -################################################################################ |
47 | | -# Warnings |
48 | | -################################################################################ |
| 44 | +# warnings |
| 45 | +add_library(warnings INTERFACE) |
49 | 46 | if(CMAKE_COMPILER_IS_GNUCXX) |
50 | | - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wshadow -Wno-unknown-pragmas -Wextra -Wno-unused-parameter -Wno-unused-local-typedefs") |
| 47 | + target_compile_options(warnings INTERFACE -Wall -Wshadow -Wno-unknown-pragmas -Wextra -Wno-unused-parameter -Wno-unused-local-typedefs) |
51 | 48 | elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel") |
52 | | - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wshadow") |
| 49 | + target_compile_options(warnings INTERFACE -Wall -Wshadow) |
53 | 50 | elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "PGI") |
54 | | - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Minform=inform") |
| 51 | + target_compile_options(warnings INTERFACE -Minform=inform) |
55 | 52 | endif() |
56 | 53 |
|
57 | | - |
58 | | -############################################################################### |
59 | | -# Installation |
60 | | -############################################################################### |
61 | | - |
62 | | -# copy include folder to install folder |
63 | | -INSTALL( |
64 | | - DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/src/include/." |
65 | | - DESTINATION include |
66 | | - PATTERN ".git" EXCLUDE |
67 | | - PATTERN "mallocMC_config.hpp" EXCLUDE |
68 | | -) |
69 | | - |
70 | | - |
71 | | -############################################################################### |
72 | 54 | # Executables |
73 | | -############################################################################### |
74 | 55 | file(GLOB_RECURSE headers src/include/**) |
75 | | -add_custom_target(mallocMC SOURCES ${headers}) # create a target with the header files for IDE projects |
| 56 | +add_custom_target(mallocMCIde SOURCES ${headers}) # create a target with the header files for IDE projects |
76 | 57 | source_group(TREE ${CMAKE_CURRENT_LIST_DIR}/src/include FILES ${headers}) |
77 | 58 |
|
78 | | -include_directories(${CMAKE_CURRENT_LIST_DIR}/src/include) |
79 | | -add_executable(mallocMC_Example01 EXCLUDE_FROM_ALL examples/mallocMC_example01.cu examples/mallocMC_example01_config.hpp) |
80 | | -add_executable(mallocMC_Example02 EXCLUDE_FROM_ALL examples/mallocMC_example02.cu) |
81 | | -add_executable(mallocMC_Example03 EXCLUDE_FROM_ALL examples/mallocMC_example03.cu) |
82 | | -add_executable(VerifyHeap EXCLUDE_FROM_ALL tests/verify_heap.cu tests/verify_heap_config.hpp) |
83 | | -add_custom_target(examples DEPENDS mallocMC_Example01 mallocMC_Example02 mallocMC_Example03 VerifyHeap) |
| 59 | +alpaka_add_executable(mallocMC_Example01 EXCLUDE_FROM_ALL examples/mallocMC_example01.cpp) |
| 60 | +target_include_directories(mallocMC_Example01 PUBLIC ${CMAKE_CURRENT_LIST_DIR}/src/include) |
| 61 | +target_link_libraries(mallocMC_Example01 PUBLIC alpaka::alpaka warnings) |
| 62 | + |
| 63 | +alpaka_add_executable(mallocMC_Example03 EXCLUDE_FROM_ALL examples/mallocMC_example03.cpp) |
| 64 | +target_include_directories(mallocMC_Example03 PUBLIC ${CMAKE_CURRENT_LIST_DIR}/src/include) |
| 65 | +target_link_libraries(mallocMC_Example03 PUBLIC alpaka::alpaka warnings) |
| 66 | + |
| 67 | +alpaka_add_executable(VerifyHeap EXCLUDE_FROM_ALL tests/verify_heap.cpp tests/verify_heap_config.hpp) |
| 68 | +target_include_directories(VerifyHeap PUBLIC ${CMAKE_CURRENT_LIST_DIR}/src/include) |
| 69 | +target_link_libraries(VerifyHeap PUBLIC alpaka::alpaka warnings) |
| 70 | + |
| 71 | +if (CUDA_VERSION VERSION_LESS 10.2) # TODO(bgruber): I do not know exactly where it breaks. 9.1 does not work, 10.2 works |
| 72 | + # the catch2 main needs to be in a non-CUDA file before CUDA 10.2, because nvcc fails to compile the catch2 header |
| 73 | + # TODO: merge the test_main back into the tests exe, once CUDA 10.2 is the minimum version |
| 74 | + add_library(tests_main EXCLUDE_FROM_ALL tests/main.cpp) |
| 75 | + target_include_directories(tests_main PUBLIC ${CMAKE_CURRENT_LIST_DIR}/src/include) |
| 76 | + target_link_libraries(tests_main PUBLIC Catch2::Catch2 warnings) |
| 77 | + |
| 78 | + alpaka_add_executable(tests EXCLUDE_FROM_ALL tests/dimensions.cpp tests/policies.cpp) |
| 79 | + target_include_directories(tests PUBLIC ${CMAKE_CURRENT_LIST_DIR}/src/include) |
| 80 | + target_link_libraries(tests PUBLIC tests_main alpaka::alpaka Catch2::Catch2 warnings) |
| 81 | +else() |
| 82 | + alpaka_add_executable(tests EXCLUDE_FROM_ALL tests/main.cpp tests/dimensions.cpp tests/policies.cpp) |
| 83 | + target_include_directories(tests PUBLIC ${CMAKE_CURRENT_LIST_DIR}/src/include) |
| 84 | + target_link_libraries(tests PUBLIC alpaka::alpaka Catch2::Catch2 warnings) |
| 85 | +endif() |
| 86 | + |
| 87 | +add_custom_target(examples DEPENDS mallocMC_Example01 mallocMC_Example03 VerifyHeap) |
0 commit comments