Files
poky/meta/recipes-devtools/clang/llvm_git.bb
Liu Yiding 3b89dd2401 llvm: multilib-header fix for llvm/Config/llvm-config.h
Fix following conflicts when enabling multilib.

Error: Transaction test error:
  file /usr/include/llvm/Config/llvm-config.h conflicts between attempted installs of lib32-llvm-dev-21.1.3-r1.core2_32 and llvm-dev-21.1.3-r1.x86_64_v3

(From OE-Core rev: 886b0fb60a0b2ebbe3186c790db6e0a41eeb8741)

Signed-off-by: Liu Yiding <liuyd.fnst@fujitsu.com>
Signed-off-by: Mathieu Dubois-Briand <mathieu.dubois-briand@bootlin.com>
Signed-off-by: Ross Burton <ross.burton@arm.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2025-10-27 11:37:43 +00:00

132 lines
5.4 KiB
BlitzBasic

# Copyright (C) 2017 Khem Raj <raj.khem@gmail.com>
# Released under the MIT license (see COPYING.MIT for the terms)
SUMMARY = "The LLVM Compiler Infrastructure"
HOMEPAGE = "http://llvm.org"
LICENSE = "Apache-2.0-with-LLVM-exception"
SECTION = "devel"
require common-clang.inc
require common-source.inc
LIC_FILES_CHKSUM = "file://LICENSE.TXT;md5=8a15a0759ef07f2682d2ba4b893c9afe"
DEPENDS = "llvm-tblgen-native libffi libxml2 zlib zstd"
inherit cmake pkgconfig lib_package multilib_header
OECMAKE_SOURCEPATH = "${S}/llvm"
# By default we build all the supported CPU architectures, and the GPU targets
# if the opencl, opengl or vulkan DISTRO_FEATURES are enabled.
#
# For target builds we default to building that specific architecture, BPF, and the GPU targets if required.
#
# The available target list can be seen in the source code
# in the LLVM_ALL_TARGETS assignment:
# https://github.com/llvm/llvm-project/blob/main/llvm/CMakeLists.txt
LLVM_TARGETS_GPU ?= "${@bb.utils.contains_any('DISTRO_FEATURES', 'opencl opengl vulkan', 'AMDGPU;NVPTX;SPIRV', '', d)}"
LLVM_TARGETS_TO_BUILD ?= "AArch64;ARM;BPF;Mips;PowerPC;RISCV;X86;LoongArch;${LLVM_TARGETS_GPU}"
LLVM_EXPERIMENTAL_TARGETS_TO_BUILD ?= ""
HF = ""
HF:class-target = "${@ bb.utils.contains('TUNE_CCARGS_MFLOAT', 'hard', 'hf', '', d)}"
HF[vardepvalue] = "${HF}"
EXTRA_OECMAKE += "-DCMAKE_BUILD_TYPE=MinSizeRel \
-DLLVM_ENABLE_BINDINGS=OFF \
-DLLVM_INSTALL_UTILS=ON \
-DLLVM_ENABLE_FFI=ON \
-DLLVM_ENABLE_RTTI=ON \
-DLLVM_TARGETS_TO_BUILD='${LLVM_TARGETS_TO_BUILD}' \
-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD='${LLVM_EXPERIMENTAL_TARGETS_TO_BUILD}' \
-DLLVM_LIBDIR_SUFFIX=${LLVM_LIBDIR_SUFFIX} \
-DLLVM_VERSION_SUFFIX='${VER_SUFFIX}' \
-DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON \
-DLLVM_INCLUDE_TESTS=OFF \
-DLLVM_INCLUDE_EXAMPLES=OFF \
-DLLVM_TOOL_OBJ2YAML_BUILD=OFF \
-DLLVM_TOOL_YAML2OBJ_BUILD=OFF \
-DLLVM_NATIVE_TOOL_DIR=${STAGING_BINDIR_NATIVE} \
-DLLVM_TABLEGEN=${STAGING_BINDIR_NATIVE}/llvm-tblgen \
-DCROSS_TOOLCHAIN_FLAGS_NATIVE='-DCMAKE_TOOLCHAIN_FILE=${WORKDIR}/toolchain-native.cmake' \
"
EXTRA_OECMAKE:append:class-target = "\
-DLLVM_DEFAULT_TARGET_TRIPLE=${TARGET_SYS}${HF} \
-DLLVM_TARGET_ARCH=${HOST_ARCH} \
-DLLVM_HOST_TRIPLE=${TARGET_SYS}${HF} \
-DLLVM_CONFIG_PATH=${STAGING_BINDIR_NATIVE}/llvm-config \
"
EXTRA_OECMAKE:append:class-nativesdk = "\
-DLLVM_HOST_TRIPLE=${SDK_SYS} \
-DLLVM_CONFIG_PATH=${STAGING_BINDIR_NATIVE}/llvm-config \
"
PACKAGECONFIG ??= "eh rtti shared-libs ${@bb.utils.filter('DISTRO_FEATURES', 'lto thin-lto', d)}"
PACKAGECONFIG:remove:class-native = "lto thin-lto"
PACKAGECONFIG[eh] = "-DLLVM_ENABLE_EH=ON,-DLLVM_ENABLE_EH=OFF"
PACKAGECONFIG[exegesis] = "-DLLVM_TOOL_LLVM_EXEGESIS_BUILD=ON,-DLLVM_TOOL_LLVM_EXEGESIS_BUILD=OFF"
PACKAGECONFIG[libedit] = "-DLLVM_ENABLE_LIBEDIT=ON,-DLLVM_ENABLE_LIBEDIT=OFF,libedit"
PACKAGECONFIG[rtti] = "-DLLVM_ENABLE_RTTI=ON,-DLLVM_ENABLE_RTTI=OFF"
PACKAGECONFIG[shared-libs] = "-DLLVM_BUILD_LLVM_DYLIB=ON -DLLVM_LINK_LLVM_DYLIB=ON,-DLLVM_BUILD_LLVM_DYLIB=OFF -DLLVM_LINK_LLVM_DYLIB=OFF"
PACKAGECONFIG[split-dwarf] = "-DLLVM_USE_SPLIT_DWARF=ON,-DLLVM_USE_SPLIT_DWARF=OFF"
PACKAGECONFIG[opt-viewer] = "-DLLVM_TOOL_OPT_VIEWER_BUILD=ON,-DLLVM_TOOL_OPT_VIEWER_BUILD=OFF, \
python3-pyyaml-native python3-pygments-native python3-pyyaml python3-pygments, \
python3-pyyaml python3-pygments,"
PACKAGECONFIG[lto] = "-DLLVM_ENABLE_LTO=Full -DLLVM_BINUTILS_INCDIR=${STAGING_INCDIR},,binutils,"
PACKAGECONFIG[thin-lto] = "-DLLVM_ENABLE_LTO=Thin -DLLVM_BINUTILS_INCDIR=${STAGING_INCDIR},,binutils,"
# LLVM debug symbols are very large (several gigabytes), reduce the debug level
# so they're just hundreds of megabytes.
DEBUG_LEVELFLAG = "-g1"
reproducible_build_variables() {
sed -i -e "s,${DEBUG_PREFIX_MAP},,g" \
-e "s,--sysroot=${RECIPE_SYSROOT},,g" \
-e "s,${STAGING_DIR_HOST},,g" \
-e "s,${S}/llvm,,g" \
-e "s,${B},,g" \
${B}/tools/llvm-config/BuildVariables.inc
}
do_configure:append:class-target() {
reproducible_build_variables
}
do_configure:append:class-nativesdk() {
reproducible_build_variables
}
do_install:append() {
# llvm hardcodes lib as install path, this corrects it to actual libdir.
# https://github.com/llvm/llvm-project/issues/152193
if [ -d ${D}/${prefix}/lib -a ! -d ${D}/${libdir} ]; then
mv ${D}/${prefix}/lib ${D}/${libdir}
fi
# Reproducibility fixes
sed -i -e 's,${WORKDIR},,g' ${D}/${libdir}/cmake/llvm/LLVMConfig.cmake
oe_multilib_header llvm/Config/llvm-config.h
}
do_install:append:class-native() {
# These are provided by llvm-tblgen-native
rm ${D}${bindir}/*-tblgen
}
SYSROOT_PREPROCESS_FUNCS:append:class-target = " llvm_sysroot_preprocess"
SYSROOT_PREPROCESS_FUNCS:append:class-nativesdk = " llvm_sysroot_preprocess"
llvm_sysroot_preprocess() {
install -d ${SYSROOT_DESTDIR}${bindir_crossscripts}/
install -m 0755 ${S}/llvm/tools/llvm-config/llvm-config ${SYSROOT_DESTDIR}${bindir_crossscripts}/
}
FILES:${PN}-dev += "${libdir}/llvm-config"
BBCLASSEXTEND = "native nativesdk"