| cmake_minimum_required(VERSION 3.1) |
| |
| option(ACXXEL_ENABLE_UNIT_TESTS "enable acxxel unit tests" ON) |
| option(ACXXEL_ENABLE_MULTI_DEVICE_UNIT_TESTS "enable acxxel multi-device unit tests" OFF) |
| option(ACXXEL_ENABLE_EXAMPLES "enable acxxel examples" OFF) |
| option(ACXXEL_ENABLE_DOXYGEN "enable Doxygen for acxxel" OFF) |
| option(ACXXEL_ENABLE_CUDA "enable CUDA for acxxel" ON) |
| option(ACXXEL_ENABLE_OPENCL "enable OpenCL for acxxel" ON) |
| |
| project(acxxel) |
| |
| if(ACXXEL_ENABLE_CUDA) |
| find_package(CUDA REQUIRED) |
| include_directories(${CUDA_INCLUDE_DIRS}) |
| find_library(CUDA_DRIVER_LIBRARY cuda) |
| if(NOT CUDA_DRIVER_LIBRARY) |
| message(FATAL_ERROR "could not find libcuda, is the CUDA driver installed on your system?") |
| endif(NOT CUDA_DRIVER_LIBRARY) |
| set(ACXXEL_CUDA_SOURCES cuda_acxxel.cpp) |
| set(ACXXEL_CUDA_LIBRARIES ${CUDA_DRIVER_LIBRARY} ${CUDA_LIBRARIES}) |
| endif(ACXXEL_ENABLE_CUDA) |
| |
| if(ACXXEL_ENABLE_OPENCL) |
| find_package(OpenCL REQUIRED) |
| include_directories(${OpenCL_INCLUDE_DIRS}) |
| set(ACXXEL_OPENCL_SOURCES opencl_acxxel.cpp) |
| set(ACXXEL_OPENCL_LIBRARIES ${OpenCL_LIBRARIES}) |
| endif() |
| |
| configure_file(config.h.in config.h) |
| include_directories(${CMAKE_CURRENT_BINARY_DIR}) |
| |
| # Insist on C++ 11 features. |
| set(CMAKE_CXX_STANDARD 11) |
| set(CMAKE_CXX_STANDARD_REQUIRED ON) |
| |
| # Add warning flags. |
| set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra") |
| |
| add_library( |
| acxxel |
| acxxel.cpp |
| ${ACXXEL_CUDA_SOURCES} |
| ${ACXXEL_OPENCL_SOURCES}) |
| target_link_libraries( |
| acxxel |
| ${ACXXEL_CUDA_LIBRARIES} |
| ${ACXXEL_OPENCL_LIBRARIES}) |
| |
| include_directories(${CMAKE_CURRENT_SOURCE_DIR}) |
| |
| if(ACXXEL_ENABLE_EXAMPLES) |
| add_subdirectory(examples) |
| endif() |
| |
| if(ACXXEL_ENABLE_UNIT_TESTS) |
| enable_testing() |
| find_package(GTest REQUIRED) |
| include_directories(${GTEST_INCLUDE_DIRS}) |
| find_package(Threads) |
| add_subdirectory(tests) |
| endif() |
| |
| if(ACXXEL_ENABLE_DOXYGEN) |
| find_package(Doxygen REQUIRED) |
| configure_file(Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY) |
| add_custom_target( |
| acxxel-doc |
| ${DOXYGEN_EXECUTABLE} |
| ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile |
| WORKING_DIRECTORY |
| ${CMAKE_CURRENT_BINARY_DIR} |
| COMMENT |
| "Generating acxxel API documentation with Doxygen" |
| VERBATIM) |
| endif() |