1cmake_minimum_required(VERSION 3.13.4) 2 3option(ACXXEL_ENABLE_UNIT_TESTS "enable acxxel unit tests" ON) 4option(ACXXEL_ENABLE_MULTI_DEVICE_UNIT_TESTS "enable acxxel multi-device unit tests" OFF) 5option(ACXXEL_ENABLE_EXAMPLES "enable acxxel examples" OFF) 6option(ACXXEL_ENABLE_DOXYGEN "enable Doxygen for acxxel" OFF) 7option(ACXXEL_ENABLE_CUDA "enable CUDA for acxxel" ON) 8option(ACXXEL_ENABLE_OPENCL "enable OpenCL for acxxel" ON) 9 10project(acxxel) 11 12if(ACXXEL_ENABLE_CUDA) 13find_package(CUDA REQUIRED) 14include_directories(${CUDA_INCLUDE_DIRS}) 15find_library(CUDA_DRIVER_LIBRARY cuda) 16if(NOT CUDA_DRIVER_LIBRARY) 17 message(FATAL_ERROR "could not find libcuda, is the CUDA driver installed on your system?") 18endif(NOT CUDA_DRIVER_LIBRARY) 19set(ACXXEL_CUDA_SOURCES cuda_acxxel.cpp) 20set(ACXXEL_CUDA_LIBRARIES ${CUDA_DRIVER_LIBRARY} ${CUDA_LIBRARIES}) 21endif(ACXXEL_ENABLE_CUDA) 22 23if(ACXXEL_ENABLE_OPENCL) 24find_package(OpenCL REQUIRED) 25include_directories(${OpenCL_INCLUDE_DIRS}) 26set(ACXXEL_OPENCL_SOURCES opencl_acxxel.cpp) 27set(ACXXEL_OPENCL_LIBRARIES ${OpenCL_LIBRARIES}) 28endif() 29 30configure_file(config.h.in config.h) 31include_directories(${CMAKE_CURRENT_BINARY_DIR}) 32 33# Insist on C++ 11 features. 34set(CMAKE_CXX_STANDARD 11) 35set(CMAKE_CXX_STANDARD_REQUIRED ON) 36 37# Add warning flags. 38set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra") 39if (CXX_SUPPORTS_SUGGEST_OVERRIDE_FLAG) 40 add_compile_options("-Wno-suggest-override") 41endif() 42 43add_library( 44 acxxel 45 acxxel.cpp 46 ${ACXXEL_CUDA_SOURCES} 47 ${ACXXEL_OPENCL_SOURCES}) 48target_link_libraries( 49 acxxel 50 ${ACXXEL_CUDA_LIBRARIES} 51 ${ACXXEL_OPENCL_LIBRARIES}) 52 53include_directories(${CMAKE_CURRENT_SOURCE_DIR}) 54 55if(ACXXEL_ENABLE_EXAMPLES) 56 add_subdirectory(examples) 57endif() 58 59if(ACXXEL_ENABLE_UNIT_TESTS) 60 enable_testing() 61 find_package(GTest REQUIRED) 62 include_directories(${GTEST_INCLUDE_DIRS}) 63 find_package(Threads) 64 add_subdirectory(tests) 65endif() 66 67if(ACXXEL_ENABLE_DOXYGEN) 68 find_package(Doxygen REQUIRED) 69 configure_file(Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY) 70 add_custom_target( 71 acxxel-doc 72 ${DOXYGEN_EXECUTABLE} 73 ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile 74 WORKING_DIRECTORY 75 ${CMAKE_CURRENT_BINARY_DIR} 76 COMMENT 77 "Generating acxxel API documentation with Doxygen" 78 VERBATIM) 79endif() 80