aboutsummaryrefslogtreecommitdiffhomepage
path: root/cmake
diff options
context:
space:
mode:
authorGravatar Duncan McBain <duncan@codeplay.com>2017-05-24 12:24:21 +0100
committerGravatar Duncan McBain <duncan@codeplay.com>2017-05-24 12:24:21 +0100
commit0cb3c7c7dd46d318921b5e140afc73fded87b068 (patch)
treed5c5d4e9120b1e2a2340afb3055a7727ae5145ba /cmake
parent615733381ec4b5a073d0a4c72e3cc749d3c5d579 (diff)
Update FindComputeCpp.cmake with new changes from SDK
Diffstat (limited to 'cmake')
-rw-r--r--cmake/FindComputeCpp.cmake49
1 files changed, 34 insertions, 15 deletions
diff --git a/cmake/FindComputeCpp.cmake b/cmake/FindComputeCpp.cmake
index 90222ed0e..e61dedc46 100644
--- a/cmake/FindComputeCpp.cmake
+++ b/cmake/FindComputeCpp.cmake
@@ -38,11 +38,6 @@ if(CMAKE_COMPILER_IS_GNUCXX)
if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.8)
message(FATAL_ERROR
"host compiler - Not found! (gcc version must be at least 4.8)")
- # Require the GCC dual ABI to be disabled for 5.1 or higher
- elseif (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 5.1)
- set(COMPUTECPP_DISABLE_GCC_DUAL_ABI "True")
- message(STATUS
- "host compiler - gcc ${CMAKE_CXX_COMPILER_VERSION} (note pre 5.1 gcc ABI enabled)")
else()
message(STATUS "host compiler - gcc ${CMAKE_CXX_COMPILER_VERSION}")
endif()
@@ -64,6 +59,12 @@ option(COMPUTECPP_64_BIT_CODE "Compile device code in 64 bit mode"
${COMPUTECPP_64_BIT_DEFAULT})
mark_as_advanced(COMPUTECPP_64_BIT_CODE)
+option(COMPUTECPP_DISABLE_GCC_DUAL_ABI "Compile with pre-5.1 ABI" OFF)
+mark_as_advanced(COMPUTECPP_DISABLE_GCC_DUAL_ABI)
+
+set(COMPUTECPP_USER_FLAGS "" CACHE STRING "User flags for compute++")
+mark_as_advanced(COMPUTECPP_USER_FLAGS)
+
# Find OpenCL package
find_package(OpenCL REQUIRED)
@@ -74,7 +75,6 @@ if(NOT COMPUTECPP_PACKAGE_ROOT_DIR)
else()
message(STATUS "ComputeCpp package - Found")
endif()
-option(COMPUTECPP_PACKAGE_ROOT_DIR "Path to the ComputeCpp Package")
# Obtain the path to compute++
find_program(COMPUTECPP_DEVICE_COMPILER compute++ PATHS
@@ -138,8 +138,6 @@ else()
message(STATUS "compute++ flags - ${COMPUTECPP_DEVICE_COMPILER_FLAGS}")
endif()
-set(COMPUTECPP_DEVICE_COMPILER_FLAGS ${COMPUTECPP_DEVICE_COMPILER_FLAGS} -sycl-compress-name -Wall -no-serial-memop -DEIGEN_NO_ASSERTION_CHECKING=1)
-
# Check if the platform is supported
execute_process(COMMAND ${COMPUTECPP_INFO_TOOL} "--dump-is-supported"
OUTPUT_VARIABLE COMPUTECPP_PLATFORM_IS_SUPPORTED
@@ -155,6 +153,13 @@ else()
endif()
endif()
+set(COMPUTECPP_USER_FLAGS
+ -sycl-compress-name
+ -Wall
+ -no-serial-memop
+ -DEIGEN_NO_ASSERTION_CHECKING=1
+ )
+
####################
# __build_sycl
####################
@@ -165,8 +170,11 @@ endif()
# targetName : Name of the target.
# sourceFile : Source file to be compiled.
# binaryDir : Intermediate directory to output the integration header.
+# fileCounter : Counter included in name of custom target. Different counter
+# values prevent duplicated names of custom target when source files with the same name,
+# but located in different directories, are used for the same target.
#
-function(__build_spir targetName sourceFile binaryDir)
+function(__build_spir targetName sourceFile binaryDir fileCounter)
# Retrieve source file name.
get_filename_component(sourceFileName ${sourceFile} NAME)
@@ -175,12 +183,16 @@ function(__build_spir targetName sourceFile binaryDir)
set(outputSyclFile ${binaryDir}/${sourceFileName}.sycl)
# Add any user-defined include to the device compiler
+ set(device_compiler_includes "")
get_property(includeDirectories DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY
INCLUDE_DIRECTORIES)
- set(device_compiler_includes "")
foreach(directory ${includeDirectories})
set(device_compiler_includes "-I${directory}" ${device_compiler_includes})
endforeach()
+ get_target_property(targetIncludeDirectories ${targetName} INCLUDE_DIRECTORIES)
+ foreach(directory ${targetIncludeDirectories})
+ set(device_compiler_includes "-I${directory}" ${device_compiler_includes})
+ endforeach()
if (CMAKE_INCLUDE_PATH)
foreach(directory ${CMAKE_INCLUDE_PATH})
set(device_compiler_includes "-I${directory}"
@@ -188,6 +200,9 @@ function(__build_spir targetName sourceFile binaryDir)
endforeach()
endif()
+ set(COMPUTECPP_DEVICE_COMPILER_FLAGS
+ ${COMPUTECPP_DEVICE_COMPILER_FLAGS}
+ ${COMPUTECPP_USER_FLAGS})
# Convert argument list format
separate_arguments(COMPUTECPP_DEVICE_COMPILER_FLAGS)
@@ -204,7 +219,7 @@ function(__build_spir targetName sourceFile binaryDir)
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${sourceFile}
IMPLICIT_DEPENDS CXX "${CMAKE_CURRENT_SOURCE_DIR}/${sourceFile}"
WORKING_DIRECTORY ${binaryDir}
- COMMENT "Building ComputeCpp integration header file ${outputSyclFile}")
+ COMMENT "Building ComputeCpp integration header file ${outputSyclFile}")
# Add a custom target for the generated integration header
add_custom_target(${targetName}_integration_header DEPENDS ${outputSyclFile})
@@ -231,17 +246,21 @@ endfunction()
# target and sets a dependancy on that new command.
#
# 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.
+# sourceFiles : Source files to be compiled for SYCL.
#
-function(add_sycl_to_target targetName binaryDir sourceFile)
+function(add_sycl_to_target targetName binaryDir sourceFiles)
set(sourceFiles ${sourceFiles} ${ARGN})
+ set(fileCounter 0)
# Add custom target to run compute++ and generate the integration header
- __build_spir(${targetName} ${sourceFile} ${binaryDir})
+ foreach(sourceFile ${sourceFiles})
+ __build_spir(${targetName} ${sourceFile} ${binaryDir} ${fileCounter})
+ MATH(EXPR fileCounter "${fileCounter} + 1")
+ endforeach()
# Link with the ComputeCpp runtime library
target_link_libraries(${targetName} PUBLIC ${COMPUTECPP_RUNTIME_LIBRARY}
PUBLIC ${OpenCL_LIBRARIES})
-endfunction(add_sycl_to_target) \ No newline at end of file
+endfunction(add_sycl_to_target)