| Message ID | 20220917115642.766941-1-andrey.konovalov@linaro.org |
|---|---|
| Headers | show |
| Series | mesa: clover | Microsoft/Intel CLC: fix building OpenCL programs | expand |
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] > -=-=-=-=-=-=-=-=-=-=-=- >
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] >> -=-=-=-=-=-=-=-=-=-=-=- >>
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