mbox series

[00/11] clang-merge: Bring clang recipes from meta-clang

Message ID 20250424-clang-merge-v1-0-5a492a8461aa@gmail.com
Headers show
Series clang-merge: Bring clang recipes from meta-clang | expand

Message

Khem Raj April 24, 2025, 7:20 a.m. UTC
Latest mesa 25+ needs libclang during build for tools like mesa_clc,
we enahnced already existing llvm recipe to build pieces of clang as
well, which worked for mesa's needs but broke static clang compiler
provided by meta-clang due to newfound conflicts, since clang is now
built with llvm recipe from core and also by meta-clang and they
compete for same namespace, an attempt to make them co-habit did reveal
more difficulties. Clang compiler from meta-clang is not able to use
llvm libraries from core since they patch them differently.

This patch series therefore brings clang and all recipes that build from
llvm sources into core. With this changeset, clang recipes can be removed
from meta-clang there is a pull request for that already [1]
As an aside, we only build clang once and use it for meta-clang needs
and core needs.

With this, meta-clang can depend upon core layer to provide clang and
related recipes, meta-clang will still provide the toolchain policies
around clang based toolchains. Clang compiler from core, while usable
for mesa is not yet fully usable out of box, since we need to workout
the multi-toolchain architecture for core, which will be done in next
phase after this merge.

[1] https://github.com/kraj/meta-clang/pull/1088

Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
Dmitry Baryshkov (1):
      clang: remove LLVM_LDFLAGS from llvm-config --ldflags output

Khem Raj (9):
      cmake-native.bbclass: Abstraction to use cmake with native toolchains
      llvm: Renamed to clang
      maintainers.inc: Add myself as maintainer for clang family of recipes
      clang: Merge llvm/clang family recipes from meta-clang
      kernel-arch.bbclass: Do not use weak assignment for TOOLCHAIN
      clang.inc: Remove duplicate RANLIB setting
      openmp: Omit time stamps from generated files
      sstatesig: Handle special case of llvm-project-source shared-workdir
      multilib.conf: Add llvm-project-source recipe to NON_MULTILIB_RECIPES

