mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-04-19 16:19:37 +08:00
Update FindComputeCpp.cmake to fix build problems on Windows
- Use standard types in SYCL/PacketMath.h to avoid compilation problems on Windows - Add EIGEN_HAS_CONSTEXPR to cxx11_tensor_argmax_sycl.cpp to fix build problems on Windows
This commit is contained in:
parent
3ce18d3c8f
commit
1fcaaf460f
@ -514,11 +514,11 @@ SYCL_PCMP(eq, cl::sycl::cl_double2)
|
|||||||
template <typename T> struct convert_to_integer;
|
template <typename T> struct convert_to_integer;
|
||||||
|
|
||||||
template <> struct convert_to_integer<float> {
|
template <> struct convert_to_integer<float> {
|
||||||
using type = int;
|
using type = std::int32_t;
|
||||||
using packet_type = cl::sycl::cl_int4;
|
using packet_type = cl::sycl::cl_int4;
|
||||||
};
|
};
|
||||||
template <> struct convert_to_integer<double> {
|
template <> struct convert_to_integer<double> {
|
||||||
using type = long;
|
using type = std::int64_t;
|
||||||
using packet_type = cl::sycl::cl_long2;
|
using packet_type = cl::sycl::cl_long2;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
50
cmake/ComputeCppCompilerChecks.cmake
Normal file
50
cmake/ComputeCppCompilerChecks.cmake
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
cmake_minimum_required(VERSION 3.4.3)
|
||||||
|
|
||||||
|
if(CMAKE_COMPILER_IS_GNUCXX)
|
||||||
|
if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.8)
|
||||||
|
message(FATAL_ERROR "host compiler - gcc version must be > 4.8")
|
||||||
|
endif()
|
||||||
|
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
||||||
|
if (${CMAKE_CXX_COMPILER_VERSION} VERSION_LESS 3.6)
|
||||||
|
message(FATAL_ERROR "host compiler - clang version must be > 3.6")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(MSVC)
|
||||||
|
set(ComputeCpp_STL_CHECK_SRC __STL_check)
|
||||||
|
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/${ComputeCpp_STL_CHECK_SRC}.cpp
|
||||||
|
"#include <ios>\n"
|
||||||
|
"int main() { return 0; }\n")
|
||||||
|
execute_process(
|
||||||
|
COMMAND ${ComputeCpp_DEVICE_COMPILER_EXECUTABLE}
|
||||||
|
${COMPUTECPP_DEVICE_COMPILER_FLAGS}
|
||||||
|
-isystem ${ComputeCpp_INCLUDE_DIRS}
|
||||||
|
-o ${ComputeCpp_STL_CHECK_SRC}.sycl
|
||||||
|
-c ${ComputeCpp_STL_CHECK_SRC}.cpp
|
||||||
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
||||||
|
RESULT_VARIABLE ComputeCpp_STL_CHECK_RESULT
|
||||||
|
ERROR_QUIET
|
||||||
|
OUTPUT_QUIET)
|
||||||
|
if(NOT ${ComputeCpp_STL_CHECK_RESULT} EQUAL 0)
|
||||||
|
# Try disabling compiler version checks
|
||||||
|
execute_process(
|
||||||
|
COMMAND ${ComputeCpp_DEVICE_COMPILER_EXECUTABLE}
|
||||||
|
${COMPUTECPP_DEVICE_COMPILER_FLAGS}
|
||||||
|
-D_ALLOW_COMPILER_AND_STL_VERSION_MISMATCH
|
||||||
|
-isystem ${ComputeCpp_INCLUDE_DIRS}
|
||||||
|
-o ${ComputeCpp_STL_CHECK_SRC}.cpp.sycl
|
||||||
|
-c ${ComputeCpp_STL_CHECK_SRC}.cpp
|
||||||
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
||||||
|
RESULT_VARIABLE ComputeCpp_STL_CHECK_RESULT
|
||||||
|
ERROR_QUIET
|
||||||
|
OUTPUT_QUIET)
|
||||||
|
if(NOT ${ComputeCpp_STL_CHECK_RESULT} EQUAL 0)
|
||||||
|
message(STATUS "Device compiler cannot consume hosted STL headers. Using any parts of the STL will likely result in device compiler errors.")
|
||||||
|
else()
|
||||||
|
message(STATUS "Device compiler does not meet certain STL version requirements. Disabling version checks and hoping for the best.")
|
||||||
|
list(APPEND COMPUTECPP_DEVICE_COMPILER_FLAGS -D_ALLOW_COMPILER_AND_STL_VERSION_MISMATCH)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/${ComputeCpp_STL_CHECK_SRC}.cpp
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/${ComputeCpp_STL_CHECK_SRC}.cpp.sycl)
|
||||||
|
endif(MSVC)
|
18
cmake/ComputeCppIRMap.cmake
Normal file
18
cmake/ComputeCppIRMap.cmake
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
cmake_minimum_required(VERSION 3.4.3)
|
||||||
|
|
||||||
|
# These should match the types of IR output by compute++
|
||||||
|
set(IR_MAP_spir bc)
|
||||||
|
set(IR_MAP_spir64 bc)
|
||||||
|
set(IR_MAP_spir32 bc)
|
||||||
|
set(IR_MAP_spirv spv)
|
||||||
|
set(IR_MAP_spirv64 spv)
|
||||||
|
set(IR_MAP_spirv32 spv)
|
||||||
|
set(IR_MAP_aorta-x86_64 o)
|
||||||
|
set(IR_MAP_aorta-aarch64 o)
|
||||||
|
set(IR_MAP_aorta-rcar-cve o)
|
||||||
|
set(IR_MAP_custom-spir64 bc)
|
||||||
|
set(IR_MAP_custom-spir32 bc)
|
||||||
|
set(IR_MAP_custom-spirv64 spv)
|
||||||
|
set(IR_MAP_custom-spirv32 spv)
|
||||||
|
set(IR_MAP_ptx64 s)
|
||||||
|
set(IR_MAP_amdgcn s)
|
@ -31,6 +31,7 @@
|
|||||||
|
|
||||||
cmake_minimum_required(VERSION 3.4.3)
|
cmake_minimum_required(VERSION 3.4.3)
|
||||||
include(FindPackageHandleStandardArgs)
|
include(FindPackageHandleStandardArgs)
|
||||||
|
include(ComputeCppIRMap)
|
||||||
|
|
||||||
set(COMPUTECPP_USER_FLAGS "" CACHE STRING "User flags for compute++")
|
set(COMPUTECPP_USER_FLAGS "" CACHE STRING "User flags for compute++")
|
||||||
separate_arguments(COMPUTECPP_USER_FLAGS)
|
separate_arguments(COMPUTECPP_USER_FLAGS)
|
||||||
@ -64,11 +65,13 @@ endif()
|
|||||||
|
|
||||||
find_program(ComputeCpp_DEVICE_COMPILER_EXECUTABLE compute++
|
find_program(ComputeCpp_DEVICE_COMPILER_EXECUTABLE compute++
|
||||||
HINTS ${computecpp_host_find_hint}
|
HINTS ${computecpp_host_find_hint}
|
||||||
PATH_SUFFIXES bin)
|
PATH_SUFFIXES bin
|
||||||
|
NO_SYSTEM_ENVIRONMENT_PATH)
|
||||||
|
|
||||||
find_program(ComputeCpp_INFO_EXECUTABLE computecpp_info
|
find_program(ComputeCpp_INFO_EXECUTABLE computecpp_info
|
||||||
HINTS ${computecpp_host_find_hint}
|
HINTS ${computecpp_host_find_hint}
|
||||||
PATH_SUFFIXES bin)
|
PATH_SUFFIXES bin
|
||||||
|
NO_SYSTEM_ENVIRONMENT_PATH)
|
||||||
|
|
||||||
find_library(COMPUTECPP_RUNTIME_LIBRARY
|
find_library(COMPUTECPP_RUNTIME_LIBRARY
|
||||||
NAMES ComputeCpp ComputeCpp_vs2015
|
NAMES ComputeCpp ComputeCpp_vs2015
|
||||||
@ -77,7 +80,7 @@ find_library(COMPUTECPP_RUNTIME_LIBRARY
|
|||||||
DOC "ComputeCpp Runtime Library")
|
DOC "ComputeCpp Runtime Library")
|
||||||
|
|
||||||
find_library(COMPUTECPP_RUNTIME_LIBRARY_DEBUG
|
find_library(COMPUTECPP_RUNTIME_LIBRARY_DEBUG
|
||||||
NAMES ComputeCpp ComputeCpp_vs2015_d
|
NAMES ComputeCpp_d ComputeCpp ComputeCpp_vs2015_d
|
||||||
HINTS ${computecpp_find_hint}
|
HINTS ${computecpp_find_hint}
|
||||||
PATH_SUFFIXES lib
|
PATH_SUFFIXES lib
|
||||||
DOC "ComputeCpp Debug Runtime Library")
|
DOC "ComputeCpp Debug Runtime Library")
|
||||||
@ -112,7 +115,7 @@ else()
|
|||||||
if (COMPUTECPP_PLATFORM_IS_SUPPORTED)
|
if (COMPUTECPP_PLATFORM_IS_SUPPORTED)
|
||||||
message(STATUS "platform - your system can support ComputeCpp")
|
message(STATUS "platform - your system can support ComputeCpp")
|
||||||
else()
|
else()
|
||||||
message(WARNING "platform - your system CANNOT support ComputeCpp")
|
message(STATUS "platform - your system is not officially supported")
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
@ -151,6 +154,8 @@ endif()
|
|||||||
list(APPEND COMPUTECPP_DEVICE_COMPILER_FLAGS -sycl-target ${COMPUTECPP_BITCODE})
|
list(APPEND COMPUTECPP_DEVICE_COMPILER_FLAGS -sycl-target ${COMPUTECPP_BITCODE})
|
||||||
message(STATUS "compute++ flags - ${COMPUTECPP_DEVICE_COMPILER_FLAGS}")
|
message(STATUS "compute++ flags - ${COMPUTECPP_DEVICE_COMPILER_FLAGS}")
|
||||||
|
|
||||||
|
include(ComputeCppCompilerChecks)
|
||||||
|
|
||||||
if(NOT TARGET OpenCL::OpenCL)
|
if(NOT TARGET OpenCL::OpenCL)
|
||||||
add_library(OpenCL::OpenCL UNKNOWN IMPORTED)
|
add_library(OpenCL::OpenCL UNKNOWN IMPORTED)
|
||||||
set_target_properties(OpenCL::OpenCL PROPERTIES
|
set_target_properties(OpenCL::OpenCL PROPERTIES
|
||||||
@ -163,7 +168,7 @@ if(NOT TARGET ComputeCpp::ComputeCpp)
|
|||||||
add_library(ComputeCpp::ComputeCpp UNKNOWN IMPORTED)
|
add_library(ComputeCpp::ComputeCpp UNKNOWN IMPORTED)
|
||||||
set_target_properties(ComputeCpp::ComputeCpp PROPERTIES
|
set_target_properties(ComputeCpp::ComputeCpp PROPERTIES
|
||||||
IMPORTED_LOCATION_DEBUG "${COMPUTECPP_RUNTIME_LIBRARY_DEBUG}"
|
IMPORTED_LOCATION_DEBUG "${COMPUTECPP_RUNTIME_LIBRARY_DEBUG}"
|
||||||
IMPORTED_LOCATION_RELWITHDEBINFO "${COMPUTECPP_RUNTIME_LIBRARY_DEBUG}"
|
IMPORTED_LOCATION_RELWITHDEBINFO "${COMPUTECPP_RUNTIME_LIBRARY}"
|
||||||
IMPORTED_LOCATION "${COMPUTECPP_RUNTIME_LIBRARY}"
|
IMPORTED_LOCATION "${COMPUTECPP_RUNTIME_LIBRARY}"
|
||||||
INTERFACE_INCLUDE_DIRECTORIES "${ComputeCpp_INCLUDE_DIRS}"
|
INTERFACE_INCLUDE_DIRECTORIES "${ComputeCpp_INCLUDE_DIRS}"
|
||||||
INTERFACE_LINK_LIBRARIES "OpenCL::OpenCL"
|
INTERFACE_LINK_LIBRARIES "OpenCL::OpenCL"
|
||||||
@ -200,7 +205,7 @@ define_property(
|
|||||||
####################
|
####################
|
||||||
#
|
#
|
||||||
# Adds a custom target for running compute++ and adding a dependency for the
|
# Adds a custom target for running compute++ and adding a dependency for the
|
||||||
# resulting integration header.
|
# resulting integration header and kernel binary.
|
||||||
#
|
#
|
||||||
# TARGET : Name of the target.
|
# TARGET : Name of the target.
|
||||||
# SOURCE : Source file to be compiled.
|
# SOURCE : Source file to be compiled.
|
||||||
@ -230,6 +235,7 @@ function(__build_ir)
|
|||||||
# using the same source file will be generated with a different rule.
|
# using the same source file will be generated with a different rule.
|
||||||
set(baseSyclName ${CMAKE_CURRENT_BINARY_DIR}/${SDK_BUILD_IR_TARGET}_${sourceFileName})
|
set(baseSyclName ${CMAKE_CURRENT_BINARY_DIR}/${SDK_BUILD_IR_TARGET}_${sourceFileName})
|
||||||
set(outputSyclFile ${baseSyclName}.sycl)
|
set(outputSyclFile ${baseSyclName}.sycl)
|
||||||
|
set(outputDeviceFile ${baseSyclName}.${IR_MAP_${COMPUTECPP_BITCODE}})
|
||||||
set(depFileName ${baseSyclName}.sycl.d)
|
set(depFileName ${baseSyclName}.sycl.d)
|
||||||
|
|
||||||
set(include_directories "$<TARGET_PROPERTY:${SDK_BUILD_IR_TARGET},INCLUDE_DIRECTORIES>")
|
set(include_directories "$<TARGET_PROPERTY:${SDK_BUILD_IR_TARGET},INCLUDE_DIRECTORIES>")
|
||||||
@ -273,7 +279,9 @@ function(__build_ir)
|
|||||||
get_target_property(target_libraries ${SDK_BUILD_IR_TARGET} LINK_LIBRARIES)
|
get_target_property(target_libraries ${SDK_BUILD_IR_TARGET} LINK_LIBRARIES)
|
||||||
if(target_libraries)
|
if(target_libraries)
|
||||||
foreach(library ${target_libraries})
|
foreach(library ${target_libraries})
|
||||||
list(APPEND ir_dependencies ${library})
|
if(TARGET ${library})
|
||||||
|
list(APPEND ir_dependencies ${library})
|
||||||
|
endif()
|
||||||
endforeach()
|
endforeach()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@ -281,19 +289,20 @@ function(__build_ir)
|
|||||||
# CMake throws an error if it is unsupported by the generator (i. e. not ninja)
|
# CMake throws an error if it is unsupported by the generator (i. e. not ninja)
|
||||||
if((NOT CMAKE_VERSION VERSION_LESS 3.7.0) AND
|
if((NOT CMAKE_VERSION VERSION_LESS 3.7.0) AND
|
||||||
CMAKE_GENERATOR MATCHES "Ninja")
|
CMAKE_GENERATOR MATCHES "Ninja")
|
||||||
file(RELATIVE_PATH relOutputFile ${CMAKE_BINARY_DIR} ${outputSyclFile})
|
file(RELATIVE_PATH relOutputFile ${CMAKE_BINARY_DIR} ${outputDeviceFile})
|
||||||
set(generate_depfile -MMD -MF ${depFileName} -MT ${relOutputFile})
|
set(generate_depfile -MMD -MF ${depFileName} -MT ${relOutputFile})
|
||||||
set(enable_depfile DEPFILE ${depFileName})
|
set(enable_depfile DEPFILE ${depFileName})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Add custom command for running compute++
|
# Add custom command for running compute++
|
||||||
add_custom_command(
|
add_custom_command(
|
||||||
OUTPUT ${outputSyclFile}
|
OUTPUT ${outputDeviceFile} ${outputSyclFile}
|
||||||
COMMAND ${ComputeCpp_DEVICE_COMPILER_EXECUTABLE}
|
COMMAND ${ComputeCpp_DEVICE_COMPILER_EXECUTABLE}
|
||||||
${COMPUTECPP_DEVICE_COMPILER_FLAGS}
|
${COMPUTECPP_DEVICE_COMPILER_FLAGS}
|
||||||
${generated_include_directories}
|
${generated_include_directories}
|
||||||
${generated_compile_definitions}
|
${generated_compile_definitions}
|
||||||
-o ${outputSyclFile}
|
-sycl-ih ${outputSyclFile}
|
||||||
|
-o ${outputDeviceFile}
|
||||||
-c ${SDK_BUILD_IR_SOURCE}
|
-c ${SDK_BUILD_IR_SOURCE}
|
||||||
${generate_depfile}
|
${generate_depfile}
|
||||||
DEPENDS ${ir_dependencies}
|
DEPENDS ${ir_dependencies}
|
||||||
@ -308,7 +317,7 @@ function(__build_ir)
|
|||||||
|
|
||||||
if(NOT MSVC)
|
if(NOT MSVC)
|
||||||
# Add a custom target for the generated integration header
|
# Add a custom target for the generated integration header
|
||||||
add_custom_target(${headerTargetName} DEPENDS ${outputSyclFile})
|
add_custom_target(${headerTargetName} DEPENDS ${outputDeviceFile} ${outputSyclFile})
|
||||||
add_dependencies(${SDK_BUILD_IR_TARGET} ${headerTargetName})
|
add_dependencies(${SDK_BUILD_IR_TARGET} ${headerTargetName})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@ -392,6 +401,8 @@ function(add_sycl_to_target)
|
|||||||
${ARGN}
|
${ARGN}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
set_target_properties(${SDK_ADD_SYCL_TARGET} PROPERTIES LINKER_LANGUAGE CXX)
|
||||||
|
|
||||||
# If the CXX compiler is set to compute++ enable the driver.
|
# If the CXX compiler is set to compute++ enable the driver.
|
||||||
get_filename_component(cmakeCxxCompilerFileName "${CMAKE_CXX_COMPILER}" NAME)
|
get_filename_component(cmakeCxxCompilerFileName "${CMAKE_CXX_COMPILER}" NAME)
|
||||||
if("${cmakeCxxCompilerFileName}" STREQUAL "compute++")
|
if("${cmakeCxxCompilerFileName}" STREQUAL "compute++")
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
#define EIGEN_DEFAULT_DENSE_INDEX_TYPE int64_t
|
#define EIGEN_DEFAULT_DENSE_INDEX_TYPE int64_t
|
||||||
#define EIGEN_USE_SYCL
|
#define EIGEN_USE_SYCL
|
||||||
|
#define EIGEN_HAS_CONSTEXPR 1
|
||||||
|
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user