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