Liu Yiding (1):
      clang: multilib-header fix for llvm-config.h

 meta/classes-recipe/cmake-native.bbclass           |  56 +++
 meta/classes-recipe/kernel-arch.bbclass            |   2 +-
 meta/conf/distro/include/maintainers.inc           |  11 +-
 meta/conf/multilib.conf                            |   2 +-
 meta/conf/toolchain/clang.inc                      |   1 -
 meta/lib/oe/sstatesig.py                           |   3 +
 .../clang/clang-cross-canadian_git.bb              |  36 ++
 meta/recipes-devtools/clang/clang-cross_git.bb     |  39 ++
 meta/recipes-devtools/clang/clang-crosssdk_git.bb  |  34 ++
 ...ind-libunwind-headers-when-LIBCXXABI_LIBU.patch |  60 +++
 ...er-rt-support-a-new-embedded-linux-target.patch | 309 +++++++++++++
 ...-Simplify-cross-compilation.-Don-t-use-na.patch |  44 ++
 ...LibraryInfo-Undefine-libc-functions-if-th.patch |  90 ++++
 ...allow-env-override-of-exe-and-libdir-path.patch |  71 +++
 ...-clang-driver-Check-sysroot-for-ldso-path.patch |  75 ++++
 ...iver-tools.cpp-Add-lssp_nonshared-on-musl.patch |  32 ++
 .../0008-clang-Prepend-trailing-to-sysroot.patch   |  39 ++
 ...inside-the-target-sysroot-for-compiler-ru.patch |  41 ++
 ...ang-Define-releative-gcc-installation-dir.patch |  47 ++
 ...pthread-and-ldl-along-with-lunwind-for-st.patch |  35 ++
 ..._EXECUTABLE-when-cross-compiling-for-nati.patch |  24 +
 .../0013-Check-for-atomic-double-intrinsics.patch  |  34 ++
 ...configure-for-packages-using-find_package.patch |   2 +-
 ...esource-dir-location-for-cross-toolchains.patch |  50 +++
 ...r-Add-dyld-prefix-when-checking-sysroot-f.patch |  79 ++++
 .../0017-clang-Use-python3-in-python-scripts.patch |  35 ++
 ...4-set-Yocto-based-GCC-install-search-path.patch |  70 +++
 ...-anchor-for-adding-OE-distro-vendor-names.patch |  32 ++
 ...-Do-not-use-backtrace-APIs-on-non-glibc-l.patch |  68 +++
 ...86-triple-for-non-debian-multiarch-linux-.patch |  28 ++
 ...0022-libunwind-Added-unw_backtrace-method.patch |  56 +++
 ...-Do-not-use-install-relative-libc-headers.patch |  34 ++
 .../0024-Fix-lib-paths-for-OpenEmbedded-Host.patch |  79 ++++
 ...library-search-path-for-OpenEmbedded-Host.patch |  84 ++++
 .../0026-lldb-Link-with-libatomic-on-x86.patch     |  33 ++
 ...027-compiler-rt-Enable-__int128-for-ppc32.patch |  73 +++
 ...-Do-not-use-cmake-infra-to-detect-libzstd.patch |  62 +++
 ...ler-rt-Fix-stat-struct-s-size-for-O32-ABI.patch |  46 ++
 ...-Undef-_TIME_BITS-along-with-_FILE_OFFSET.patch |  43 ++
 ...s-Gnu.cpp-ARMLibDirs-search-also-in-lib32.patch |  81 ++++
 ...vm-Add-OE-specific-ABI-triple-for-N32-ABI.patch |  78 ++++
 ...d-libunwind.pc.in-and-llvm-config-scripts.patch |  90 ++++
 ...py-respect-LLVM_LIBDIR_SUFFIX-like-other-.patch |  92 ++++
 ...r-rt-Do-not-pass-target-to-clang-compiler.patch |  29 ++
 .../clang/clang/0036-Fix-build-on-ppc64-musl.patch |  97 ++++
 ...d-a-build-option-to-disable-building-dexp.patch |  85 ++++
 ...itter-sort-ClassInfo-lists-by-name-as-we.patch} |   4 +-
 ...-remove-LLVM_LDFLAGS-from-ldflags-output.patch} |  12 +-
 ...ot-emit-date-and-time-into-generate-files.patch |  37 ++
 .../clang}/spirv-internal-build.patch              |   0
 .../clang}/spirv-shared-library.patch              |   0
 meta/recipes-devtools/clang/clang_git.bb           | 498 +++++++++++++++++++++
 meta/recipes-devtools/clang/common-clang.inc       |  24 +
 meta/recipes-devtools/clang/common-source.inc      |  17 +
 meta/recipes-devtools/clang/common.inc             |  87 ++++
 .../clang/compiler-rt-sanitizers_git.bb            | 139 ++++++
 meta/recipes-devtools/clang/compiler-rt_git.bb     | 135 ++++++
 meta/recipes-devtools/clang/libcxx_git.bb          | 119 +++++
 meta/recipes-devtools/clang/llvm-project-source.bb |  12 +
 .../recipes-devtools/clang/llvm-project-source.inc |  99 ++++
 .../recipes-devtools/clang/nativesdk-clang-glue.bb |  36 ++
 meta/recipes-devtools/clang/openmp_git.bb          |  67 +++
 .../0007-llvm-allow-env-override-of-exe-path.patch |  36 --
 meta/recipes-devtools/llvm/llvm/llvm-config        |  54 ---
 meta/recipes-devtools/llvm/llvm_20.1.2.bb          | 233 ----------
 65 files changed, 3783 insertions(+), 337 deletions(-)
---
base-commit: 576c4fd9e0b571c3ee37f67f25a51fe68466eac3
change-id: 20250423-clang-merge-ca9130ae95af

Best regards,

Comments

Dmitry Baryshkov April 24, 2025, 10:04 a.m. UTC | #1
On Thu, Apr 24, 2025 at 12:20:34AM -0700, Khem Raj wrote:
> Latest mesa 25+ needs libclang during build for tools like mesa_clc,
> we enahnced already existing llvm recipe to build pieces of clang as
> well, which worked for mesa's needs but broke static clang compiler
> provided by meta-clang due to newfound conflicts, since clang is now
> built with llvm recipe from core and also by meta-clang and they
> compete for same namespace, an attempt to make them co-habit did reveal
> more difficulties. Clang compiler from meta-clang is not able to use
> llvm libraries from core since they patch them differently.
> 
> This patch series therefore brings clang and all recipes that build from
> llvm sources into core. With this changeset, clang recipes can be removed
> from meta-clang there is a pull request for that already [1]
> As an aside, we only build clang once and use it for meta-clang needs
> and core needs.
> 
> With this, meta-clang can depend upon core layer to provide clang and
> related recipes, meta-clang will still provide the toolchain policies
> around clang based toolchains. Clang compiler from core, while usable
> for mesa is not yet fully usable out of box, since we need to workout
> the multi-toolchain architecture for core, which will be done in next
> phase after this merge.
> 
> [1] https://github.com/kraj/meta-clang/pull/1088
> 
> Signed-off-by: Khem Raj <raj.khem@gmail.com>

