Skip to content
Snippets Groups Projects
Commit a5f77db0 authored by Niclas Esser's avatar Niclas Esser
Browse files

Revised cmake project

parent 43990176
No related branches found
No related tags found
No related merge requests found
Showing
with 129 additions and 129 deletions
......@@ -16,7 +16,7 @@ cache:
build_cpp:
stage: build
script:
- cmake -S . -B build/ -DENABLE_CUDA=TRUE -DENABLE_benchmark=TRUE -DPSRDADA_INCLUDE_DIR=/usr/local/include/psrdada -DCMAKE_CUDA_FLAGS="--arch=compute61 --code=sm_61"
- cmake -S . -B build/ -DENABLE_BENCHMARK=ON -DPSRDADA_INCLUDE_DIR=/usr/local/include/psrdada
- make -j8 -C build/
artifacts:
paths:
......
# project name and specify the minumum cmake version.
project (psrdada_cpp CXX)
cmake_minimum_required (VERSION 3.9)
enable_testing()
ENABLE_TESTING()
# The version number.
set (psrdada_cpp_VERSION_MAJOR 0)
......@@ -31,17 +31,15 @@ if(NOT BINARY_INSTALL_DIR)
endif(NOT BINARY_INSTALL_DIR)
# Compiling and build options for submodules
option(ENABLE_testing "Build and enable testing" ON)
option(ENABLE_benchmark "Build and enable benchmark" OFF)
option(BUILD_gated_spectrometer "Build gated_spectrometer" ON)
option(BUILD_fft_spectrometer "Build fft_spectrometer" ON)
option(BUILD_rs_spectrometer "Build rs_spectrometer" ON)
option(BUILD_edd_merge "Build merger" ON)
option(ENABLE_CUDA " Compile with .cu and .cuh files the nvcc compiler. Requires CUDA toolkit to be installed." ON)
option(ENABLE_TESTING "Build and enable testing" ON)
option(ENABLE_BENCHMARK "Build and enable benchmark" OFF)
option(BUILD_SUBMODULES "Build submodules" ON)
# Set build type
if (NOT CMAKE_BUILD_TYPE OR CMAKE_BUILD_TYPE STREQUAL "")
set(CMAKE_BUILD_TYPE "RELEASE" CACHE STRING "" FORCE)
endif()
string(TOUPPER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_UPPER)
# get project dependencies and compiler settings.
include(dependencies)
......@@ -70,7 +68,7 @@ if (DEBUG_PRINT)
message(STATUS " C++ flags: ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_MINSIZEREL}")
endif()
if(ENABLE_CUDA)
message(STATUS " nvcc flags: ${CUDA_NVCC_FLAGS}")
message(STATUS " NVCC flags: ${CUDA_NVCC_FLAGS}")
endif ()
message(STATUS "")
message(STATUS "Install locations: (make install)")
......@@ -88,4 +86,4 @@ if (DEBUG_PRINT)
endif (DEBUG_PRINT)
enable_testing()
ENABLE_TESTING()
......@@ -4,9 +4,10 @@ PSRDADA_CPP contains C++ wrappers for a subset for PSRDADA functionality (HDUs,
## Requirements
- psrdada
- boost 1.67 or >
- CMake 3.12 or >
- CUDA (optional, necessary for submodules)
- boost 1.67 or later
- CMake 3.12 or later
- CUDA (optional, required to compile `.cu` and `.cuh` source)
## Installation
Clone the repository and enter the root folder
......@@ -15,11 +16,18 @@ Clone the repository and enter the root folder
Prepare and build the entire project
`cmake -S . -B build/ -DENABLE_CUDA=TRUE && make -C build/`
`cmake -S . -B <path-to-build> -DENABLE_CUDA=TRUE -DPSRDADA_INCLUDE_DIR=<path-to-psrdada-headers> && make -C <path-to-build>/`
### Custom CMake flags
Optionally, test it
All flags are passed to cmake with the CMake prefix `-D<flagname>`
`make -C build test`
| Flagname | Description | Values | Command |
|----------|-------------|---------------|---------|
| `ENABLE_CUDA` | Allows compilation with `nvcc` which is require to compile `.cuh` and `.cu` | `ON` (default), `OFF` | - |
| `BUILD_SUBMODULES` | Build all submodules. When disabled only the `psrdada_cpp` core is built. | `ON` (default), `OFF` | - |
| `ENABLE_TESTING` | Installs the `googlebenchmark`-project, and compiles registered tests. Only has effect when `BUILD_SUBMODULES` is `ON`. | `ON` (default), `OFF` | `make -C <path-to-build> test` |
| `ENABLE_BENCHMARK` | Installs the `googlebenchmark` project and compiles benchmark applications of submodules. Only has effect when `BUILD_SUBMODULES` is `ON`. | `OFF` (default), `ON` | `make -C <path-to-build> benchmark` |
## Documentation
The documentation of psrdadad-cpp can be found at: http://mpifr-bdg.pages.mpcdf.de/psrdada_cpp/
......
option(ENABLE_CUDA "Enable CUDA algorithms. Requires CUDA toolkit to be installed" ON)
if(ENABLE_CUDA)
find_package(CUDA REQUIRED)
......@@ -6,36 +5,33 @@ if(ENABLE_CUDA)
set(CUDA_HOST_COMPILER ${CMAKE_CXX_COMPILER})
set(CUDA_PROPAGATE_HOST_FLAGS OFF)
add_definitions(-DENABLE_CUDA)
list(APPEND CUDA_NVCC_FLAGS -DENABLE_CUDA --std=c++${CMAKE_CXX_STANDARD} -Wno-deprecated-gpu-targets --ptxas-options=-v)
list(APPEND CUDA_NVCC_FLAGS_DEBUG --debug --generate-line-info -Xcompiler "-Wextra" --Werror all-warnings) # -Xcudafe "--diag_suppress=20012") # Do not use Xcompiler -Werror here as it prevents some kernels from execution
list(APPEND CUDA_NVCC_FLAGS_DEBUG -O2 -Xcompiler "-Wextra" --Werror all-warnings -Xcudafe "--diag_suppress=20012")
list(APPEND CUDA_NVCC_FLAGS_PROFILE --generate-line-info)
string(TOUPPER "${CMAKE_BUILD_TYPE}" uppercase_CMAKE_BUILD_TYPE)
if(uppercase_CMAKE_BUILD_TYPE MATCHES "RELEASE")
message(STATUS "Enabling device specific compilation as in RELEASE mode (arch=75,80)")
list(APPEND CUDA_NVCC_FLAGS -gencode=arch=compute_61,code=sm_61) # Titan X Pascal
list(APPEND CUDA_NVCC_FLAGS -gencode=arch=compute_75,code=sm_75) # GeForce 2080
list(APPEND CUDA_NVCC_FLAGS -gencode=arch=compute_80,code=sm_80) # A100
list(APPEND CUDA_NVCC_FLAGS_RELEASE -O3 -use_fast_math -restrict)
list(APPEND CUDA_NVCC_FLAGS_RELEASE -gencode=arch=compute_61,code=sm_61) # Titan X Pascal
list(APPEND CUDA_NVCC_FLAGS_RELEASE -gencode=arch=compute_75,code=sm_75) # GeForce 2080
list(APPEND CUDA_NVCC_FLAGS_RELEASE -gencode=arch=compute_80,code=sm_80) # A100
if(CUDA_VERSION GREATER_EQUAL 11.1)
message(STATUS "Enabling device specific (arch=86)")
list(APPEND CUDA_NVCC_FLAGS -gencode=arch=compute_86,code=sm_86) # GeForce 3090
endif()
list(APPEND CUDA_NVCC_FLAGS_RELEASE -gencode=arch=compute_86,code=sm_86) # GeForce 3090
endif(CUDA_VERSION GREATER_EQUAL 11.1)
if(CUDA_VERSION GREATER_EQUAL 11.8)
message(STATUS "Enabling device specific (arch=89)")
list(APPEND CUDA_NVCC_FLAGS -gencode=arch=compute_89,code=sm_89) # L40
endif()
endif(uppercase_CMAKE_BUILD_TYPE MATCHES "RELEASE")
message(STATUS "Used CUDA version ${CUDA_VERSION}")
if(uppercase_CMAKE_BUILD_TYPE MATCHES "CI")
message("Enabling device specific for CI system (arch=61)")
list(APPEND CUDA_NVCC_FLAGS -gencode arch=compute_61,code=sm_61) # Titan X Pascal
endif(uppercase_CMAKE_BUILD_TYPE MATCHES "CI")
list(APPEND CUDA_NVCC_FLAGS -O3 -use_fast_math -restrict)
list(APPEND CUDA_NVCC_FLAGS_RELEASE -gencode=arch=compute_89,code=sm_89) # L40
endif(CUDA_VERSION GREATER_EQUAL 11.8)
set(CMAKE_CXX_FLAGS "-DENABLE_CUDA ${CMAKE_CXX_FLAGS}")
message(STATUS "CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE_UPPER}")
if(CMAKE_BUILD_TYPE_UPPER STREQUAL "DEBUG")
set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} ${CUDA_NVCC_FLAGS_DEBUG}")
elseif(CMAKE_BUILD_TYPE_UPPER STREQUAL "RELEASE")
set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} ${CUDA_NVCC_FLAGS_RELEASE}")
elseif(CMAKE_BUILD_TYPE_UPPER STREQUAL "PROFILE")
set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} ${CUDA_NVCC_FLAGS_PROFILE}")
endif()
get_property(dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES)
add_definitions(-DUSE_NVTX)
......
if(ENABLE_benchmark)
if(ENABLE_BENCHMARK AND BUILD_SUBMODULES)
include(ExternalProject)
ExternalProject_Add(
googlebenchmark
......@@ -10,4 +10,6 @@ if(ENABLE_benchmark)
set(BENCHMARK_INCLUDE_DIR ${CMAKE_INSTALL_PREFIX}/include/)
set(BENCHMARK_LIBRARY_DIR ${CMAKE_INSTALL_PREFIX}/lib/)
set(BENCHMARK_LIBRARIES libbenchmark_main.a libbenchmark.a)
elseif(ENABLE_BENCHMARK)
message(STATUS "ENABLE_BENCHMARK but BUILD_SUBMODULES disabled, not installing googlebenchmark")
endif()
if(ENABLE_testing)
if(ENABLE_TESTING)
include(ExternalProject)
ExternalProject_Add(
googletest
......
......@@ -46,18 +46,7 @@ set(psrdada_cpp_inc
simple_file_writer.hpp
)
if (ENABLE_testing)
include_directories(${GTEST_INCLUDE_DIR})
link_directories(${GTEST_LIBRARY_DIR})
set(psrdada_cpp_testing_inc
testing_tools/clients.hpp
testing_tools/streams.hpp
testing_tools/tools.cuh)
set(PSRDADA_CPP_LIBRARIES ${CMAKE_PROJECT_NAME} ${DEPENDENCY_LIBRARIES} ${GTEST_LIBRARIES})
else()
set(PSRDADA_CPP_LIBRARIES ${CMAKE_PROJECT_NAME} ${DEPENDENCY_LIBRARIES})
endif()
# -- the main library target
add_library(${CMAKE_PROJECT_NAME} ${psrdada_cpp_src})
......@@ -102,29 +91,31 @@ install (TARGETS ${CMAKE_PROJECT_NAME}
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib)
install(FILES ${psrdada_cpp_inc} DESTINATION include/psrdada_cpp)
if(ENABLE_testing)
# Install testing tools if testing is enabled
if(ENABLE_TESTING)
include_directories(${GTEST_INCLUDE_DIR})
link_directories(${GTEST_LIBRARY_DIR})
set(psrdada_cpp_testing_inc
testing_tools/clients.hpp
testing_tools/streams.hpp
testing_tools/tools.cuh)
set(PSRDADA_CPP_LIBRARIES ${PSRDADA_CPP_LIBRARIES} ${GTEST_LIBRARIES})
install(FILES ${psrdada_cpp_testing_inc} DESTINATION include/psrdada_cpp/testing_tools)
endif()
# Install submodules
if(BUILD_SUBMODULES)
add_subdirectory(common)
if(BUILD_gated_spectrometer)
add_subdirectory(gated_spectrometer)
endif()
if(BUILD_fft_spectrometer)
add_subdirectory(fft_spectrometer)
endif()
if(BUILD_rs_spectrometer)
add_subdirectory(rs_spectrometer)
endif()
if(BUILD_edd_merge)
add_subdirectory(merger)
endif()
message(STATUS "commands ${BENCHMARK_COMMANDS}")
# Add benchmark binaries here to get executed with make benchmark
if(ENABLE_benchmark)
if(ENABLE_BENCHMARK AND BUILD_SUBMODULES)
add_custom_target(benchmark
COMMAND gspectrometer_benchmark --benchmark_counters_tabular=true
COMMAND merger_benchmark --benchmark_counters_tabular=true
......
......@@ -25,7 +25,7 @@ install (TARGETS ${CMAKE_PROJECT_NAME}_common
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib)
if (ENABLE_testing)
if (ENABLE_TESTING)
add_subdirectory(test)
endif()
endif(ENABLE_CUDA)
......
......@@ -11,4 +11,5 @@ set(gtest_common
cuda_add_executable(gtest_common ${gtest_common} )
target_link_libraries(gtest_common ${PSRDADA_CPP_LIBRARIES} ${GTEST_LIBRARIES})
add_dependencies(gtest_common googletest)
add_test(gtest_common gtest_common --test_data "${CMAKE_CURRENT_LIST_DIR}/data")
......@@ -30,7 +30,7 @@ cuda_add_executable(fft_spectrometer cli/fft_spectrometer_cli.cu)
target_link_libraries(fft_spectrometer ${PSRDADA_CPP_GS_LIBRARIES})
install(TARGETS fft_spectrometer DESTINATION bin)
if (ENABLE_testing)
if (ENABLE_TESTING)
add_subdirectory(test)
endif()
......
......@@ -8,5 +8,6 @@ set(gtest_fftspectrometer
)
cuda_add_executable(gtest_fftspectrometer ${gtest_fftspectrometer} )
add_dependencies(gtest_fftspectrometer googletest)
target_link_libraries(gtest_fftspectrometer ${PSRDADA_CPP_GS_LIBRARIES} ${PSRDADA_CPP_LIBRARIES} ${GTEST_LIBRARIES})
add_test(gtest_fftspectrometer gtest_fftspectrometer --test_data "${CMAKE_CURRENT_LIST_DIR}/data")
......@@ -36,10 +36,10 @@ cuda_add_executable(gated_spectrometer cli/gated_spectrometer_cli.cu)
target_link_libraries(gated_spectrometer ${PSRDADA_CPP_GS_LIBRARIES})
install(TARGETS gated_spectrometer DESTINATION bin)
if (ENABLE_testing)
if (ENABLE_TESTING)
add_subdirectory(test)
endif()
if (ENABLE_benchmark)
if (ENABLE_BENCHMARK)
add_subdirectory(benchmark)
endif()
......
......@@ -9,5 +9,6 @@ set(gtest_gspectrometer
)
cuda_add_executable(gtest_gspectrometer ${gtest_gspectrometer} )
add_dependencies(gtest_gspectrometer googletest)
target_link_libraries(gtest_gspectrometer ${PSRDADA_CPP_GS_LIBRARIES} ${PSRDADA_CPP_LIBRARIES} ${GTEST_LIBRARIES})
add_test(gtest_gspectrometer gtest_gspectrometer --test_data "${CMAKE_CURRENT_LIST_DIR}/data")
......@@ -36,9 +36,9 @@ add_executable(edd_merge cli/poln_merge_cli.cpp)
target_link_libraries(edd_merge ${PSRDADA_CPP_MERGE_LIBRARIES})
install(TARGETS edd_merge DESTINATION bin)
if (ENABLE_testing)
if (ENABLE_TESTING)
add_subdirectory(test)
endif()
if (ENABLE_benchmark)
if (ENABLE_BENCHMARK)
add_subdirectory(benchmark)
endif()
\ No newline at end of file
......@@ -10,4 +10,5 @@ set(gtest_edd_merge
add_executable(gtest_edd_merge ${gtest_edd_merge} )
target_link_libraries(gtest_edd_merge ${PSRDADA_CPP_MERGE_LIBRARIES} ${PSRDADA_CPP_LIBRARIES} ${GTEST_LIBRARIES})
add_dependencies(gtest_edd_merge googletest)
add_test(gtest_edd_merge gtest_edd_merge --test_data "${CMAKE_CURRENT_LIST_DIR}/data")
......@@ -31,7 +31,7 @@ cuda_add_executable(rs_spectrometer cli/rs_spectrometer_cli.cu)
target_link_libraries(rs_spectrometer ${PSRDADA_CPP_GS_LIBRARIES})
install(TARGETS rs_spectrometer DESTINATION bin)
if (ENABLE_testing)
if (ENABLE_TESTING)
add_subdirectory(test)
endif()
endif(ENABLE_CUDA)
\ No newline at end of file
......@@ -8,4 +8,5 @@ set(gtest_rs_spectrometer
cuda_add_executable(gtest_rs_spectrometer ${gtest_rs_spectrometer} )
target_link_libraries(gtest_rs_spectrometer ${PSRDADA_CPP_GS_LIBRARIES} ${PSRDADA_CPP_LIBRARIES} ${GTEST_LIBRARIES})
add_dependencies(gtest_rs_spectrometer googletest)
add_test(gtest_rs_spectrometer gtest_rs_spectrometer --test_data "${CMAKE_CURRENT_LIST_DIR}/data")
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment