mbox series

[RFC,0/1] mesa: clover | Microsoft/Intel CLC: fix building OpenCL programs

Message ID 20220917115642.766941-1-andrey.konovalov@linaro.org
Headers show
Series mesa: clover | Microsoft/Intel CLC: fix building OpenCL programs | expand

Message

Andrey Konovalov Sept. 17, 2022, 11:56 a.m. UTC
This fixes the errors like:

-----8<-----
dragonboard-845c:~$ clinfo
<snip>
   Max work group size                             1024
=== CL_PROGRAM_BUILD_LOG ===
<built-in>:1:10: fatal error: 'opencl-c.h' file not found
   Preferred work group size multiple (kernel)     <getWGsizes:1504: create ker>
   Preferred / native vector sizes
     char                                                16 / 16
<snip>
-----8<----- 

Here clinfo runs on target board and produces correct output except for
the "Preferred work group size multiple (kernel)" item. This is the only
item which requires clinfo to build and run a small OpenCL kernel. But
building OpenCL program fails as clover can't find the include file.

The reason is that the include search path is set at mesa build time by
setting CLANG_RESOURCE_DIR to "$(llvm-config --libdir)something" and
passing it in cpp args. This results in path to sysroot included into
CLANG_RESOURCE_DIR:

-----8<-----
dragonboard-845c:~$ strace clinfo 2>&1|grep include
newfstatat(AT_FDCWD, "/workdir/master.test/build-rpb/tmp-rpb-glibc/work/armv8-2>
newfstatat(AT_FDCWD, "/usr/local/include", 0xfffffc3bad68, 0) = -1 ENOENT (No s>
newfstatat(AT_FDCWD, "/workdir/master.test/build-rpb/tmp-rpb-glibc/work/armv8-2>
newfstatat(AT_FDCWD, "/usr/include", {st_mode=S_IFDIR|0755, st_size=12288, ...}>
openat(AT_FDCWD, "/usr/include/opencl-c.h", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No>
-----8<----- 

Hence clover fails to locate /usr/lib/clang/14.0.6/include/opencl-c.h.

Microsoft/Intel CLC *should* have the same problem, as the code in
compiler/clc/clc_helpers.cpp is pretty close to the one in
gallium/frontends/clover/llvm/invocation.cpp. Except for the case when 
the contents of opencl-c.h is compiled into the CLC library (seems to be 
the most common configuration for Windows), and the problem with locating
the include file on the target fs doesn't exist.

This patch is RFC for two reasons:
* I am not sure if using hardcoded "/usr/lib" is good enough
* The compiler/clc/clc_helpers.cpp part is not tested. Maybe splitting
  the patch into two - the clover and the Microsoft/Intel CLC parts separated -
  would make more sense.

Last note for those to try reproducing the build with clover:
clover uses libclc from meta-clang. meta-clang master branch has moved to
clang 15.0.0 recently, which breaks mesa build as the mesa fixes to account
for clang 15.0.0 changes have been merged into mesa main branch, but have not
yet made it into the last mesa release.
My temporary solution is rolling meta-clang back to the commit just before the
14.0.6 -> 15.0.0 update, and cherry-picking "llvm-config: Replace TARGET_*
flags with normal equivalent flags". The latter is not required in my case,
it just makes llvm-config wrapper from meta-clang (the one used in this build)
to look closer to the llvm-config wrapper from oe-core.

Andrey Konovalov (1):
  mesa: fix building OpenCL programs

 ...-meson.CLANG_RESOURCE_DIR-workaround.patch | 42 +++++++++++++++++++
 meta/recipes-graphics/mesa/mesa.inc           |  1 +
 2 files changed, 43 insertions(+)
 create mode 100644 meta/recipes-graphics/mesa/files/0001-meson.CLANG_RESOURCE_DIR-workaround.patch

Comments

Khem Raj Sept. 17, 2022, 4:38 p.m. UTC | #1
On Sat, Sep 17, 2022 at 4:56 AM Andrey Konovalov
<andrey.konovalov@linaro.org> wrote:
>
> This fixes the errors like:
>
> -----8<-----
> dragonboard-845c:~$ clinfo
> <snip>
>    Max work group size                             1024
> === CL_PROGRAM_BUILD_LOG ===
> <built-in>:1:10: fatal error: 'opencl-c.h' file not found
>    Preferred work group size multiple (kernel)     <getWGsizes:1504: create ker>
>    Preferred / native vector sizes
>      char                                                16 / 16
> <snip>
> -----8<-----
>
> Here clinfo runs on target board and produces correct output except for
> the "Preferred work group size multiple (kernel)" item. This is the only
> item which requires clinfo to build and run a small OpenCL kernel. But
> building OpenCL program fails as clover can't find the include file.
>
> The reason is that the include search path is set at mesa build time by
> setting CLANG_RESOURCE_DIR to "$(llvm-config --libdir)something" and
> passing it in cpp args. This results in path to sysroot included into
> CLANG_RESOURCE_DIR:
>
> -----8<-----
> dragonboard-845c:~$ strace clinfo 2>&1|grep include
> newfstatat(AT_FDCWD, "/workdir/master.test/build-rpb/tmp-rpb-glibc/work/armv8-2>
> newfstatat(AT_FDCWD, "/usr/local/include", 0xfffffc3bad68, 0) = -1 ENOENT (No s>
> newfstatat(AT_FDCWD, "/workdir/master.test/build-rpb/tmp-rpb-glibc/work/armv8-2>
> newfstatat(AT_FDCWD, "/usr/include", {st_mode=S_IFDIR|0755, st_size=12288, ...}>
> openat(AT_FDCWD, "/usr/include/opencl-c.h", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No>
> -----8<-----
>
> Hence clover fails to locate /usr/lib/clang/14.0.6/include/opencl-c.h.
>
> Microsoft/Intel CLC *should* have the same problem, as the code in
> compiler/clc/clc_helpers.cpp is pretty close to the one in
> gallium/frontends/clover/llvm/invocation.cpp. Except for the case when
> the contents of opencl-c.h is compiled into the CLC library (seems to be
> the most common configuration for Windows), and the problem with locating
> the include file on the target fs doesn't exist.
>
> This patch is RFC for two reasons:
> * I am not sure if using hardcoded "/usr/lib" is good enough
> * The compiler/clc/clc_helpers.cpp part is not tested. Maybe splitting
>   the patch into two - the clover and the Microsoft/Intel CLC parts separated -
>   would make more sense.
>
> Last note for those to try reproducing the build with clover:
> clover uses libclc from meta-clang. meta-clang master branch has moved to
> clang 15.0.0 recently, which breaks mesa build as the mesa fixes to account
> for clang 15.0.0 changes have been merged into mesa main branch, but have not
> yet made it into the last mesa release.
> My temporary solution is rolling meta-clang back to the commit just before the
> 14.0.6 -> 15.0.0 update, and cherry-picking "llvm-config: Replace TARGET_*
> flags with normal equivalent flags". The latter is not required in my case,
> it just makes llvm-config wrapper from meta-clang (the one used in this build)
> to look closer to the llvm-config wrapper from oe-core.
>
> Andrey Konovalov (1):
>   mesa: fix building OpenCL programs
>
>  ...-meson.CLANG_RESOURCE_DIR-workaround.patch | 42 +++++++++++++++++++
>  meta/recipes-graphics/mesa/mesa.inc           |  1 +
>  2 files changed, 43 insertions(+)
>  create mode 100644 meta/recipes-graphics/mesa/files/0001-meson.CLANG_RESOURCE_DIR-workaround.patch
>

I am not able to find the patch with above changes. Did you miss sending it ?


> --
> 2.25.1
>
>
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#170827): https://lists.openembedded.org/g/openembedded-core/message/170827
> Mute This Topic: https://lists.openembedded.org/mt/93741464/1997914
> Group Owner: openembedded-core+owner@lists.openembedded.org
> Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [raj.khem@gmail.com]
> -=-=-=-=-=-=-=-=-=-=-=-
>
Andrey Konovalov Sept. 18, 2022, 12:06 p.m. UTC | #2
On 9/17/22 19:38, Khem Raj wrote:
> On Sat, Sep 17, 2022 at 4:56 AM Andrey Konovalov
> <andrey.konovalov@linaro.org> wrote:
>>
>> This fixes the errors like:
>>
>> -----8<-----
>> dragonboard-845c:~$ clinfo
>> <snip>
>>     Max work group size                             1024
>> === CL_PROGRAM_BUILD_LOG ===
>> <built-in>:1:10: fatal error: 'opencl-c.h' file not found
>>     Preferred work group size multiple (kernel)     <getWGsizes:1504: create ker>
>>     Preferred / native vector sizes
>>       char                                                16 / 16
>> <snip>
>> -----8<-----
>>
>> Here clinfo runs on target board and produces correct output except for
>> the "Preferred work group size multiple (kernel)" item. This is the only
>> item which requires clinfo to build and run a small OpenCL kernel. But
>> building OpenCL program fails as clover can't find the include file.
>>
>> The reason is that the include search path is set at mesa build time by
>> setting CLANG_RESOURCE_DIR to "$(llvm-config --libdir)something" and
>> passing it in cpp args. This results in path to sysroot included into
>> CLANG_RESOURCE_DIR:
>>
>> -----8<-----
>> dragonboard-845c:~$ strace clinfo 2>&1|grep include
>> newfstatat(AT_FDCWD, "/workdir/master.test/build-rpb/tmp-rpb-glibc/work/armv8-2>
>> newfstatat(AT_FDCWD, "/usr/local/include", 0xfffffc3bad68, 0) = -1 ENOENT (No s>
>> newfstatat(AT_FDCWD, "/workdir/master.test/build-rpb/tmp-rpb-glibc/work/armv8-2>
>> newfstatat(AT_FDCWD, "/usr/include", {st_mode=S_IFDIR|0755, st_size=12288, ...}>
>> openat(AT_FDCWD, "/usr/include/opencl-c.h", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No>
>> -----8<-----
>>
>> Hence clover fails to locate /usr/lib/clang/14.0.6/include/opencl-c.h.
>>
>> Microsoft/Intel CLC *should* have the same problem, as the code in
>> compiler/clc/clc_helpers.cpp is pretty close to the one in
>> gallium/frontends/clover/llvm/invocation.cpp. Except for the case when
>> the contents of opencl-c.h is compiled into the CLC library (seems to be
>> the most common configuration for Windows), and the problem with locating
>> the include file on the target fs doesn't exist.
>>
>> This patch is RFC for two reasons:
>> * I am not sure if using hardcoded "/usr/lib" is good enough
>> * The compiler/clc/clc_helpers.cpp part is not tested. Maybe splitting
>>    the patch into two - the clover and the Microsoft/Intel CLC parts separated -
>>    would make more sense.
>>
>> Last note for those to try reproducing the build with clover:
>> clover uses libclc from meta-clang. meta-clang master branch has moved to
>> clang 15.0.0 recently, which breaks mesa build as the mesa fixes to account
>> for clang 15.0.0 changes have been merged into mesa main branch, but have not
>> yet made it into the last mesa release.
>> My temporary solution is rolling meta-clang back to the commit just before the
>> 14.0.6 -> 15.0.0 update, and cherry-picking "llvm-config: Replace TARGET_*
>> flags with normal equivalent flags". The latter is not required in my case,
>> it just makes llvm-config wrapper from meta-clang (the one used in this build)
>> to look closer to the llvm-config wrapper from oe-core.
>>
>> Andrey Konovalov (1):
>>    mesa: fix building OpenCL programs
>>
>>   ...-meson.CLANG_RESOURCE_DIR-workaround.patch | 42 +++++++++++++++++++
>>   meta/recipes-graphics/mesa/mesa.inc           |  1 +
>>   2 files changed, 43 insertions(+)
>>   create mode 100644 meta/recipes-graphics/mesa/files/0001-meson.CLANG_RESOURCE_DIR-workaround.patch
>>
> 
> I am not able to find the patch with above changes. Did you miss sending it ?

Yes, I did...
Will see if I can find something better then hardcoded '/usr/lib', and submit
the patch to https://gitlab.freedesktop.org/mesa/mesa

Thanks,
Andrey

>> --
>> 2.25.1
>>
>>
>> -=-=-=-=-=-=-=-=-=-=-=-
>> Links: You receive all messages sent to this group.
>> View/Reply Online (#170827): https://lists.openembedded.org/g/openembedded-core/message/170827
>> Mute This Topic: https://lists.openembedded.org/mt/93741464/1997914
>> Group Owner: openembedded-core+owner@lists.openembedded.org
>> Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [raj.khem@gmail.com]
>> -=-=-=-=-=-=-=-=-=-=-=-
>>