Thread: [CEDET-devel] Unable to complete on OpenCL functions
Brought to you by:
zappo
From: Simon B. <li...@70...> - 2014-02-26 12:06:07
|
Hello, Semantic doesn't seem to be able to parse the OpenCL headers where functions are declared like this: extern CL_API_ENTRY cl_mem CL_API_CALL clCreateBuffer(cl_context /* context */, cl_mem_flags /* flags */, size_t /* size */, void * /* host_ptr */, cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0; It's picking up the typedefs and the hash defines so at least part of the file (cl.h) is successful. Is this a known problem? Simon |
From: David E. <de...@ra...> - 2014-02-27 21:48:35
|
Simon Brown writes: > Semantic doesn't seem to be able to parse the OpenCL headers where > functions are declared like this: > extern CL_API_ENTRY cl_mem CL_API_CALL > clCreateBuffer(cl_context /* context */, > cl_mem_flags /* flags */, > size_t /* size */, > void * /* host_ptr */, > cl_int * /* errcode_ret */) > CL_API_SUFFIX__VERSION_1_0; > > It's picking up the typedefs and the hash defines so at least part of > the file (cl.h) is successful. > > Is this a known problem? It's most probably a problem because of the preprocessor symbols which Semantic doesn't know. Where is CL_API_ENTRY, CL_API_CALL and CL_API_SUFFIX__VERSION_1_0 defined? -David |
From: Simon B. <li...@70...> - 2014-02-28 12:08:34
|
On Thu, 27 Feb 2014, at 09:48 PM, David Engster wrote: > Simon Brown writes: > > Semantic doesn't seem to be able to parse the OpenCL headers where > > functions are declared like this: > > extern CL_API_ENTRY cl_mem CL_API_CALL > > clCreateBuffer(cl_context /* context */, > > cl_mem_flags /* flags */, > > size_t /* size */, > > void * /* host_ptr */, > > cl_int * /* errcode_ret */) > > CL_API_SUFFIX__VERSION_1_0; > > > > It's picking up the typedefs and the hash defines so at least part of > > the file (cl.h) is successful. > > > > Is this a known problem? > > It's most probably a problem because of the preprocessor symbols which > Semantic doesn't know. Where is CL_API_ENTRY, CL_API_CALL and > CL_API_SUFFIX__VERSION_1_0 defined? They're defined in cl_platform.h which is included by cl.h. Their value is platform dependant, but on Linux they are empty: #if defined(_WIN32) #define CL_API_ENTRY #define CL_API_CALL __stdcall #define CL_CALLBACK __stdcall #else #define CL_API_ENTRY #define CL_API_CALL #define CL_CALLBACK #endif #ifdef __APPLE__ #define CL_EXTENSION_WEAK_LINK __attribute__((weak_import)) #define CL_API_SUFFIX__VERSION_1_0 AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER #define CL_EXT_SUFFIX__VERSION_1_0 CL_EXTENSION_WEAK_LINK AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER #define CL_API_SUFFIX__VERSION_1_1 CL_EXTENSION_WEAK_LINK #define CL_EXT_SUFFIX__VERSION_1_1 CL_EXTENSION_WEAK_LINK #define CL_EXT_SUFFIX__VERSION_1_0_DEPRECATED CL_EXTENSION_WEAK_LINK AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER #else #define CL_EXTENSION_WEAK_LINK #define CL_API_SUFFIX__VERSION_1_0 #define CL_EXT_SUFFIX__VERSION_1_0 #define CL_API_SUFFIX__VERSION_1_1 #define CL_EXT_SUFFIX__VERSION_1_1 #define CL_EXT_SUFFIX__VERSION_1_0_DEPRECATED #endif Simon |
From: David E. <de...@ra...> - 2014-03-09 20:52:35
|
Simon Brown writes: > They're defined in cl_platform.h which is included by cl.h. Sorry for the late reply. You need to let Semantic know that it should include all preprocessor definitions from cl_platform.h when parsing other files. The easiest way to do that is by using (require 'semantic/bovine/c) (add-to-list 'semantic-lex-c-preprocessor-symbol-file "<full path>/cl_platform.h") in your emacs init file. For this to take effect, you will have start fresh by quitting Emacs and deleting all cache files in ~/.emacs.d/semantidb. -David |
From: Simon B. <li...@70...> - 2014-03-10 11:54:59
|
Thanks, that did the trick. On Sun, 9 Mar 2014, at 08:52 PM, David Engster wrote: > Simon Brown writes: > > They're defined in cl_platform.h which is included by cl.h. > > Sorry for the late reply. > > You need to let Semantic know that it should include all preprocessor > definitions from cl_platform.h when parsing other files. The easiest way > to do that is by using > > (require 'semantic/bovine/c) > (add-to-list 'semantic-lex-c-preprocessor-symbol-file "<full > path>/cl_platform.h") > > in your emacs init file. For this to take effect, you will have start > fresh by quitting Emacs and deleting all cache files in > ~/.emacs.d/semantidb. > > -David |