[FFmpeg-devel] configure needs to check for OpenCL version 1.2 and look elsewhere as well
Wei Gao
highgod0401 at gmail.com
Sun Apr 21 13:33:07 CEST 2013
Hi
2013/4/20 Hanspeter Niederstrasser <niederstrasser at gmail.com>
> On Fri, Apr 19, 2013 at 10:52 PM, Wei Gao <highgod0401 at gmail.com> wrote:
> > Hi, sorry for replying late, and also I am not familiar with configure
> > things, I do some works and test as your patch, some comments as follows:
>
> No problem. I'm also trying to figure this out as I go.
>
> > 2013/4/13 Hanspeter Niederstrasser <niederstrasser at gmail.com>
> >
> >> The OpenCL test just checks for CL/cl.h which doesn't exist on OS X
> >> (it's at OpenCL/cl.h). In trying to fix that, I also noticed that
> >> ffmpeg needs OpenCL >= 1.2, so I tried to add a version check to
> >> configure as well. Here's my current patch, but it is not setting
> >> HAVE_OPENCL_CL_H, even though config.log says that the header and
> >> library were found.
> >>
> >> diff --git a/configure b/configure
> >> index fe976fd..83bb71f 100755
> >> --- a/configure
> >> +++ b/configure
> >> @@ -1471,6 +1471,7 @@ HAVE_LIST="
> >> mprotect
> >> msvcrt
> >> nanosleep
> >> + opencl_cl_h
> >> openjpeg_1_5_openjpeg_h
> >> PeekNamedPipe
> >> perl
> >>
> > it should add a check header line:check_header opencl/cl.h to set the
> > opencl_cl_h
>
> Both check_lib() and require() already call check_header(), but even
> when I just use
>
> enabled opencl && check_header OpenCL/cl.h
>
> HAVE_OPENCL_CL_H is not set in config.log. To make sure my syntax is
> right, when I search for the completely unrelated header
> "exiv2/exv_conf.h", HAVE_EXIV2_EXV_CONF_H is set to 1 in config.log.
>
I use CL_CL_H to test on my computer:
1. check_header cl/cl.h
2.HAVE_LIST="
cl_cl_h
the HAVE_CL_CL_H can be set to 1, and the result is correct. Do you try
that?
>
> >> @@ -4034,7 +4035,12 @@ enabled openal && { { for al_libs in
> >> "${OPENAL_LIBS}" "-lopenal" "-lOpenAL32
> >> die "ERROR: openal not found"; } &&
> >> { check_cpp_condition "AL/al.h"
> >> "defined(AL_VERSION_1_1)" ||
> >> die "ERROR: openal must be installed and
> >> version must be 1.1 or compatible"; }
> >> -enabled opencl && require2 opencl CL/cl.h clEnqueueNDRangeKernel
> >> -lOpenCL
> >> +enabled opencl && { check_lib OpenCL/cl.h clEnqueueNDRangeKernel
> >> -Wl,-framework,OpenCL ||
> >> + check_lib CL/cl.h clEnqueueNDRangeKernel
> -lOpenCL
> >> ||
> >> + die "ERROR: opencl not found"; } &&
> >> + { check_cpp_condition "OpenCL/cl.h"
> >> "defined(CL_VERSION_1_2)" ||
> >> + check_cpp_condition "CL/cl.h"
> >> "defined(CL_VERSION_1_2)" ||
> >> + die "ERROR: opencl must be installed and
> >> version must be 1.2 or compatible"; }
> >>
> > I tried this on my computer, it does not pass the configure, I think it
> > should be written like this:
> > enabled opencl && { check_lib2 OpenCL/cl.h clEnqueueNDRangeKernel
> > -Wl,-framework,OpenCL ||
> > check_lib2 CL/cl.h clEnqueueNDRangeKernel
> -lOpenCL
> > ||
> > die "ERROR: opencl not found"; } &&
> > { check_cpp_condition "OpenCL/cl.h"
> > "defined(CL_VERSION_1_2)" ||
> > check_cpp_condition "CL/cl.h"
> > "defined(CL_VERSION_1_2)" ||
> > die "ERROR: opencl must be installed and version
> > must be 1.2 or compatible"; }
> > use check_lib2 to check, and this can pass on my computer.
>
> I've tried that too and configure accepts it, but config.log doesn't
> provide any indication that the header or the library were not found.
> If I give it a non-existing header, configure errors out, so the
> syntax seems right.
>
> when I use check_lib, the configure can't find clEnqueueNDRangeKernel,
if you use bin tools to review the lib, you can find that the function has
"@" symbol, I think it is a CPP lib and you can't use check_lib to detect
the function, you should use check_lib2, check_lib can't pass on my
computer.
> And I want to
> > ask a question: -Wl,-framework,OpenCL, what does these mean? Isn't
> > -lOpenCL OK?
>
> On OS X, the system OpenCL is found inside a Framework, rather than in
> the usual $(PREFIX)/{include,lib} layout found in most other systems,
> so -lOpenCL will not work. The actual file path is complicated, but
> OS X compilers and linkers know where to search for Frameworks if
> provided with a header of the form "OpenCL/cl.h" and a library of
> "-framework OpenCL". The "-Wl,-framework,OpenCL" string is just an
> alternative syntax so that the compiler passes "-framework OpenCL" to
> the linker.
>
>
> https://developer.apple.com/library/mac/#documentation/MacOSX/Conceptual/BPFrameworks/Tasks/IncludingFrameworks.html
can it pass the configuer stage? you can use cflags to indicate the path.
>
>
> > enabled openssl && { check_lib openssl/ssl.h SSL_library_init
> >> -lssl -lcrypto ||
> >> check_lib openssl/ssl.h SSL_library_init
> >> -lssl32 -leay32 ||
> >> check_lib openssl/ssl.h SSL_library_init
> >> -lssl -lcrypto -lws2_32 -lgdi32 ||
> >> diff --git a/libavutil/opencl.h b/libavutil/opencl.h
> >> index acafe36..5450537 100644
> >> --- a/libavutil/opencl.h
> >> +++ b/libavutil/opencl.h
> >> @@ -31,7 +31,11 @@
> >> #ifndef LIBAVUTIL_OPENCL_H
> >> #define LIBAVUTIL_OPENCL_H
> >>
> >> +#if HAVE_OPENCL_CL_H
> >> +#include <OpenCL/cl.h>
> >> +#else
> >> #include <CL/cl.h>
> >> +#endif
> >> #include "config.h"
> >> #include "dict.h"
> >>
> > I think the #include "config.h" should above the #if HAVE_OPENCL_CL_H
> > line. It should be written as follows:
> >
> > #include "config.h"
> > +#if HAVE_OPENCL_CL_H
> > +#include <OpenCL/cl.h>
> > +#else
> > #include <CL/cl.h>
> > +#endif
> > #include "dict.h"
>
> You're right. I had kept the original order, but config.h is needed
> to find HAVE_OPENCL_CL_H.
>
> An alternative would be to conditional the header choice in opencl.h
> on __APPLE__ instead of HAVE_OPENCL_CL_H. The configure check does
> seem to work (it sets EXTRALIBS correctly, for example), but it would
> be nice to find out why HAVE_OPENCL_CL_H is not being set. Thanks
> again for your help.
>
HAVE_OPENCL_CL_H can be set because the HAVE_CL_CL_H can be set on my
computer, you can try my method.
I use __APPLE__ in my previous patches, but it should be detected on the
configure stage, and stop the compile if the environment is not correct.
>
> Hanspeter
>
> --
> Disclaimer:
> By sending an email to ANY of my addresses you are agreeing that:
> 1. I am by definition, "the intended recipient"
> 2. All information in the email is mine to do with as I see fit and
> make such financial profit, political mileage, or good joke as it
> lends itself to.
> 3. I may take the contents as representing the views of your company.
> 4. This overrides any disclaimer or statement of confidentiality that
> may be included with your message.
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
More information about the ffmpeg-devel
mailing list