xref: /aosp_15_r20/external/OpenCL-CTS/CMakeLists.txt (revision 6467f958c7de8070b317fc65bcb0f6472e388d82)
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