Message ID | 20250530205609.3185264-1-raj.khem@gmail.com |
---|---|
State | New |
Headers | show |
Series | [v5] pixmap: Enable openmp support with clang compiler | expand |
On Fri, 30 May 2025 at 22:56, Khem Raj via lists.openembedded.org
<raj.khem=gmail.com@lists.openembedded.org> wrote:
> +PACKAGECONFIG[openmp] = ",-Dopenmp=disabled,${OPENMP}"
There should be an explicit enablement too, otherwise we rely on
upstream default for it, which can silently change.
Alex
On Fri, 2025-05-30 at 13:56 -0700, Khem Raj via lists.openembedded.org wrote: > pixman's meson detects openmp support and if it finds it in runtime then > enables it, this happens for gcc via gcc-runtime, however for clang, it > does not. In some cases e.g. mips it enables it during configure only to > find that clang can not find the libomp during linking. Therefore, add > the dependency on openmp when using clang compiler. This ensures consistent > behaviour across architectures. > > Disable internal assembler on mips since it can not handle the inline assembly > > Turn openmp into a packageconfig > > openmp is not yet ported to all architectures e.g. RISCV32/PPC32 > does not have it > > Signed-off-by: Khem Raj <raj.khem@gmail.com> > --- > v5: Remove openmp on rv32 and ppc32 > > meta/recipes-graphics/xorg-lib/pixman_0.46.0.bb | 13 ++++++++++++- > 1 file changed, 12 insertions(+), 1 deletion(-) > > diff --git a/meta/recipes-graphics/xorg-lib/pixman_0.46.0.bb b/meta/recipes-graphics/xorg-lib/pixman_0.46.0.bb > index c1c71fd4202..925a7d7b29b 100644 > --- a/meta/recipes-graphics/xorg-lib/pixman_0.46.0.bb > +++ b/meta/recipes-graphics/xorg-lib/pixman_0.46.0.bb > @@ -23,6 +23,17 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=14096c769ae0cbb5fcb94ec468be11b3 \ > > inherit meson pkgconfig > > +OPENMP ?= "" > +OPENMP:toolchain-clang = "openmp" > +# openmp is not yet ported to rv32/ppc > +OPENMP:remove:riscv32 = "openmp" > +OPENMP:remove:powerpc = "openmp" > + > +PACKAGECONFIG ??= "openmp" > +PACKAGECONFIG:class-native ?= "" > + > +PACKAGECONFIG[openmp] = ",-Dopenmp=disabled,${OPENMP}" > + > # These are for the tests and demos, which we don't install > EXTRA_OEMESON = "-Dgtk=disabled -Dlibpng=disabled" > # ld: pixman/libpixman-mmx.a(pixman-mmx.c.o): > @@ -36,7 +47,7 @@ EXTRA_OEMESON:append:class-target:powerpc64le = " ${@bb.utils.contains("TUNE_FEA > EXTRA_OEMESON:append:armv7a = "${@bb.utils.contains("TUNE_FEATURES","neon",""," -Dneon=disabled",d)}" > EXTRA_OEMESON:append:armv7ve = "${@bb.utils.contains("TUNE_FEATURES","neon",""," -Dneon=disabled",d)}" > > -EXTRA_OEMESON:append:class-native = " -Dopenmp=disabled" > +CFLAGS:append:toolchain-clang:mipsarch = " -fno-integrated-as" > > BBCLASSEXTEND = "native nativesdk" I think this needs more discussion or potentially a better fix. Potentially the test for openmp in pixman is wrong and it shouldn't build if it can find the header but not the library. Alternatively, if the openmp library can't be built, why are we shipping the header? Should we delete it in that case? Something doesn't see right here and I think we need to fix the root cause. Cheers, Richard
On Mon, Jun 2, 2025 at 2:41 PM Richard Purdie < richard.purdie@linuxfoundation.org> wrote: > On Fri, 2025-05-30 at 13:56 -0700, Khem Raj via lists.openembedded.org > wrote: > > pixman's meson detects openmp support and if it finds it in runtime then > > enables it, this happens for gcc via gcc-runtime, however for clang, it > > does not. In some cases e.g. mips it enables it during configure only to > > find that clang can not find the libomp during linking. Therefore, add > > the dependency on openmp when using clang compiler. This ensures > consistent > > behaviour across architectures. > > > > Disable internal assembler on mips since it can not handle the inline > assembly > > > > Turn openmp into a packageconfig > > > > openmp is not yet ported to all architectures e.g. RISCV32/PPC32 > > does not have it > > > > Signed-off-by: Khem Raj <raj.khem@gmail.com> > > --- > > v5: Remove openmp on rv32 and ppc32 > > > > meta/recipes-graphics/xorg-lib/pixman_0.46.0.bb | 13 ++++++++++++- > > 1 file changed, 12 insertions(+), 1 deletion(-) > > > > diff --git a/meta/recipes-graphics/xorg-lib/pixman_0.46.0.bb > b/meta/recipes-graphics/xorg-lib/pixman_0.46.0.bb > > index c1c71fd4202..925a7d7b29b 100644 > > --- a/meta/recipes-graphics/xorg-lib/pixman_0.46.0.bb > > +++ b/meta/recipes-graphics/xorg-lib/pixman_0.46.0.bb > > @@ -23,6 +23,17 @@ LIC_FILES_CHKSUM = > "file://COPYING;md5=14096c769ae0cbb5fcb94ec468be11b3 \ > > > > inherit meson pkgconfig > > > > +OPENMP ?= "" > > +OPENMP:toolchain-clang = "openmp" > > +# openmp is not yet ported to rv32/ppc > > +OPENMP:remove:riscv32 = "openmp" > > +OPENMP:remove:powerpc = "openmp" > > + > > +PACKAGECONFIG ??= "openmp" > > +PACKAGECONFIG:class-native ?= "" > > + > > +PACKAGECONFIG[openmp] = ",-Dopenmp=disabled,${OPENMP}" > > + > > # These are for the tests and demos, which we don't install > > EXTRA_OEMESON = "-Dgtk=disabled -Dlibpng=disabled" > > # ld: pixman/libpixman-mmx.a(pixman-mmx.c.o): > > @@ -36,7 +47,7 @@ EXTRA_OEMESON:append:class-target:powerpc64le = " > ${@bb.utils.contains("TUNE_FEA > > EXTRA_OEMESON:append:armv7a = > "${@bb.utils.contains("TUNE_FEATURES","neon",""," -Dneon=disabled",d)}" > > EXTRA_OEMESON:append:armv7ve = > "${@bb.utils.contains("TUNE_FEATURES","neon",""," -Dneon=disabled",d)}" > > > > -EXTRA_OEMESON:append:class-native = " -Dopenmp=disabled" > > +CFLAGS:append:toolchain-clang:mipsarch = " -fno-integrated-as" > > > > BBCLASSEXTEND = "native nativesdk" > > I think this needs more discussion or potentially a better fix. > > Potentially the test for openmp in pixman is wrong and it shouldn't > build if it can find the header but not the library. > This is worth exploring more and if we can make the test robust it will benefit overall > Alternatively, if the openmp library can't be built, why are we > shipping the header? Should we delete it in that case? > Header is installed by gcc-runtime package > Something doesn't see right here and I think we need to fix the root > cause > > Cheers, > > Richard > > > > >
On Mon, 2025-06-02 at 15:07 -0700, Khem Raj wrote: > On Mon, Jun 2, 2025 at 2:41 PM Richard Purdie > <richard.purdie@linuxfoundation.org> wrote: > > On Fri, 2025-05-30 at 13:56 -0700, Khem Raj via > > lists.openembedded.org wrote: > > > pixman's meson detects openmp support and if it finds it in > > > runtime then > > > enables it, this happens for gcc via gcc-runtime, however for > > > clang, it > > > does not. In some cases e.g. mips it enables it during configure > > > only to > > > find that clang can not find the libomp during linking. > > > Therefore, add > > > the dependency on openmp when using clang compiler. This ensures > > > consistent > > > behaviour across architectures. > > > > > > Disable internal assembler on mips since it can not handle the > > > inline assembly > > > > > > Turn openmp into a packageconfig > > > > > > openmp is not yet ported to all architectures e.g. RISCV32/PPC32 > > > does not have it > > > > > > Signed-off-by: Khem Raj <raj.khem@gmail.com> > > > --- > > > v5: Remove openmp on rv32 and ppc32 > > > > > > meta/recipes-graphics/xorg-lib/pixman_0.46.0.bb | 13 > > > ++++++++++++- > > > 1 file changed, 12 insertions(+), 1 deletion(-) > > > > > > diff --git a/meta/recipes-graphics/xorg-lib/pixman_0.46.0.bb > > > b/meta/recipes-graphics/xorg-lib/pixman_0.46.0.bb > > > index c1c71fd4202..925a7d7b29b 100644 > > > --- a/meta/recipes-graphics/xorg-lib/pixman_0.46.0.bb > > > +++ b/meta/recipes-graphics/xorg-lib/pixman_0.46.0.bb > > > @@ -23,6 +23,17 @@ LIC_FILES_CHKSUM = > > > "file://COPYING;md5=14096c769ae0cbb5fcb94ec468be11b3 \ > > > > > > inherit meson pkgconfig > > > > > > +OPENMP ?= "" > > > +OPENMP:toolchain-clang = "openmp" > > > +# openmp is not yet ported to rv32/ppc > > > +OPENMP:remove:riscv32 = "openmp" > > > +OPENMP:remove:powerpc = "openmp" > > > + > > > +PACKAGECONFIG ??= "openmp" > > > +PACKAGECONFIG:class-native ?= "" > > > + > > > +PACKAGECONFIG[openmp] = ",-Dopenmp=disabled,${OPENMP}" > > > + > > > # These are for the tests and demos, which we don't install > > > EXTRA_OEMESON = "-Dgtk=disabled -Dlibpng=disabled" > > > # ld: pixman/libpixman-mmx.a(pixman-mmx.c.o): > > > @@ -36,7 +47,7 @@ EXTRA_OEMESON:append:class-target:powerpc64le = > > > " ${@bb.utils.contains("TUNE_FEA > > > EXTRA_OEMESON:append:armv7a = > > > "${@bb.utils.contains("TUNE_FEATURES","neon",""," - > > > Dneon=disabled",d)}" > > > EXTRA_OEMESON:append:armv7ve = > > > "${@bb.utils.contains("TUNE_FEATURES","neon",""," - > > > Dneon=disabled",d)}" > > > > > > -EXTRA_OEMESON:append:class-native = " -Dopenmp=disabled" > > > +CFLAGS:append:toolchain-clang:mipsarch = " -fno-integrated-as" > > > > > > BBCLASSEXTEND = "native nativesdk" > > > > I think this needs more discussion or potentially a better fix. > > > > Potentially the test for openmp in pixman is wrong and it shouldn't > > build if it can find the header but not the library. > > > > This is worth exploring more and if we can make the test robust it > will benefit overall Agreed. > > Alternatively, if the openmp library can't be built, why are we > > shipping the header? Should we delete it in that case? > > > > > Header is installed by gcc-runtime package We could delete it if the library isn't present... You have to wonder why the code is installing it if the lib doesn't exist. Is that standard upstream behaviour? Cheers, Richard
diff --git a/meta/recipes-graphics/xorg-lib/pixman_0.46.0.bb b/meta/recipes-graphics/xorg-lib/pixman_0.46.0.bb index c1c71fd4202..925a7d7b29b 100644 --- a/meta/recipes-graphics/xorg-lib/pixman_0.46.0.bb +++ b/meta/recipes-graphics/xorg-lib/pixman_0.46.0.bb @@ -23,6 +23,17 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=14096c769ae0cbb5fcb94ec468be11b3 \ inherit meson pkgconfig +OPENMP ?= "" +OPENMP:toolchain-clang = "openmp" +# openmp is not yet ported to rv32/ppc +OPENMP:remove:riscv32 = "openmp" +OPENMP:remove:powerpc = "openmp" + +PACKAGECONFIG ??= "openmp" +PACKAGECONFIG:class-native ?= "" + +PACKAGECONFIG[openmp] = ",-Dopenmp=disabled,${OPENMP}" + # These are for the tests and demos, which we don't install EXTRA_OEMESON = "-Dgtk=disabled -Dlibpng=disabled" # ld: pixman/libpixman-mmx.a(pixman-mmx.c.o): @@ -36,7 +47,7 @@ EXTRA_OEMESON:append:class-target:powerpc64le = " ${@bb.utils.contains("TUNE_FEA EXTRA_OEMESON:append:armv7a = "${@bb.utils.contains("TUNE_FEATURES","neon",""," -Dneon=disabled",d)}" EXTRA_OEMESON:append:armv7ve = "${@bb.utils.contains("TUNE_FEATURES","neon",""," -Dneon=disabled",d)}" -EXTRA_OEMESON:append:class-native = " -Dopenmp=disabled" +CFLAGS:append:toolchain-clang:mipsarch = " -fno-integrated-as" BBCLASSEXTEND = "native nativesdk"
pixman's meson detects openmp support and if it finds it in runtime then enables it, this happens for gcc via gcc-runtime, however for clang, it does not. In some cases e.g. mips it enables it during configure only to find that clang can not find the libomp during linking. Therefore, add the dependency on openmp when using clang compiler. This ensures consistent behaviour across architectures. Disable internal assembler on mips since it can not handle the inline assembly Turn openmp into a packageconfig openmp is not yet ported to all architectures e.g. RISCV32/PPC32 does not have it Signed-off-by: Khem Raj <raj.khem@gmail.com> --- v5: Remove openmp on rv32 and ppc32 meta/recipes-graphics/xorg-lib/pixman_0.46.0.bb | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-)