1if(NOT DEFINED CMAKE_C_STANDARD) 2 set(CMAKE_C_STANDARD 99) 3endif() 4if(NOT DEFINED CMAKE_C_STANDARD_REQUIRED) 5 set(CMAKE_C_STANDARD_REQUIRED ON) 6endif() 7if(NOT DEFINED CMAKE_CXX_STANDARD) 8 set(CMAKE_CXX_STANDARD 17) 9endif() 10if(NOT DEFINED CMAKE_CXX_STANDARD_REQUIRED) 11 set(CMAKE_CXX_STANDARD_REQUIRED ON) 12endif() 13 14 15# Add a test for a given source file for each version of OpenCL 16function(add_header_test NAME SOURCE) 17 # Some headers include system files which require anonymous structs 18 # so we cannot test them with /Za: 19 set(TEST_SKIP_ANSI_TESTING 20 cl_d3d10_h cl_d3d11_h cl_dx9_media_sharing_h cl_dx9_media_sharing_intel_h cl_icd_h cl_layer_h) 21 get_filename_component(LANG_DIR "${CMAKE_CURRENT_SOURCE_DIR}" NAME) 22 if(LANG_DIR MATCHES cpp) 23 set(CPP_SOURCE_PATH "${CMAKE_CURRENT_BINARY_DIR}/${SOURCE}pp") 24 file(RELATIVE_PATH REL_SOURCE_PATH "${CMAKE_CURRENT_BINARY_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/../${SOURCE}") 25 file(TO_NATIVE_PATH "${REL_SOURCE_PATH}" NATIVE_SOURCE_PATH) 26 file(WRITE 27 "${CPP_SOURCE_PATH}" 28 "#include \"${NATIVE_SOURCE_PATH}\"\n" 29 ) 30 set(SOURCE_PATH "${CPP_SOURCE_PATH}") 31 set(LANG cpp) 32 else() 33 set(SOURCE_PATH "../${SOURCE}") 34 set(LANG c) 35 endif() 36 foreach(VERSION 100 110 120 200 210 220 300) 37 set(TEST_EXE ${NAME}_${LANG}_${VERSION}) 38 list(FIND TEST_SKIP_ANSI_TESTING ${NAME} TEST_SKIP_INDEX) 39 if(NOT (${TEST_SKIP_INDEX} GREATER -1 AND MSVC AND CMAKE_C_FLAGS MATCHES "/Za")) 40 add_executable(${TEST_EXE} "${SOURCE_PATH}") 41 target_compile_definitions(${TEST_EXE} 42 PUBLIC -DCL_TARGET_OPENCL_VERSION=${VERSION} 43 ) 44 target_include_directories(${TEST_EXE} 45 PUBLIC ${PROJECT_SOURCE_DIR} 46 ) 47 add_test(NAME ${TEST_EXE} COMMAND ${TEST_EXE}) 48 endif() 49 endforeach(VERSION) 50endfunction(add_header_test) 51 52add_subdirectory(lang_c) 53if(OPENCL_HEADERS_BUILD_CXX_TESTS) 54 enable_language(CXX) 55 add_subdirectory(lang_cpp) 56endif() 57