After fixing the RPROVIDES, this still fails the nativesdk-mesa build if
I enable OpenCL.

ERROR: QA Issue: File /usr/local/oe-sdk-hardcoded-buildpath/sysroots/x86_64-pokysdk-linux/usr/lib/libMesaOpenCL.so.1.0.0 in package nativesdk-libopencl-mesa contains reference to TMPDIR [buildpaths]

While building OpenCL-enabled Mesa:

/home/lumag/Projects/RPB/build-rpb/tmp-poky/work/cortexa57-poky-linux/mesa/25.0.2/recipe-sysroot/usr/include/llvm/ADT/DenseMapInfo.h:17:10: fatal error: 'cassert' file not found
Unable to generate bindings: clang diagnosed error: /home/lumag/Projects/RPB/build-rpb/tmp-poky/work/cortexa57-poky-linux/mesa/25.0.2/recipe-sysroot/usr/include/llvm/ADT/DenseMapInfo.h:17:10: fatal error: 'cassert' file not found
Khem Raj April 25, 2025, 12:44 a.m. UTC | #2
On 4/24/25 3:04 AM, Dmitry Baryshkov wrote:
> On Thu, Apr 24, 2025 at 12:20:34AM -0700, Khem Raj wrote:
>> Latest mesa 25+ needs libclang during build for tools like mesa_clc,
>> we enahnced already existing llvm recipe to build pieces of clang as
>> well, which worked for mesa's needs but broke static clang compiler
>> provided by meta-clang due to newfound conflicts, since clang is now
>> built with llvm recipe from core and also by meta-clang and they
>> compete for same namespace, an attempt to make them co-habit did reveal
>> more difficulties. Clang compiler from meta-clang is not able to use
>> llvm libraries from core since they patch them differently.
>>
>> This patch series therefore brings clang and all recipes that build from
>> llvm sources into core. With this changeset, clang recipes can be removed
>> from meta-clang there is a pull request for that already [1]
>> As an aside, we only build clang once and use it for meta-clang needs
>> and core needs.
>>
>> With this, meta-clang can depend upon core layer to provide clang and
>> related recipes, meta-clang will still provide the toolchain policies
>> around clang based toolchains. Clang compiler from core, while usable
>> for mesa is not yet fully usable out of box, since we need to workout
>> the multi-toolchain architecture for core, which will be done in next
>> phase after this merge.
>>
>> [1] https://github.com/kraj/meta-clang/pull/1088
>>
>> Signed-off-by: Khem Raj <raj.khem@gmail.com>
> 
> After fixing the RPROVIDES, this still fails the nativesdk-mesa build if

clang recipe does have this

PROVIDES:append:class-native = " llvm-native libclc-native 
spirv-llvm-translator-native"
PROVIDES:append:class-target = " llvm libclc spirv-llvm-translator"
PROVIDES:append:class-nativesdk = " nativesdk-llvm nativesdk-libclc 
nativesdk-spirv-llvm-translator"


I wonder why is RPROVIDE needed.

> I enable OpenCL.
> 
> ERROR: QA Issue: File /usr/local/oe-sdk-hardcoded-buildpath/sysroots/x86_64-pokysdk-linux/usr/lib/libMesaOpenCL.so.1.0.0 in package nativesdk-libopencl-mesa contains reference to TMPDIR [buildpaths]
> 
> While building OpenCL-enabled Mesa:
> 
> /home/lumag/Projects/RPB/build-rpb/tmp-poky/work/cortexa57-poky-linux/mesa/25.0.2/recipe-sysroot/usr/include/llvm/ADT/DenseMapInfo.h:17:10: fatal error: 'cassert' file not found
> Unable to generate bindings: clang diagnosed error: /home/lumag/Projects/RPB/build-rpb/tmp-poky/work/cortexa57-poky-linux/mesa/25.0.2/recipe-sysroot/usr/include/llvm/ADT/DenseMapInfo.h:17:10: fatal error: 'cassert' file not found
 >

