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