From 354ddb3decc81ba85773115c5f1f98c02fd67ad7 Mon Sep 17 00:00:00 2001 From: Vincent Danjean Date: Tue, 3 Dec 2013 01:07:57 +0100 Subject: [PATCH] [build] add tests for default platform selection --- Makefile.am | 15 +++- libdummy_icd.c | 8 +- ocl_test.c | 81 +++++++++++++----- tests/Makefile.am | 2 +- tests/testsuite-default-platform.at | 125 ++++++++++++++++++++++++++++ tests/testsuite-standard.at | 25 ++++-- tests/testsuite-workaround.at | 9 +- tests/testsuite.at | 1 + 8 files changed, 226 insertions(+), 40 deletions(-) create mode 100644 tests/testsuite-default-platform.at diff --git a/Makefile.am b/Makefile.am index 3f1e7d5..3d310cb 100644 --- a/Makefile.am +++ b/Makefile.am @@ -60,12 +60,16 @@ ocl_test_LDADD = libOpenCL.la ocl_test_icdl_SOURCES = ocl_test_icdl.c ocl_test_icdl_LDADD = libOpenCL.la -check_DATA = vendors/dummycl.icd vendors/dummycl-noext.icd -CLEANFILES += vendors/dummycl.icd vendors/dummycl-noext.icd +check_DATA = vendors/dummycl.icd vendors/dummycl2.icd vendors/dummycl-noext.icd +CLEANFILES += vendors/dummycl.icd vendors/dummycl2.icd vendors/dummycl-noext.icd vendors/dummycl.icd: - $(MKDIR_P) vendors + $(mkdir_p) vendors echo "$(CURDIR)/.libs/libdummycl.so" > $@ +vendors/dummycl2.icd: + $(mkdir_p) vendors + echo "$(CURDIR)/.libs/libdummycl2.so" > $@ + vendors/dummycl-noext.icd: $(MKDIR_P) vendors echo "$(CURDIR)/.libs/libdummycl-noext.so" > $@ @@ -90,7 +94,7 @@ stamp-generator-dummy: icd_generator.rb # noinst_LTLIBRARIES would be the correct thing but then libtool # only built non shared version :-( So, declaring the libs as # pkglib_LTLIBRARIES and using an install hook to remove them. -pkglib_LTLIBRARIES = libdummycl.la libdummycl-noext.la +pkglib_LTLIBRARIES = libdummycl.la libdummycl2.la libdummycl-noext.la install-exec-hook:: $(RM) -r $(DESTDIR)$(pkglibdir) libdummycl_la_SOURCES = libdummy_icd.c libdummy_icd.h @@ -98,6 +102,9 @@ nodist_libdummycl_la_SOURCES = libdummy_icd_gen.c libdummy_icd_gen.h libdummycl_noext_la_SOURCES = $(libdummycl_la_SOURCES) nodist_libdummycl_noext_la_SOURCES = $(nodist_libdummycl_la_SOURCES) libdummycl_noext_la_CPPFLAGS = $(AM_CPPFLAGS) -DICD_WITHOUT_EXTENSION +libdummycl2_la_SOURCES = $(libdummycl_la_SOURCES) +nodist_libdummycl2_la_SOURCES = $(nodist_libdummycl_la_SOURCES) +libdummycl2_la_CPPFLAGS = $(AM_CPPFLAGS) -DICD_SUFFIX=\"2\" noinst_PROGRAMS=run_dummy_icd_through_our_ICDL run_dummy_icd_through_our_ICDL_SOURCES = run_dummy_icd.c diff --git a/libdummy_icd.c b/libdummy_icd.c index 418ecb9..151d58b 100644 --- a/libdummy_icd.c +++ b/libdummy_icd.c @@ -101,6 +101,10 @@ CL_API_ENTRY void * CL_API_CALL INTclGetExtensionFunctionAddress( } SYMB(clGetExtensionFunctionAddress); +#ifndef ICD_SUFFIX +# define ICD_SUFFIX "" +#endif + CL_API_ENTRY cl_int CL_API_CALL INTclGetPlatformInfo( cl_platform_id platform, cl_platform_info param_name, @@ -113,8 +117,8 @@ CL_API_ENTRY cl_int CL_API_CALL INTclGetPlatformInfo( char cl_platform_profile[] = "FULL_PROFILE"; char cl_platform_version[] = "OpenCL 1.2"; - char cl_platform_name[] = "DummyCL"; - char cl_platform_vendor[] = "ocl-icd ICD test" + char cl_platform_name[] = "DummyCL" ICD_SUFFIX; + char cl_platform_vendor[] = "ocl-icd ICD test" ICD_SUFFIX #ifdef ICD_WITHOUT_EXTENSION " (no ext)" #endif diff --git a/ocl_test.c b/ocl_test.c index b3ccfc6..d4eff70 100644 --- a/ocl_test.c +++ b/ocl_test.c @@ -28,6 +28,48 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include +void print_error(cl_int error) { + switch (error) { + case CL_SUCCESS: break ; + case CL_PLATFORM_NOT_FOUND_KHR: + printf("No platforms found!\n"); + break; + case CL_INVALID_PLATFORM: + printf("Invalid platform\n"); + break; + default: + printf("OpenCL error: %i\n", error); + } +} + +void show_platform(cl_platform_id pid, int show_extensions) { + char *platform_vendor; + size_t param_value_size_ret; + cl_int error; + + error = clGetPlatformInfo(pid, CL_PLATFORM_VENDOR, 0, NULL, ¶m_value_size_ret ); + print_error(error); + if (error != CL_SUCCESS) + return; + + platform_vendor = (char *)malloc(param_value_size_ret); + clGetPlatformInfo(pid, CL_PLATFORM_VENDOR, param_value_size_ret, platform_vendor, NULL ); + + printf("%s\n",platform_vendor); + free(platform_vendor); + + if (show_extensions) { + error = clGetPlatformInfo(pid, CL_PLATFORM_EXTENSIONS, 0, NULL, ¶m_value_size_ret ); + print_error(error); + + platform_vendor = (char *)malloc(param_value_size_ret); + clGetPlatformInfo(pid, CL_PLATFORM_EXTENSIONS, param_value_size_ret, platform_vendor, NULL ); + + printf("Extensions: %s\n",platform_vendor); + free(platform_vendor); + } +} + int main(int argc, char* argv[]) { cl_platform_id *platforms; cl_uint num_platforms; @@ -36,43 +78,36 @@ int main(int argc, char* argv[]) { int show_extensions=0; if (argc >= 2 && strcmp(argv[1], "--show-extensions")==0) { show_extensions=1; + argv++; + } + + int default_platform=0; + if (argc >= 2 && strcmp(argv[1], "--default-platform")==0) { + default_platform=1; } error = clGetPlatformIDs(0, NULL, &num_platforms); if( error == CL_SUCCESS ) { printf("Found %u platforms!\n", num_platforms); } else if( error == CL_PLATFORM_NOT_FOUND_KHR ) { - printf("No platforms found!\n"); + print_error(error); + if (default_platform) { + show_platform(NULL, show_extensions); + } exit(0); } else { - printf("OpenCL error: %i\n", error); + print_error(error); exit(-1); } platforms = (cl_platform_id *)malloc(sizeof(cl_platform_id *) * num_platforms); error = clGetPlatformIDs(num_platforms, platforms, NULL); + print_error(error); cl_uint i; for(i=0; i'$(srcdir)/package.m4' -TESTSUITES_SRC = testsuite.at testsuite-standard.at testsuite-workaround.at +TESTSUITES_SRC = testsuite.at testsuite-standard.at testsuite-workaround.at testsuite-default-platform.at EXTRA_DIST = $(TESTSUITES_SRC) $(srcdir)/package.m4 $(TESTSUITE) atlocal.in atenv.m4 TESTSUITE = $(srcdir)/testsuite DISTCLEANFILES = atconfig diff --git a/tests/testsuite-default-platform.at b/tests/testsuite-default-platform.at new file mode 100644 index 0000000..8edf020 --- /dev/null +++ b/tests/testsuite-default-platform.at @@ -0,0 +1,125 @@ +AT_BANNER([Default platform selection]) + +AT_SETUP([No choice, among 0 => CL_INVALID_PLATFORM]) +AT_EXPORT([OCL_ICD_DEBUG],[15], + [OCL_ICD_VENDORS],[unexisting-vendors-dir]) +AT_UNSET([OPENCL_ICD_DEFAULT_PLATFORM]) +AT_CHECK([ocl_test --default-platform], 0, [stdout], [stderr]) +dnl TODO check errcode when no platforms are available +AT_CHECK([cat stdout], 0, +[No platforms found! +Invalid platform +]) +AT_CLEANUP + +AT_SETUP([Choice 0, among 0 => CL_INVALID_PLATFORM]) +AT_EXPORT([OCL_ICD_DEBUG],[15], + [OCL_ICD_VENDORS],[unexisting-vendors-dir], + [OPENCL_ICD_DEFAULT_PLATFORM],[0]) +AT_CHECK([ocl_test --default-platform], 0, [stdout], [stderr]) +AT_CHECK([cat stdout], 0, +[No platforms found! +Invalid platform +]) +AT_CLEANUP + +AT_SETUP([Choice 1, among 0 => CL_INVALID_PLATFORM]) +AT_EXPORT([OCL_ICD_DEBUG],[15], + [OCL_ICD_VENDORS],[unexisting-vendors-dir], + [OPENCL_ICD_DEFAULT_PLATFORM],[1]) +AT_CHECK([ocl_test --default-platform], 0, [stdout], [stderr]) +AT_CHECK([cat stdout], 0, +[No platforms found! +Invalid platform +]) +AT_CLEANUP + +AT_SETUP([No choice, among 1 => default platform]) +AT_EXPORT([OCL_ICD_DEBUG],[7], + [OCL_ICD_VENDORS],[$abs_top_builddir/.libs/libdummycl.so]) +AT_UNSET([OPENCL_ICD_DEFAULT_PLATFORM]) +AT_CHECK([ocl_test --default-platform], 0, [stdout], [stderr]) +AT_CHECK([cat stdout], 0, +[Found 1 platforms! +ocl-icd ICD test +ocl-icd ICD test +]) +AT_CLEANUP + +AT_SETUP([Choice 0, among 1 => default platform]) +AT_EXPORT([OCL_ICD_DEBUG],[7], + [OCL_ICD_VENDORS],[$abs_top_builddir/.libs/libdummycl.so], + [OPENCL_ICD_DEFAULT_PLATFORM],[0]) +AT_CHECK([ocl_test --default-platform], 0, [stdout], [stderr]) +AT_CHECK([cat stdout], 0, +[Found 1 platforms! +ocl-icd ICD test +ocl-icd ICD test +]) +AT_CLEANUP + +AT_SETUP([Choice 1, among 1 => CL_INVALID_PLATFORM]) +AT_EXPORT([OCL_ICD_DEBUG],[7], + [OCL_ICD_VENDORS],[$abs_top_builddir/.libs/libdummycl.so], + [OPENCL_ICD_DEFAULT_PLATFORM],[1]) +AT_CHECK([ocl_test --default-platform], 0, [stdout], [stderr]) +AT_CHECK([cat stdout], 0, +[Found 1 platforms! +ocl-icd ICD test +Invalid platform +]) +AT_CLEANUP + +AT_SETUP([No choice, among 2 => one platform]) +AT_UNSET([OCL_ICD_ASSUME_ICD_EXTENSION]) +AT_EXPORT([OCL_ICD_DEBUG],[7], + [OCL_ICD_VENDORS],[$abs_top_builddir/vendors]) +AT_UNSET([OPENCL_ICD_DEFAULT_PLATFORM]) +AT_CHECK([ocl_test --default-platform], 0, [stdout], [stderr]) +dnl platforms can be listed in any order +AT_CHECK([env LC_ALL=C sort -u stdout], 0, +[Found 2 platforms! +ocl-icd ICD test +ocl-icd ICD test2 +]) +AT_CHECK([wc -l < stdout], 0, +[4 +]) +AT_CLEANUP + +AT_SETUP([Choice 0, among 2 => first platform]) +AT_UNSET([OCL_ICD_ASSUME_ICD_EXTENSION]) +AT_EXPORT([OCL_ICD_DEBUG],[7], + [OCL_ICD_VENDORS],[$abs_top_builddir/vendors], + [OPENCL_ICD_DEFAULT_PLATFORM],[0]) +AT_CHECK([ocl_test --default-platform], 0, [stdout], [stderr]) +dnl platforms can be listed in any order +AT_CHECK([head -n 2 stdout | tail -n 1 > expout], 0, []) +AT_CHECK([tail -n 1 stdout], 0, [expout]) +AT_CLEANUP + +AT_SETUP([Choice 1, among 2 => second platform]) +AT_UNSET([OCL_ICD_ASSUME_ICD_EXTENSION]) +AT_EXPORT([OCL_ICD_DEBUG],[7], + [OCL_ICD_VENDORS],[$abs_top_builddir/vendors], + [OPENCL_ICD_DEFAULT_PLATFORM],[1]) +AT_CHECK([ocl_test --default-platform], 0, [stdout], [stderr]) +dnl platforms can be listed in any order +AT_CHECK([head -n 3 stdout | tail -n 1 > expout], 0, []) +AT_CHECK([tail -n 1 stdout], 0, [expout]) +AT_CLEANUP + +AT_SETUP([Choice 2, among 2 => CL_INVALID_PLATFORM]) +AT_UNSET([OCL_ICD_ASSUME_ICD_EXTENSION]) +AT_EXPORT([OCL_ICD_DEBUG],[7], + [OCL_ICD_VENDORS],[$abs_top_builddir/vendors], + [OPENCL_ICD_DEFAULT_PLATFORM],[2]) +AT_CHECK([ocl_test --default-platform], 0, [stdout], [stderr]) +dnl platforms can be listed in any order +AT_CHECK([env LC_ALL=C sort stdout], 0, +[Found 2 platforms! +Invalid platform +ocl-icd ICD test +ocl-icd ICD test2 +]) +AT_CLEANUP diff --git a/tests/testsuite-standard.at b/tests/testsuite-standard.at index 387b1ec..96be1e6 100644 --- a/tests/testsuite-standard.at +++ b/tests/testsuite-standard.at @@ -4,7 +4,9 @@ AT_SETUP([invalid OCL_ICD_VENDORS]) AT_EXPORT([OCL_ICD_DEBUG],[15], [OCL_ICD_VENDORS],[unexisting-vendors-dir]) AT_CHECK([ocl_test], 0, [stdout], [stderr]) -AT_CHECK([grep "^No platforms found!$" stdout], 0, [ignore]) +AT_CHECK([cat stdout], 0, +[No platforms found! +]) AT_CLEANUP AT_SETUP([OCL_ICD_VENDORS as directory]) @@ -12,24 +14,32 @@ AT_UNSET([OCL_ICD_ASSUME_ICD_EXTENSION]) AT_EXPORT([OCL_ICD_DEBUG],[7], [OCL_ICD_VENDORS],[$abs_top_builddir/vendors]) AT_CHECK([ocl_test], 0, [stdout], [stderr]) -AT_CHECK([grep "^Found 1 platforms!$" stdout], 0, [ignore]) -AT_CHECK([grep "^ocl-icd ICD test$" stdout], 0, [ignore]) +dnl platforms can be listed in any order +AT_CHECK([env LC_ALL=C sort stdout], 0, +[Found 2 platforms! +ocl-icd ICD test +ocl-icd ICD test2 +]) AT_CLEANUP AT_SETUP([OCL_ICD_VENDORS as library file]) AT_EXPORT([OCL_ICD_DEBUG],[7], [OCL_ICD_VENDORS],[$abs_top_builddir/.libs/libdummycl.so]) AT_CHECK([ocl_test], 0, [stdout], [stderr]) -AT_CHECK([grep "^Found 1 platforms!$" stdout], 0, [ignore]) -AT_CHECK([grep "^ocl-icd ICD test$" stdout], 0, [ignore]) +AT_CHECK([cat stdout], 0, +[Found 1 platforms! +ocl-icd ICD test +]) AT_CLEANUP AT_SETUP([OCL_ICD_VENDORS as ICD file (.icd)]) AT_EXPORT([OCL_ICD_DEBUG],[7], [OCL_ICD_VENDORS],[$abs_top_builddir/vendors/dummycl.icd]) AT_CHECK([ocl_test], 0, [stdout], [stderr]) -AT_CHECK([grep "^Found 1 platforms!$" stdout], 0, [ignore]) -AT_CHECK([grep "^ocl-icd ICD test$" stdout], 0, [ignore]) +AT_CHECK([cat stdout], 0, +[Found 1 platforms! +ocl-icd ICD test +]) AT_CLEANUP AT_SETUP([Our dummy ICD through our ICD loader]) @@ -47,3 +57,4 @@ name: OpenCL ICD Loader vendor: OCL Icd free software ], []) AT_CLEANUP + diff --git a/tests/testsuite-workaround.at b/tests/testsuite-workaround.at index a879dda..b11364a 100644 --- a/tests/testsuite-workaround.at +++ b/tests/testsuite-workaround.at @@ -6,9 +6,12 @@ AT_EXPORT([OCL_ICD_ASSUME_ICD_EXTENSION], [1], [OCL_ICD_DEBUG],[7], [OCL_ICD_VENDORS],[$abs_top_builddir/vendors]) AT_CHECK([ocl_test], 0, [stdout], [stderr]) -AT_CHECK([grep "^Found 2 platforms!$" stdout], 0, [ignore]) -AT_CHECK([grep "^ocl-icd ICD test$" stdout], 0, [ignore]) -AT_CHECK([grep "^ocl-icd ICD test (no ext)$" stdout], 0, [ignore]) +AT_CHECK([env LC_ALL=C sort stdout], 0, +[Found 3 platforms! +ocl-icd ICD test +ocl-icd ICD test (no ext) +ocl-icd ICD test2 +]) AT_CLEANUP AT_SETUP([OCL_ICD_VENDORS as file, buggy ICD with workaround]) diff --git a/tests/testsuite.at b/tests/testsuite.at index 741f45f..7bb67ee 100644 --- a/tests/testsuite.at +++ b/tests/testsuite.at @@ -6,4 +6,5 @@ AT_INIT() AT_COLOR_TESTS m4_include([testsuite-standard.at]) +m4_include([testsuite-default-platform.at]) m4_include([testsuite-workaround.at]) -- 2.32.0.93.g670b81a890