mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-04-18 15:49: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 <> struct convert_to_integer<float> {
|
||||
using type = int;
|
||||
using type = std::int32_t;
|
||||
using packet_type = cl::sycl::cl_int4;
|
||||
};
|
||||
template <> struct convert_to_integer<double> {
|
||||
using type = long;
|
||||
using type = std::int64_t;
|
||||
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)
|
||||
include(FindPackageHandleStandardArgs)
|
||||
include(ComputeCppIRMap)
|
||||
|
||||
set(COMPUTECPP_USER_FLAGS "" CACHE STRING "User flags for compute++")
|
||||
separate_arguments(COMPUTECPP_USER_FLAGS)
|
||||
@ -64,11 +65,13 @@ endif()
|
||||
|
||||
find_program(ComputeCpp_DEVICE_COMPILER_EXECUTABLE compute++
|
||||
HINTS ${computecpp_host_find_hint}
|
||||
PATH_SUFFIXES bin)
|
||||
PATH_SUFFIXES bin
|
||||
NO_SYSTEM_ENVIRONMENT_PATH)
|
||||
|
||||
find_program(ComputeCpp_INFO_EXECUTABLE computecpp_info
|
||||
HINTS ${computecpp_host_find_hint}
|
||||
PATH_SUFFIXES bin)
|
||||
PATH_SUFFIXES bin
|
||||
NO_SYSTEM_ENVIRONMENT_PATH)
|
||||
|
||||
find_library(COMPUTECPP_RUNTIME_LIBRARY
|
||||
NAMES ComputeCpp ComputeCpp_vs2015
|
||||
@ -77,7 +80,7 @@ find_library(COMPUTECPP_RUNTIME_LIBRARY
|
||||
DOC "ComputeCpp Runtime Library")
|
||||
|
||||
find_library(COMPUTECPP_RUNTIME_LIBRARY_DEBUG
|
||||
NAMES ComputeCpp ComputeCpp_vs2015_d
|
||||
NAMES ComputeCpp_d ComputeCpp ComputeCpp_vs2015_d
|
||||
HINTS ${computecpp_find_hint}
|
||||
PATH_SUFFIXES lib
|
||||
DOC "ComputeCpp Debug Runtime Library")
|
||||
@ -112,7 +115,7 @@ else()
|
||||
if (COMPUTECPP_PLATFORM_IS_SUPPORTED)
|
||||
message(STATUS "platform - your system can support ComputeCpp")
|
||||
else()
|
||||
message(WARNING "platform - your system CANNOT support ComputeCpp")
|
||||
message(STATUS "platform - your system is not officially supported")
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
@ -151,6 +154,8 @@ endif()
|
||||
list(APPEND COMPUTECPP_DEVICE_COMPILER_FLAGS -sycl-target ${COMPUTECPP_BITCODE})
|
||||
message(STATUS "compute++ flags - ${COMPUTECPP_DEVICE_COMPILER_FLAGS}")
|
||||
|
||||
include(ComputeCppCompilerChecks)
|
||||
|
||||
if(NOT TARGET OpenCL::OpenCL)
|
||||
add_library(OpenCL::OpenCL UNKNOWN IMPORTED)
|
||||
set_target_properties(OpenCL::OpenCL PROPERTIES
|
||||
@ -163,7 +168,7 @@ if(NOT TARGET ComputeCpp::ComputeCpp)
|
||||
add_library(ComputeCpp::ComputeCpp UNKNOWN IMPORTED)
|
||||
set_target_properties(ComputeCpp::ComputeCpp PROPERTIES
|
||||
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}"
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${ComputeCpp_INCLUDE_DIRS}"
|
||||
INTERFACE_LINK_LIBRARIES "OpenCL::OpenCL"
|
||||
@ -200,7 +205,7 @@ define_property(
|
||||
####################
|
||||
#
|
||||
# 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.
|
||||
# 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.
|
||||
set(baseSyclName ${CMAKE_CURRENT_BINARY_DIR}/${SDK_BUILD_IR_TARGET}_${sourceFileName})
|
||||
set(outputSyclFile ${baseSyclName}.sycl)
|
||||
set(outputDeviceFile ${baseSyclName}.${IR_MAP_${COMPUTECPP_BITCODE}})
|
||||
set(depFileName ${baseSyclName}.sycl.d)
|
||||
|
||||
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)
|
||||
if(target_libraries)
|
||||
foreach(library ${target_libraries})
|
||||
list(APPEND ir_dependencies ${library})
|
||||
if(TARGET ${library})
|
||||
list(APPEND ir_dependencies ${library})
|
||||
endif()
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
@ -281,19 +289,20 @@ function(__build_ir)
|
||||
# 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
|
||||
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(enable_depfile DEPFILE ${depFileName})
|
||||
endif()
|
||||
|
||||
# Add custom command for running compute++
|
||||
add_custom_command(
|
||||
OUTPUT ${outputSyclFile}
|
||||
OUTPUT ${outputDeviceFile} ${outputSyclFile}
|
||||
COMMAND ${ComputeCpp_DEVICE_COMPILER_EXECUTABLE}
|
||||
${COMPUTECPP_DEVICE_COMPILER_FLAGS}
|
||||
${generated_include_directories}
|
||||
${generated_compile_definitions}
|
||||
-o ${outputSyclFile}
|
||||
-sycl-ih ${outputSyclFile}
|
||||
-o ${outputDeviceFile}
|
||||
-c ${SDK_BUILD_IR_SOURCE}
|
||||
${generate_depfile}
|
||||
DEPENDS ${ir_dependencies}
|
||||
@ -308,7 +317,7 @@ function(__build_ir)
|
||||
|
||||
if(NOT MSVC)
|
||||
# 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})
|
||||
endif()
|
||||
|
||||
@ -392,6 +401,8 @@ function(add_sycl_to_target)
|
||||
${ARGN}
|
||||
)
|
||||
|
||||
set_target_properties(${SDK_ADD_SYCL_TARGET} PROPERTIES LINKER_LANGUAGE CXX)
|
||||
|
||||
# If the CXX compiler is set to compute++ enable the driver.
|
||||
get_filename_component(cmakeCxxCompilerFileName "${CMAKE_CXX_COMPILER}" NAME)
|
||||
if("${cmakeCxxCompilerFileName}" STREQUAL "compute++")
|
||||
|
@ -16,6 +16,7 @@
|
||||
|
||||
#define EIGEN_DEFAULT_DENSE_INDEX_TYPE int64_t
|
||||
#define EIGEN_USE_SYCL
|
||||
#define EIGEN_HAS_CONSTEXPR 1
|
||||
|
||||
#include "main.h"
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user