• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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