1cmake_minimum_required(VERSION 3.5.1) 2 3set( CONFORMANCE_SUFFIX "" ) 4set(CLConform_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) 5 6project(CLConform${CONFORMANCE_SUFFIX}) 7 8set(CMAKE_C_STANDARD 99) 9set(CMAKE_C_STANDARD_REQUIRED ON) 10set(CMAKE_CXX_STANDARD 11) 11set(CMAKE_CXX_STANDARD_REQUIRED ON) 12 13add_definitions(-DCL_TARGET_OPENCL_VERSION=300) 14add_definitions(-DCL_USE_DEPRECATED_OPENCL_2_2_APIS=1) 15add_definitions(-DCL_USE_DEPRECATED_OPENCL_2_1_APIS=1) 16add_definitions(-DCL_USE_DEPRECATED_OPENCL_2_0_APIS=1) 17add_definitions(-DCL_USE_DEPRECATED_OPENCL_1_2_APIS=1) 18add_definitions(-DCL_USE_DEPRECATED_OPENCL_1_1_APIS=1) 19add_definitions(-DCL_USE_DEPRECATED_OPENCL_1_0_APIS=1) 20add_definitions(-DCL_NO_EXTENSION_PROTOTYPES) 21 22option(USE_CL_EXPERIMENTAL "Use Experimental definitions" OFF) 23if(USE_CL_EXPERIMENTAL) 24 add_definitions(-DCL_EXPERIMENTAL) 25endif(USE_CL_EXPERIMENTAL) 26 27#----------------------------------------------------------- 28# Default Configurable Test Set 29#----------------------------------------------------------- 30option(D3D10_IS_SUPPORTED "Run DirectX 10 interop tests" OFF) 31option(D3D11_IS_SUPPORTED "Run DirectX 11 interop tests" OFF) 32option(GL_IS_SUPPORTED "Run OpenGL interop tests" OFF) 33option(GLES_IS_SUPPORTED "Run OpenGL ES interop tests" OFF) 34option(VULKAN_IS_SUPPORTED "Run Vulkan interop tests" OFF) 35 36 37#----------------------------------------------------------- 38# Tests prefix and suffix 39#----------------------------------------------------------- 40# Set the prefix and suffix for the generated executables 41# For example, if you want the api executable to be test_conformance_api_12 42# Set prefix to "test_conformance_" and suffix to "_12" 43set(CONFORMANCE_PREFIX "test_" ) 44set(CONFORMANCE_SUFFIX "" ) 45 46#----------------------------------------------------------- 47# Vendor Customization 48#----------------------------------------------------------- 49#Vendor Customization File can be included here to provide a way to automatically 50#build driver as a dependency of the conformance tests, or other such CMake customization 51include(CMakeVendor.txt OPTIONAL) 52 53# CL_INCLUDE_DIR - path to dir with OpenCL headers 54if(CL_INCLUDE_DIR AND CL_LIB_DIR) 55 link_directories(${CL_LIB_DIR}) 56else(CL_INCLUDE_DIR AND CL_LIB_DIR) 57 message(STATUS "OpenCL hasn't been found!") 58 message(FATAL_ERROR "Either install OpenCL or pass -DCL_INCLUDE_DIR and -DCL_LIB_DIR") 59endif(CL_INCLUDE_DIR AND CL_LIB_DIR) 60 61# CLConform_GL_LIBRARIES_DIR - path to OpenGL libraries 62if(GL_IS_SUPPORTED AND CLConform_GL_LIBRARIES_DIR) 63 link_directories(${CLConform_GL_LIBRARIES_DIR}) 64endif (GL_IS_SUPPORTED AND CLConform_GL_LIBRARIES_DIR) 65 66include(CheckFunctionExists) 67include(CheckIncludeFiles) 68include(CheckCXXCompilerFlag) 69 70if(CMAKE_SYSTEM_PROCESSOR MATCHES "^(arm.*|ARM.*)") 71 set(CLConform_TARGET_ARCH ARM) 72elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64.*|AARCH64.*|arm64.*|ARM64.*)") 73 set(CLConform_TARGET_ARCH ARM64) 74elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "amd64.*|x86_64.*|AMD64.*") 75 set(CLConform_TARGET_ARCH x86_64) 76elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "i686.*|i386.*|x86.*") 77 set(CLConform_TARGET_ARCH x86) 78endif() 79 80if(NOT DEFINED CLConform_TARGET_ARCH) 81 message (FATAL_ERROR "Target architecture not recognised. Exiting.") 82endif() 83 84macro(add_cxx_flag_if_supported flag) 85 string(REGEX REPLACE "[-=+]" "" FLAG_NO_SIGNS ${flag}) 86 set(FLAG_TO_TEST ${flag}) 87 if((${flag} MATCHES "^-Wno-") AND NOT (${flag} MATCHES "^-Wno-error=")) 88 # -Wno-... only causes a diagnostic if another diagnostic is emitted. 89 # Change such flags into a -W... flag to test if the warning is known. 90 string(REGEX REPLACE "^-Wno-" "-W" FLAG_TO_TEST ${flag}) 91 endif() 92 check_cxx_compiler_flag(${FLAG_TO_TEST} COMPILER_SUPPORTS_${FLAG_NO_SIGNS}) 93 if(COMPILER_SUPPORTS_${FLAG_NO_SIGNS}) 94 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}") 95 endif() 96endmacro(add_cxx_flag_if_supported) 97 98if(CMAKE_COMPILER_IS_GNUCC OR "${CMAKE_CXX_COMPILER_ID}" MATCHES "(Apple)?Clang") 99 add_cxx_flag_if_supported(-Wmisleading-indentation) 100 add_cxx_flag_if_supported(-Wunused-function) 101 add_cxx_flag_if_supported(-Wunused-variable) 102 add_cxx_flag_if_supported(-Werror) 103 if(NOT CMAKE_BUILD_TYPE MATCHES "Release|RelWithDebInfo|MinSizeRel") 104 # Enable more warnings if not doing a release build. 105 add_cxx_flag_if_supported(-Wall) 106 endif() 107 add_cxx_flag_if_supported(-Wno-narrowing) 108 add_cxx_flag_if_supported(-Wno-format) 109 add_cxx_flag_if_supported(-Wno-error=cpp) # Allow #warning directive 110 add_cxx_flag_if_supported(-Wno-unknown-pragmas) # Issue #785 111 add_cxx_flag_if_supported(-Wno-error=asm-operand-widths) # Issue #784 112 113 # -msse -mfpmath=sse to force gcc to use sse for float math, 114 # avoiding excess precision problems that cause tests like int2float 115 # to falsely fail. -ffloat-store also works, but WG suggested 116 # that sse would be better. 117 if(${CLConform_TARGET_ARCH} STREQUAL "x86_64" OR ${CLConform_TARGET_ARCH} 118 STREQUAL "x86") 119 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse -msse2 -mfpmath=sse") 120 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse -msse2 -mfpmath=sse") 121 122 add_cxx_flag_if_supported(-frounding-math) 123 endif() 124else() 125 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /D__SSE__") 126 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /D__SSE__") 127endif() 128 129# Set a module's COMPILE_FLAGS if using gcc or clang. 130macro(set_gnulike_module_compile_flags flags) 131 if(CMAKE_COMPILER_IS_GNUCC OR "${CMAKE_CXX_COMPILER_ID}" MATCHES "(Apple)?Clang") 132 SET_SOURCE_FILES_PROPERTIES( 133 ${${MODULE_NAME}_SOURCES} 134 PROPERTIES 135 COMPILE_FLAGS ${flags} 136 ) 137 endif() 138endmacro(set_gnulike_module_compile_flags) 139 140# Xcode 14.1 deprecated functions such as sprintf. 141# Suppress such warnings for now, see Issue #1626 142if(APPLE) 143 add_cxx_flag_if_supported(-Wno-deprecated-declarations) 144endif(APPLE) 145 146if(MSVC) 147 # Don't warn when using standard non-secure functions. 148 add_compile_definitions(_CRT_SECURE_NO_WARNINGS) 149 # Don't warn about using the portable "strdup" function. 150 add_compile_definitions(_CRT_NONSTDC_NO_DEPRECATE) 151 # Fix std::min and std::max handling with windows.harness. 152 add_compile_definitions(NOMINMAX) 153endif() 154 155if( WIN32 AND "${CMAKE_CXX_COMPILER_ID}" MATCHES "Intel" ) 156 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Qlong-double -Qpc80 /DWIN32 /D_WINDOWS /W3 /GR /EHsc -nologo -Od -D_CRT_NONSTDC_NO_WARNINGS -EHsc -Wall -Qdiag-disable:68,111,177,186,161,869,1028,2259,2553,181,239,265,1188 -fp:strict -fp:source") 157 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Qlong-double -Qpc80 /DWIN32 /D_WINDOWS /W3 /GR /EHsc -nologo -Od -D_CRT_NONSTDC_NO_WARNINGS -EHsc -Wall -Qdiag-disable:68,111,177,186,161,869,1028,2259,2553,181,239,265,1188 -fp:strict -fp:source") 158endif() 159 160list(APPEND CLConform_LIBRARIES ${OPENCL_LIBRARIES}) 161if(ANDROID) 162 list(APPEND CLConform_LIBRARIES m) 163endif() 164if(NOT DEFINED LINK_PTHREAD) 165 if(ANDROID OR WIN32) 166 set(LINK_PTHREAD OFF) 167 else() 168 set(LINK_PTHREAD ON) 169 endif() 170endif() 171if(LINK_PTHREAD) 172 list(APPEND CLConform_LIBRARIES pthread) 173endif() 174 175if(APPLE) 176 find_library(corefoundation CoreFoundation) 177 find_library(iokit IOKit) 178 list(APPEND CLConform_LIBRARIES ${corefoundation}) 179 list(APPEND CLConform_LIBRARIES ${iokit}) 180endif(APPLE) 181 182include_directories(SYSTEM ${CL_INCLUDE_DIR}) 183include_directories(${CLConform_SOURCE_DIR}/test_common/harness 184 ${CLConform_SOURCE_DIR}/test_common/gles 185 ${CLConform_SOURCE_DIR}/test_common/gl 186 ${CLConform_SOURCE_DIR}/test_common) 187 188add_subdirectory(test_common) 189add_subdirectory(test_conformance) 190