Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 36 additions & 16 deletions CMakeModules/InternalUtils.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -29,13 +29,25 @@ endif()
endfunction()

function(arrayfire_get_cuda_cxx_flags cuda_flags)
if(NOT MSVC)
set(flags -std=c++14 --expt-relaxed-constexpr -Xcompiler -fPIC -Xcompiler ${CMAKE_CXX_COMPILE_OPTIONS_VISIBILITY}hidden)
else()
set(flags -Xcompiler /wd4251 -Xcompiler /wd4068 -Xcompiler /wd4275 -Xcompiler /bigobj -Xcompiler /EHsc)
if(MSVC)
set(flags -Xcompiler /wd4251
-Xcompiler /wd4068
-Xcompiler /wd4275
-Xcompiler /bigobj
-Xcompiler /EHsc
--expt-relaxed-constexpr)
if(CMAKE_GENERATOR MATCHES "Ninja")
set(flags ${flags} -Xcompiler /FS)
endif()
if(cplusplus_define)
list(APPEND flags -Xcompiler /Zc:__cplusplus
-Xcompiler /std:c++14)
endif()
else()
set(flags -std=c++14
-Xcompiler -fPIC
-Xcompiler ${CMAKE_CXX_COMPILE_OPTIONS_VISIBILITY}hidden
--expt-relaxed-constexpr)
endif()

if("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU" AND
Expand Down Expand Up @@ -172,18 +184,26 @@ macro(arrayfire_set_cmake_default_variables)
# This code is used to generate the compilers.h file in CMakeModules. Not all
# features of this modules are supported in the versions of CMake we wish to
# support so we are directly including the files here
# include(WriteCompilerDetectionHeader)
# write_compiler_detection_header(
# FILE ${ArrayFire_BINARY_DIR}/include/af/compilers.h
# PREFIX AF
# COMPILERS AppleClang Clang GNU Intel MSVC
# # NOTE: cxx_attribute_deprecated does not work well with C
# FEATURES cxx_rvalue_references cxx_noexcept cxx_variadic_templates cxx_alignas cxx_static_assert cxx_generalized_initializers
# ALLOW_UNKNOWN_COMPILERS
# #[VERSION <version>]
# #[PROLOG <prolog>]
# #[EPILOG <epilog>]
# )
# set(compiler_header_epilogue [=[
# #if defined(AF_COMPILER_CXX_RELAXED_CONSTEXPR) && AF_COMPILER_CXX_RELAXED_CONSTEXPR
# #define AF_CONSTEXPR constexpr
# #else
# #define AF_CONSTEXPR
# #endif
# ]=])
# include(WriteCompilerDetectionHeader)
# write_compiler_detection_header(
# FILE ${ArrayFire_BINARY_DIR}/include/af/compilers.h
# PREFIX AF
# COMPILERS AppleClang Clang GNU Intel MSVC
# # NOTE: cxx_attribute_deprecated does not work well with C
# FEATURES cxx_rvalue_references cxx_noexcept cxx_variadic_templates cxx_alignas
# cxx_static_assert cxx_generalized_initializers cxx_relaxed_constexpr
# ALLOW_UNKNOWN_COMPILERS
# #[VERSION <version>]
# #[PROLOG <prolog>]
# EPILOG ${compiler_header_epilogue}
# )
configure_file(
${CMAKE_MODULE_PATH}/compilers.h
${ArrayFire_BINARY_DIR}/include/af/compilers.h)
Expand Down
47 changes: 47 additions & 0 deletions CMakeModules/compilers.h
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,13 @@
# define AF_COMPILER_CXX_GENERALIZED_INITIALIZERS 0
# endif

#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && \
__has_feature(cxx_relaxed_constexpr)
#define AF_COMPILER_CXX_RELAXED_CONSTEXPR 1
#else
#define AF_COMPILER_CXX_RELAXED_CONSTEXPR 0
#endif

# elif AF_COMPILER_IS_Clang

# if !(((__clang_major__ * 100) + __clang_minor__) >= 301)
Expand Down Expand Up @@ -253,6 +260,13 @@
# define AF_COMPILER_CXX_GENERALIZED_INITIALIZERS 0
# endif

#if ((__clang_major__ * 100) + __clang_minor__) >= 301 && \
__has_feature(cxx_relaxed_constexpr)
#define AF_COMPILER_CXX_RELAXED_CONSTEXPR 1
#else
#define AF_COMPILER_CXX_RELAXED_CONSTEXPR 0
#endif

# elif AF_COMPILER_IS_GNU

# if !((__GNUC__ * 100 + __GNUC_MINOR__) >= 404)
Expand Down Expand Up @@ -307,6 +321,12 @@
# define AF_COMPILER_CXX_GENERALIZED_INITIALIZERS 0
# endif

#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 500 && __cplusplus >= 201402L
#define AF_COMPILER_CXX_RELAXED_CONSTEXPR 1
#else
#define AF_COMPILER_CXX_RELAXED_CONSTEXPR 0
#endif

# elif AF_COMPILER_IS_Intel

# if !(__INTEL_COMPILER >= 1210)
Expand Down Expand Up @@ -378,6 +398,20 @@
# define AF_COMPILER_CXX_GENERALIZED_INITIALIZERS 0
# endif

#if __cpp_constexpr >= 201304 || \
(__INTEL_COMPILER >= 1700 && \
((__cplusplus >= 201300L) || \
((__cplusplus == 201103L) && !defined(__INTEL_CXX11_MODE__)) || \
((((__INTEL_COMPILER == 1500) && (__INTEL_COMPILER_UPDATE == 1))) && \
defined(__GXX_EXPERIMENTAL_CXX0X__) && \
!defined(__INTEL_CXX11_MODE__)) || \
(defined(__INTEL_CXX11_MODE__) && defined(__cpp_aggregate_nsdmi))) && \
!defined(_MSC_VER))
#define AF_COMPILER_CXX_RELAXED_CONSTEXPR 1
#else
#define AF_COMPILER_CXX_RELAXED_CONSTEXPR 0
#endif

# elif AF_COMPILER_IS_MSVC

# if !(_MSC_VER >= 1600)
Expand Down Expand Up @@ -436,6 +470,12 @@
# define AF_COMPILER_CXX_GENERALIZED_INITIALIZERS 0
# endif

#if _MSC_VER >= 1911
#define AF_COMPILER_CXX_RELAXED_CONSTEXPR 1
#else
#define AF_COMPILER_CXX_RELAXED_CONSTEXPR 0
#endif

# endif

# if defined(AF_COMPILER_CXX_NOEXCEPT) && AF_COMPILER_CXX_NOEXCEPT
Expand Down Expand Up @@ -471,4 +511,11 @@ template<> struct AFStaticAssert<true>{};

#endif

#if defined(AF_COMPILER_CXX_RELAXED_CONSTEXPR) && \
AF_COMPILER_CXX_RELAXED_CONSTEXPR
#define AF_CONSTEXPR constexpr
#else
#define AF_CONSTEXPR
#endif

#endif
Loading