#.rst: # FindTriSYCL #--------------- # # TODO : insert Copyright and licence ######################### # FindTriSYCL.cmake ######################### # # Tools for finding and building with TriSYCL. # # User must define TRISYCL_INCLUDE_DIR pointing to the triSYCL # include directory. # # Latest version of this file can be found at: # https://github.com/triSYCL/triSYCL # Requite CMake version 3.5 or higher cmake_minimum_required (VERSION 3.5) # Check that a supported host compiler can be found if(CMAKE_COMPILER_IS_GNUCXX) # Require at least gcc 5.4 if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.4) message(FATAL_ERROR "host compiler - Not found! (gcc version must be at least 5.4)") else() message(STATUS "host compiler - gcc ${CMAKE_CXX_COMPILER_VERSION}") endif() elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") # Require at least clang 3.9 if (${CMAKE_CXX_COMPILER_VERSION} VERSION_LESS 3.9) message(FATAL_ERROR "host compiler - Not found! (clang version must be at least 3.9)") else() message(STATUS "host compiler - clang ${CMAKE_CXX_COMPILER_VERSION}") endif() else() message(WARNING "host compiler - Not found! (triSYCL supports GCC and Clang)") endif() #triSYCL options option(TRISYCL_OPENMP "triSYCL multi-threading with OpenMP" ON) option(TRISYCL_OPENCL "triSYCL OpenCL interoperability mode" OFF) option(TRISYCL_NO_ASYNC "triSYCL use synchronous kernel execution" OFF) option(TRISYCL_DEBUG "triSCYL use debug mode" OFF) option(TRISYCL_DEBUG_STRUCTORS "triSYCL trace of object lifetimes" OFF) option(TRISYCL_TRACE_KERNEL "triSYCL trace of kernel execution" OFF) mark_as_advanced(TRISYCL_OPENMP) mark_as_advanced(TRISYCL_OPENCL) mark_as_advanced(TRISYCL_NO_ASYNC) mark_as_advanced(TRISYCL_DEBUG) mark_as_advanced(TRISYCL_DEBUG_STRUCTORS) mark_as_advanced(TRISYCL_TRACE_KERNEL) #triSYCL definitions set(CL_SYCL_LANGUAGE_VERSION 220 CACHE VERSION "Host language version to be used by trisYCL (default is: 220)") set(TRISYCL_CL_LANGUAGE_VERSION 220 CACHE VERSION "Device language version to be used by trisYCL (default is: 220)") #set(TRISYCL_COMPILE_OPTIONS "-std=c++1z -Wall -Wextra") set(CMAKE_CXX_STANDARD 14) set(CXX_STANDARD_REQUIRED ON) # Find OpenCL package if(TRISYCL_OPENCL) find_package(OpenCL REQUIRED) if(UNIX) set(BOOST_COMPUTE_INCPATH /usr/include/compute CACHE PATH "Path to Boost.Compute headers (default is: /usr/include/compute)") endif() endif() # Find OpenMP package if(TRISYCL_OPENMP) find_package(OpenMP REQUIRED) endif() # Find Boost find_package(Boost 1.58 REQUIRED COMPONENTS chrono log) # If debug or trace we need boost log if(TRISYCL_DEBUG OR TRISYCL_DEBUG_STRUCTORS OR TRISYCL_TRACE_KERNEL) set(LOG_NEEDED ON) else() set(LOG_NEEDED OFF) endif() find_package(Threads REQUIRED) # Find triSYCL directory if(NOT TRISYCL_INCLUDE_DIR) message(FATAL_ERROR "triSYCL include directory - Not found! (please set TRISYCL_INCLUDE_DIR") else() message(STATUS "triSYCL include directory - Found ${TRISYCL_INCLUDE_DIR}") endif() ####################### # add_sycl_to_target ####################### # # Sets the proper flags and includes for the target compilation. # # targetName : Name of the target to add a SYCL to. # sourceFile : Source file to be compiled for SYCL. # binaryDir : Intermediate directory to output the integration header. # function(add_sycl_to_target targetName sourceFile binaryDir) # Add include directories to the "#include <>" paths target_include_directories (${targetName} PUBLIC ${TRISYCL_INCLUDE_DIR} ${Boost_INCLUDE_DIRS} $<$:${OpenCL_INCLUDE_DIRS}> $<$:${BOOST_COMPUTE_INCPATH}>) # Link dependencies target_link_libraries(${targetName} PUBLIC $<$:${OpenCL_LIBRARIES}> Threads::Threads $<$:Boost::log> Boost::chrono) # Compile definitions target_compile_definitions(${targetName} PUBLIC $<$:TRISYCL_NO_ASYNC> $<$:TRISYCL_OPENCL> $<$:TRISYCL_DEBUG> $<$:TRISYCL_DEBUG_STRUCTORS> $<$:TRISYCL_TRACE_KERNEL> $<$:BOOST_LOG_DYN_LINK>) # C++ and OpenMP requirements target_compile_options(${targetName} PUBLIC ${TRISYCL_COMPILE_OPTIONS} $<$:${OpenMP_CXX_FLAGS}>) if(${TRISYCL_OPENMP} AND (NOT WIN32)) # Does not support generator expressions set_target_properties(${targetName} PROPERTIES LINK_FLAGS ${OpenMP_CXX_FLAGS}) endif() endfunction()