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