1cmake_minimum_required(VERSION 3.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 13if(CMAKE_BUILD_TYPE STREQUAL "release") 14 set (BUILD_FLAVOR "release") 15else(CMAKE_BUILD_TYPE STREQUAL "release") 16 set (BUILD_FLAVOR "debug") 17endif(CMAKE_BUILD_TYPE STREQUAL "release") 18 19add_definitions(-DCL_TARGET_OPENCL_VERSION=300) 20add_definitions(-DCL_USE_DEPRECATED_OPENCL_2_1_APIS=1) 21add_definitions(-DCL_USE_DEPRECATED_OPENCL_2_0_APIS=1) 22add_definitions(-DCL_USE_DEPRECATED_OPENCL_1_2_APIS=1) 23add_definitions(-DCL_USE_DEPRECATED_OPENCL_1_1_APIS=1) 24add_definitions(-DCL_USE_DEPRECATED_OPENCL_1_0_APIS=1) 25 26option(USE_CL_EXPERIMENTAL "Use Experimental definitions" OFF) 27if(USE_CL_EXPERIMENTAL) 28 add_definitions(-DCL_EXPERIMENTAL) 29endif(USE_CL_EXPERIMENTAL) 30 31# Support both VS2008 and VS2012. 32set(BUILD_DIR "$ENV{ADRENO_DRIVER}/build") 33if(MSVC90) 34 set(VS_BUILD_DIR "${BUILD_DIR}/vs2008") 35else(MSVC110) 36 set(VS_BUILD_DIR "${BUILD_DIR}/vs2012") 37endif(MSVC90) 38 39#----------------------------------------------------------- 40# Default Configurable Test Set 41#----------------------------------------------------------- 42option(D3D10_IS_SUPPORTED "Run DirectX 10 interop tests" OFF) 43option(D3D11_IS_SUPPORTED "Run DirectX 11 interop tests" OFF) 44option(GL_IS_SUPPORTED "Run OpenGL interop tests" OFF) 45option(GLES_IS_SUPPORTED "Run OpenGL ES interop tests" OFF) 46 47 48#----------------------------------------------------------- 49# Tests prefix and suffix 50#----------------------------------------------------------- 51# Set the prefix and suffix for the generated executables 52# For example, if you want the api executable to be test_conformance_api_12 53# Set prefix to "test_conformance_" and suffix to "_12" 54set(CONFORMANCE_PREFIX "test_" ) 55set(CONFORMANCE_SUFFIX "" ) 56 57#----------------------------------------------------------- 58# Vendor Customization 59#----------------------------------------------------------- 60#Vendor Customization File can be included here to provide a way to automatically 61#build driver as a dependency of the conformance tests, or other such CMake customization 62option(USE_VENDOR_CUSTOM_FILE "Use Vendor Customization File" OFF) 63if(USE_VENDOR_CUSTOM_FILE) 64 include(CMakeVendor.txt OPTIONAL) 65endif(USE_VENDOR_CUSTOM_FILE) 66 67#----------------------------------------------------------- 68# Development options for OpenCL C++ tests 69#----------------------------------------------------------- 70# Use OpenCL C kernels instead of OpenCL C++ kernels 71option(CLPP_DEVELOPMENT_USE_OPENCLC_KERNELS "Use OpenCL C kernels in OpenCL C++ tests" OFF) 72if(CLPP_DEVELOPMENT_USE_OPENCLC_KERNELS) 73 set(CLPP_DEVELOPMENT_OPTIONS ${CLPP_DEVELOPMENT_OPTIONS} -DCLPP_DEVELOPMENT_USE_OPENCLC_KERNELS) 74endif(CLPP_DEVELOPMENT_USE_OPENCLC_KERNELS) 75# Only check if OpenCL C++ kernels compile to SPIR-V 76option(CLPP_DEVELOPMENT_ONLY_SPIRV_COMPILATION "Only check if OpenCL C++ kernels compile to SPIR-V" OFF) 77if(CLPP_DEVELOPMENT_ONLY_SPIRV_COMPILATION) 78 if(CLPP_DEVELOPMENT_USE_OPENCLC_KERNELS) 79 message(FATAL_ERROR "Can't use OpenCL C kernels and compile to SPIR-V.") 80 endif(CLPP_DEVELOPMENT_USE_OPENCLC_KERNELS) 81 set(CLPP_DEVELOPMENT_OPTIONS ${CLPP_DEVELOPMENT_OPTIONS} -DCLPP_DEVELOPMENT_ONLY_SPIRV_COMPILATION) 82endif(CLPP_DEVELOPMENT_ONLY_SPIRV_COMPILATION) 83# 84if(CLPP_DEVELOPMENT_OPTIONS) 85 add_definitions(-DCLPP_DEVELOPMENT_OPTIONS) 86 add_definitions(${CLPP_DEVELOPMENT_OPTIONS}) 87endif(CLPP_DEVELOPMENT_OPTIONS) 88 89# Offline OpenCL C/C++ compiler provided by Khronos is the only supported 90# offline compiler. 91# 92# Path to offline OpenCL C/C++ compiler provided by Khronos. 93# See https://github.com/KhronosGroup/SPIR/ (spirv-1.1 branch or newer SPIR-V-ready 94# branch should be used). 95if(KHRONOS_OFFLINE_COMPILER) 96 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DKHRONOS_OFFLINE_COMPILER=${KHRONOS_OFFLINE_COMPILER}") 97 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DKHRONOS_OFFLINE_COMPILER=${KHRONOS_OFFLINE_COMPILER}") 98 # Additional OpenCL C/C++ compiler option. 99 if(KHRONOS_OFFLINE_COMPILER_OPTIONS) 100 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DKHRONOS_OFFLINE_COMPILER_OPTIONS=${KHRONOS_OFFLINE_COMPILER_OPTIONS}") 101 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DKHRONOS_OFFLINE_COMPILER_OPTIONS=${KHRONOS_OFFLINE_COMPILER_OPTIONS}") 102 endif(KHRONOS_OFFLINE_COMPILER_OPTIONS) 103else(KHRONOS_OFFLINE_COMPILER) 104 message(WARNING "KHRONOS_OFFLINE_COMPILER is not defined!") 105 message(WARNING "Running CL C++ tests will not be possible.") 106endif(KHRONOS_OFFLINE_COMPILER) 107 108# CL_LIBCLCXX_DIR - path to dir with OpenCL C++ STL (libclcxx) 109# CL_INCLUDE_DIR - path to dir with OpenCL headers 110# CL_LIBCLCXX_DIR - path to dir with OpenCL library 111if(CL_INCLUDE_DIR AND CL_LIB_DIR AND CL_LIBCLCXX_DIR) 112 link_directories(${CL_LIB_DIR}) 113 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DCL_LIBCLCXX_DIR=${CL_LIBCLCXX_DIR}") 114 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DCL_LIBCLCXX_DIR=${CL_LIBCLCXX_DIR}") 115else(CL_INCLUDE_DIR AND CL_LIB_DIR AND CL_LIBCLCXX_DIR) 116 message(STATUS "OpenCL hasn't been found!") 117 message(FATAL_ERROR "Either install OpenCL or pass -DCL_INCLUDE_DIR, -DCL_LIB_DIR and -DCL_LIBCLCXX_DIR") 118endif(CL_INCLUDE_DIR AND CL_LIB_DIR AND CL_LIBCLCXX_DIR) 119 120# CLConform_GL_LIBRARIES_DIR - path to OpenGL libraries 121if(GL_IS_SUPPORTED AND CLConform_GL_LIBRARIES_DIR) 122 link_directories(${CLConform_GL_LIBRARIES_DIR}) 123endif (GL_IS_SUPPORTED AND CLConform_GL_LIBRARIES_DIR) 124 125include(CheckFunctionExists) 126include(CheckIncludeFiles) 127include(CheckCXXCompilerFlag) 128 129if(CMAKE_SYSTEM_PROCESSOR MATCHES "^(arm.*|ARM.*)") 130 set(CLConform_TARGET_ARCH ARM) 131elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64.*|AARCH64.*|arm64.*|ARM64.*)") 132 set(CLConform_TARGET_ARCH ARM64) 133elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "amd64.*|x86_64.*|AMD64.*") 134 set(CLConform_TARGET_ARCH x86_64) 135elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "i686.*|i386.*|x86.*") 136 set(CLConform_TARGET_ARCH x86) 137endif() 138 139if(NOT DEFINED CLConform_TARGET_ARCH) 140 message (FATAL_ERROR "Target architecture not recognised. Exiting.") 141endif() 142 143macro(add_cxx_flag_if_supported flag) 144 string(REGEX REPLACE "[-=+]" "" FLAG_NO_SIGNS ${flag}) 145 check_cxx_compiler_flag(${flag} COMPILER_SUPPORTS_${FLAG_NO_SIGNS}) 146 if(COMPILER_SUPPORTS_${FLAG_NO_SIGNS}) 147 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}") 148 endif() 149endmacro(add_cxx_flag_if_supported) 150 151if(CMAKE_COMPILER_IS_GNUCC OR "${CMAKE_CXX_COMPILER_ID}" MATCHES "(Apple)?Clang") 152 add_cxx_flag_if_supported(-Wno-narrowing) 153 add_cxx_flag_if_supported(-Wno-format) 154 add_cxx_flag_if_supported(-Werror) 155 add_cxx_flag_if_supported(-Wno-error=cpp) # Allow #warning directive 156 add_cxx_flag_if_supported(-Wno-error=absolute-value) # Issue 783 157 add_cxx_flag_if_supported(-Wno-error=unknown-pragmas) # Issue #785 158 add_cxx_flag_if_supported(-Wno-error=asm-operand-widths) # Issue #784 159 add_cxx_flag_if_supported(-Wno-error=overflow) # Fixed by #699 160 161 # -msse -mfpmath=sse to force gcc to use sse for float math, 162 # avoiding excess precision problems that cause tests like int2float 163 # to falsely fail. -ffloat-store also works, but WG suggested 164 # that sse would be better. 165 if(${CLConform_TARGET_ARCH} STREQUAL "x86_64" OR ${CLConform_TARGET_ARCH} 166 STREQUAL "x86") 167 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse -msse2 -mfpmath=sse") 168 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse -msse2 -mfpmath=sse") 169 endif() 170else() 171 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /D__SSE__") 172 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /D__SSE__") 173endif() 174 175if( WIN32 AND "${CMAKE_CXX_COMPILER_ID}" MATCHES "Intel" ) 176 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Qlong-double -Qpc80 /DWIN32 /D_WINDOWS /W3 /GR /EHsc -nologo -Od -D_CRT_SECURE_NO_WARNINGS -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") 177 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Qlong-double -Qpc80 /DWIN32 /D_WINDOWS /W3 /GR /EHsc -nologo -Od -D_CRT_SECURE_NO_WARNINGS -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") 178endif() 179 180list(APPEND CLConform_LIBRARIES ${OPENCL_LIBRARIES}) 181if(ANDROID) 182 list(APPEND CLConform_LIBRARIES m) 183elseif(NOT WIN32) 184 list(APPEND CLConform_LIBRARIES pthread) 185endif(ANDROID) 186 187if(APPLE) 188 find_library(corefoundation CoreFoundation) 189 find_library(iokit IOKit) 190 list(APPEND CLConform_LIBRARIES ${corefoundation}) 191 list(APPEND CLConform_LIBRARIES ${iokit}) 192endif(APPLE) 193 194include_directories(SYSTEM ${CL_INCLUDE_DIR}) 195include_directories(${CLConform_SOURCE_DIR}/test_common/harness 196 ${CLConform_SOURCE_DIR}/test_common/gles 197 ${CLConform_SOURCE_DIR}/test_common/gl 198 ${CLConform_SOURCE_DIR}/test_common) 199 200if(CMAKE_BUILD_TYPE STREQUAL "release") 201 set (BUILD_FLAVOR "release") 202elseif (CMAKE_BUILD_TYPE STREQUAL "debug") 203 set (BUILD_FLAVOR "debug") 204endif(CMAKE_BUILD_TYPE STREQUAL "release") 205 206 207add_subdirectory(test_common) 208add_subdirectory(test_conformance) 209add_subdirectory(test_extensions) 210 211# Support both VS2008 and VS2012. 212set (DLL_FILES "${VS_BUILD_DIR}/Debug/*.dll") 213set (DST_DIR "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/Debug/") 214 215if (WIN32) 216 set (COPY "echo") 217 add_custom_target(COPY_DLL${CONFORMANCE_SUFFIX} ALL 218 COMMAND ${COPY} "${DLL_FILES}" "${DST_DIR}" 219 COMMENT "Copying dll files.. ") 220else (WIN32) 221 set (COPY cp) 222 add_custom_target(COPY_DLL${CONFORMANCE_SUFFIX}) 223endif(WIN32) 224 225set_property(TARGET COPY_DLL${CONFORMANCE_SUFFIX} PROPERTY FOLDER "CONFORMANCE${CONFORMANCE_SUFFIX}") 226 227if(WIN32) 228 add_custom_target( COPY_FILES${CONFORMANCE_SUFFIX} ALL 229 COMMAND ${COPY} ${DLL_FILES} ${DST_DIR} 230 COMMENT "Copying other files to output folder..." ) 231else(WIN32) 232 add_custom_target( COPY_FILES${CONFORMANCE_SUFFIX} ) 233endif(WIN32) 234 235# Copy required CL include directories into the build directory 236# as required for the compiler testing. 237 238# ... For running the compiler test on the command line. 239file(COPY "${CLConform_SOURCE_DIR}/test_conformance/compiler/includeTestDirectory" DESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/test_conformance/compiler) 240file(COPY "${CLConform_SOURCE_DIR}/test_conformance/compiler/secondIncludeTestDirectory" DESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/test_conformance/compiler) 241 242# ... For running the compiler test with VisualStudio. 243if(MSVC) 244 file(COPY "${CLConform_SOURCE_DIR}/test_conformance/compiler/includeTestDirectory" DESTINATION "${CLConform_SOURCE_DIR}/build/test_conformance/compiler") 245 file(COPY "${CLConform_SOURCE_DIR}/test_conformance/compiler/secondIncludeTestDirectory" DESTINATION "${CLConform_SOURCE_DIR}/build/test_conformance/compiler") 246endif(MSVC) 247 248set_property(TARGET COPY_FILES${CONFORMANCE_SUFFIX} PROPERTY FOLDER "CONFORMANCE${CONFORMANCE_SUFFIX}") 249