I do not see this error for qemux86-64 here ( maybe it happens for arm64 
targets alone ? ) I enabled opencl related pakageconfigs for 
nativesdk-mesa I added this line

PACKAGECONFIG:append:class-nativesdk = " libclc gallium-llvm amd svga"

and nativesdk-mesa built just fine.
Dmitry Baryshkov April 25, 2025, 8:45 a.m. UTC | #3
On Thu, Apr 24, 2025 at 05:44:03PM -0700, Khem Raj wrote:
> On 4/24/25 3:04 AM, Dmitry Baryshkov wrote:
> > On Thu, Apr 24, 2025 at 12:20:34AM -0700, Khem Raj wrote:
> > > Latest mesa 25+ needs libclang during build for tools like mesa_clc,
> > > we enahnced already existing llvm recipe to build pieces of clang as
> > > well, which worked for mesa's needs but broke static clang compiler
> > > provided by meta-clang due to newfound conflicts, since clang is now
> > > built with llvm recipe from core and also by meta-clang and they
> > > compete for same namespace, an attempt to make them co-habit did reveal
> > > more difficulties. Clang compiler from meta-clang is not able to use
> > > llvm libraries from core since they patch them differently.
> > > 
> > > This patch series therefore brings clang and all recipes that build from
> > > llvm sources into core. With this changeset, clang recipes can be removed
> > > from meta-clang there is a pull request for that already [1]
> > > As an aside, we only build clang once and use it for meta-clang needs
> > > and core needs.
> > > 
> > > With this, meta-clang can depend upon core layer to provide clang and
> > > related recipes, meta-clang will still provide the toolchain policies
> > > around clang based toolchains. Clang compiler from core, while usable
> > > for mesa is not yet fully usable out of box, since we need to workout
> > > the multi-toolchain architecture for core, which will be done in next
> > > phase after this merge.
> > > 
> > > [1] https://github.com/kraj/meta-clang/pull/1088
> > > 
> > > Signed-off-by: Khem Raj <raj.khem@gmail.com>
> > 
> > After fixing the RPROVIDES, this still fails the nativesdk-mesa build if
> 
> clang recipe does have this
> 
> PROVIDES:append:class-native = " llvm-native libclc-native
> spirv-llvm-translator-native"
> PROVIDES:append:class-target = " llvm libclc spirv-llvm-translator"
> PROVIDES:append:class-nativesdk = " nativesdk-llvm nativesdk-libclc
> nativesdk-spirv-llvm-translator"
> 
> 
> I wonder why is RPROVIDE needed.

I'll capture the errors for v2.

> 
> > I enable OpenCL.
> > 
> > ERROR: QA Issue: File /usr/local/oe-sdk-hardcoded-buildpath/sysroots/x86_64-pokysdk-linux/usr/lib/libMesaOpenCL.so.1.0.0 in package nativesdk-libopencl-mesa contains reference to TMPDIR [buildpaths]
> > 
> > While building OpenCL-enabled Mesa:
> > 
> > /home/lumag/Projects/RPB/build-rpb/tmp-poky/work/cortexa57-poky-linux/mesa/25.0.2/recipe-sysroot/usr/include/llvm/ADT/DenseMapInfo.h:17:10: fatal error: 'cassert' file not found
> > Unable to generate bindings: clang diagnosed error: /home/lumag/Projects/RPB/build-rpb/tmp-poky/work/cortexa57-poky-linux/mesa/25.0.2/recipe-sysroot/usr/include/llvm/ADT/DenseMapInfo.h:17:10: fatal error: 'cassert' file not found
> >
> 
> I do not see this error for qemux86-64 here ( maybe it happens for arm64
> targets alone ? ) I enabled opencl related pakageconfigs for nativesdk-mesa
> I added this line
> 
> PACKAGECONFIG:append:class-nativesdk = " libclc gallium-llvm amd svga"
> 
> and nativesdk-mesa built just fine.
> 

Most likely because it can use headers from the native sysroot. I was
usually building three targets, qemuarm64, qemuarm and qemux86-64.