Files
poky/meta/recipes-devtools/clang/clang_git.bb
Dmitry Baryshkov 251fd55c27 clang: split SPIRV-LLVM-Translator to its own recipe
The translator is not a part of the same source tree. As such it has
tendency to break on clang upgrades. Split it to its own recipe in order
to ease handling of clang.

This also makes it use SPIR-V headers provided by the spirv-headers
recipe instead of vendoring them in.

(From OE-Core rev: 4178fe97371bce0bd63b19f57b872ccefd1ec45c)

Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Signed-off-by: Mathieu Dubois-Briand <mathieu.dubois-briand@bootlin.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2025-05-08 10:28:18 +01:00

482 lines
20 KiB
BlitzBasic

# Copyright (C) 2014 Khem Raj <raj.khem@gmail.com>
# Released under the MIT license (see COPYING.MIT for the terms)
SUMMARY = "LLVM based C/C++ compiler"
DESCRIPTION = "Clang is an LLVM based C/C++/Objective-C compiler, \
which aims to deliver amazingly fast compiles, \
extremely useful error and warning messages and \
to provide a platform for building great source \
level tools. The Clang Static Analyzer and \
clang-tidy are tools that automatically find bugs \
in your code, and are great examples of the sort \
of tools that can be built using the Clang frontend \
as a library to parse C/C++ code"
HOMEPAGE = "http://clang.llvm.org/"
SECTION = "devel"
require common-clang.inc
require common-source.inc
INHIBIT_DEFAULT_DEPS:class-native = "1"
LDFLAGS:append:class-target:riscv32 = " -Wl,--no-as-needed -latomic -Wl,--as-needed"
LDFLAGS:append:class-target:mips = " -Wl,--no-as-needed -latomic -Wl,--as-needed"
inherit cmake pkgconfig python3native python3targetconfig
OECMAKE_FIND_ROOT_PATH_MODE_PROGRAM = "BOTH"
def get_clang_arch(bb, d, arch_var):
import re
a = d.getVar(arch_var)
if re.match('(i.86|athlon|x86.64)$', a): return 'X86'
elif re.match('arm$', a): return 'ARM'
elif re.match('armeb$', a): return 'ARM'
elif re.match('aarch64$', a): return 'AArch64'
elif re.match('aarch64_be$', a): return 'AArch64'
elif re.match('mips(isa|)(32|64|)(r6|)(el|)$', a): return 'Mips'
elif re.match('riscv32$', a): return 'riscv32'
elif re.match('riscv64$', a): return 'riscv64'
elif re.match('p(pc|owerpc)(|64)', a): return 'PowerPC'
elif re.match('loongarch64$', a): return 'loongarch64'
else:
bb.note("'%s' is not a primary llvm architecture" % a)
return ""
def get_clang_host_arch(bb, d):
return get_clang_arch(bb, d, 'HOST_ARCH')
def get_clang_target_arch(bb, d):
return get_clang_arch(bb, d, 'TARGET_ARCH')
PACKAGECONFIG_CLANG_COMMON = "build-id eh libedit rtti shared-libs \
${@bb.utils.contains('TC_CXX_RUNTIME', 'llvm', 'compiler-rt libcplusplus libomp unwindlib', '', d)} \
"
PACKAGECONFIG ??= "lldb-wchar terminfo \
${PACKAGECONFIG_CLANG_COMMON} \
${@bb.utils.filter('DISTRO_FEATURES', 'lto thin-lto', d)} \
"
PACKAGECONFIG:class-native = "clangd \
${PACKAGECONFIG_CLANG_COMMON} \
"
PACKAGECONFIG:class-nativesdk = "clangd \
${PACKAGECONFIG_CLANG_COMMON} \
${@bb.utils.filter('DISTRO_FEATURES', 'lto thin-lto', d)} \
"
PACKAGECONFIG[bootstrap] = "-DCLANG_ENABLE_BOOTSTRAP=On -DCLANG_BOOTSTRAP_PASSTHROUGH='${PASSTHROUGH}' -DBOOTSTRAP_LLVM_ENABLE_LTO=Thin -DBOOTSTRAP_LLVM_ENABLE_LLD=ON,,,"
PACKAGECONFIG[build-id] = "-DENABLE_LINKER_BUILD_ID=ON,-DENABLE_LINKER_BUILD_ID=OFF,,"
PACKAGECONFIG[clangd] = "-DCLANG_ENABLE_CLANGD=ON,-DCLANG_ENABLE_CLANGD=OFF,,"
# Activate to build the dexp tool in clangd
# Disabled by default for -native since it is known to trigger compiler failure on Debian 11
# See: https://bugzilla.yoctoproject.org/show_bug.cgi?id=15803
PACKAGECONFIG[clangd-dexp] = "-DCLANGD_BUILD_DEXP=ON,-DCLANGD_BUILD_DEXP=OFF,,"
PACKAGECONFIG[compiler-rt] = "-DCLANG_DEFAULT_RTLIB=compiler-rt,,"
PACKAGECONFIG[eh] = "-DLLVM_ENABLE_EH=ON,-DLLVM_ENABLE_EH=OFF,,"
PACKAGECONFIG[libcplusplus] = "-DCLANG_DEFAULT_CXX_STDLIB=libc++,,"
PACKAGECONFIG[libedit] = "-DLLVM_ENABLE_LIBEDIT=ON -DLLDB_ENABLE_LIBEDIT=ON,-DLLVM_ENABLE_LIBEDIT=OFF -DLLDB_ENABLE_LIBEDIT=OFF,libedit libedit-native"
PACKAGECONFIG[libomp] = "-DCLANG_DEFAULT_OPENMP_RUNTIME=libomp,,"
PACKAGECONFIG[lld] = "-DCLANG_DEFAULT_LINKER=lld,,"
PACKAGECONFIG[lldb-lua] = "-DLLDB_ENABLE_LUA=ON,-DLLDB_ENABLE_LUA=OFF,lua"
PACKAGECONFIG[lldb-wchar] = "-DLLDB_EDITLINE_USE_WCHAR=1,-DLLDB_EDITLINE_USE_WCHAR=0,"
PACKAGECONFIG[lto] = "-DLLVM_ENABLE_LTO=Full -DLLVM_BINUTILS_INCDIR=${STAGING_INCDIR},,binutils,"
PACKAGECONFIG[pfm] = "-DLLVM_ENABLE_LIBPFM=ON,-DLLVM_ENABLE_LIBPFM=OFF,libpfm,"
PACKAGECONFIG[rtti] = "-DLLVM_ENABLE_RTTI=ON,-DLLVM_ENABLE_RTTI=OFF,,"
PACKAGECONFIG[shared-libs] = "-DLLVM_BUILD_LLVM_DYLIB=ON -DLLVM_LINK_LLVM_DYLIB=ON,,,"
PACKAGECONFIG[split-dwarf] = "-DLLVM_USE_SPLIT_DWARF=ON,-DLLVM_USE_SPLIT_DWARF=OFF,,"
PACKAGECONFIG[terminfo] = "-DLLVM_ENABLE_TERMINFO=ON -DCOMPILER_RT_TERMINFO_LIB=ON,-DLLVM_ENABLE_TERMINFO=OFF -DCOMPILER_RT_TERMINFO_LIB=OFF,ncurses,"
PACKAGECONFIG[thin-lto] = "-DLLVM_ENABLE_LTO=Thin -DLLVM_BINUTILS_INCDIR=${STAGING_INCDIR},,binutils,"
PACKAGECONFIG[unwindlib] = "-DCLANG_DEFAULT_UNWINDLIB=libunwind,-DCLANG_DEFAULT_UNWINDLIB=libgcc,,"
OECMAKE_SOURCEPATH = "${S}/llvm"
OECMAKE_TARGET_COMPILE = "${@bb.utils.contains('PACKAGECONFIG', 'bootstrap', 'stage2', 'all', d)}"
OECMAKE_TARGET_INSTALL = "${@bb.utils.contains('PACKAGECONFIG', 'bootstrap', 'stage2-install', 'install', d)}"
BINPATHPREFIX = "${@bb.utils.contains('PACKAGECONFIG', 'bootstrap', '/tools/clang/stage2-bins/NATIVE', '', d)}"
PASSTHROUGH = "\
CLANG_DEFAULT_RTLIB;CLANG_DEFAULT_CXX_STDLIB;LLVM_BUILD_LLVM_DYLIB;LLVM_LINK_LLVM_DYLIB;\
LLVM_ENABLE_ASSERTIONS;LLVM_ENABLE_EXPENSIVE_CHECKS;LLVM_ENABLE_PIC;\
LLVM_BINDINGS_LIST;LLVM_ENABLE_FFI;FFI_INCLUDE_DIR;LLVM_OPTIMIZED_TABLEGEN;\
LLVM_ENABLE_RTTI;LLVM_ENABLE_EH;LLVM_BUILD_EXTERNAL_COMPILER_RT;CMAKE_SYSTEM_NAME;\
CMAKE_BUILD_TYPE;BUILD_SHARED_LIBS;LLVM_ENABLE_PROJECTS;LLVM_ENABLE_RUNTIMES;LLVM_BINUTILS_INCDIR;\
LLVM_TARGETS_TO_BUILD;LLVM_EXPERIMENTAL_TARGETS_TO_BUILD;PYTHON_EXECUTABLE;\
PYTHON_LIBRARY;PYTHON_INCLUDE_DIR;LLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN;LLDB_EDITLINE_USE_WCHAR;\
LLVM_ENABLE_LIBEDIT;LLDB_ENABLE_LIBEDIT;LLDB_PYTHON_RELATIVE_PATH;LLDB_PYTHON_EXE_RELATIVE_PATH;\
LLDB_PYTHON_EXT_SUFFIX;CMAKE_C_FLAGS_RELEASE;CMAKE_CXX_FLAGS_RELEASE;CMAKE_ASM_FLAGS_RELEASE;\
CLANG_DEFAULT_CXX_STDLIB;CLANG_DEFAULT_RTLIB;CLANG_DEFAULT_UNWINDLIB;\
CLANG_DEFAULT_OPENMP_RUNTIME;LLVM_ENABLE_PER_TARGET_RUNTIME_DIR;\
LLVM_BUILD_TOOLS;LLVM_USE_HOST_TOOLS;LLVM_CONFIG_PATH;LLVM_EXTERNAL_SPIRV_HEADERS_SOURCE_DIR;\
"
#
# Default to build all OE-Core supported target arches (user overridable).
# Gennerally setting LLVM_TARGETS_TO_BUILD = "" in local.conf is ok in most simple situations
# where only one target architecture is needed along with just one build arch (usually X86)
#
LLVM_TARGETS_TO_BUILD ?= "AMDGPU;AArch64;ARM;BPF;Mips;PowerPC;RISCV;X86;LoongArch;NVPTX;SPIRV"
LLVM_EXPERIMENTAL_TARGETS_TO_BUILD ?= ""
HF = ""
HF:class-target = "${@ bb.utils.contains('TUNE_CCARGS_MFLOAT', 'hard', 'hf', '', d)}"
HF[vardepvalue] = "${HF}"
# Ensure that LLVM_PROJECTS does not contain compiler runtime components e.g. libcxx etc
# they are enabled via LLVM_ENABLE_RUNTIMES
LLVM_PROJECTS ?= "clang;clang-tools-extra;libclc;lld${LLDB}"
LLDB ?= ";lldb"
# LLDB support for RISCV32/Mips32 does not work yet
LLDB:riscv32 = ""
LLDB:mips = ""
LLDB:mipsel = ""
LLDB:powerpc = ""
# linux hosts (.so) on Windows .pyd
SOLIBSDEV:mingw32 = ".pyd"
#CMAKE_VERBOSE = "VERBOSE=1"
EXTRA_OECMAKE += "-DLLVM_ENABLE_ASSERTIONS=OFF \
-DLLVM_APPEND_VC_REV=OFF \
-DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=OFF \
-DLLVM_ENABLE_EXPENSIVE_CHECKS=OFF \
-DLLVM_ENABLE_PIC=ON \
-DCLANG_DEFAULT_PIE_ON_LINUX=ON \
-DLLVM_BINDINGS_LIST='' \
-DLLVM_ENABLE_FFI=ON \
-DLLVM_ENABLE_ZSTD=ON \
-DFFI_INCLUDE_DIR=$(pkg-config --variable=includedir libffi) \
-DLLVM_OPTIMIZED_TABLEGEN=ON \
-DLLVM_BUILD_EXTERNAL_COMPILER_RT=ON \
-DCMAKE_SYSTEM_NAME=Linux \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_CXX_FLAGS_RELEASE='${CXXFLAGS} -DNDEBUG -g0' \
-DCMAKE_C_FLAGS_RELEASE='${CFLAGS} -DNDEBUG -g0' \
-DLLVM_ENABLE_PROJECTS='${LLVM_PROJECTS}' \
-DLLVM_BINUTILS_INCDIR=${STAGING_INCDIR} \
-DLLVM_VERSION_SUFFIX='${VER_SUFFIX}' \
-DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON \
-DLLVM_TARGETS_TO_BUILD='${LLVM_TARGETS_TO_BUILD}' \
-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD='${LLVM_EXPERIMENTAL_TARGETS_TO_BUILD}' \
"
EXTRA_OECMAKE:append:class-native = "\
-DPYTHON_EXECUTABLE='${PYTHON}' \
"
EXTRA_OECMAKE:append:class-nativesdk = "\
-DCROSS_TOOLCHAIN_FLAGS_NATIVE='-DLLDB_PYTHON_RELATIVE_PATH=${PYTHON_SITEPACKAGES_DIR} \
-DLLDB_PYTHON_EXE_RELATIVE_PATH=${PYTHON_PN} \
-DLLDB_PYTHON_EXT_SUFFIX=${SOLIBSDEV} \
-DCMAKE_TOOLCHAIN_FILE=${WORKDIR}/toolchain-native.cmake' \
-DCMAKE_RANLIB=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-ranlib \
-DCMAKE_AR=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-ar \
-DCMAKE_NM=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-nm \
-DCMAKE_STRIP=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-strip \
-DLLVM_NATIVE_TOOL_DIR=${STAGING_BINDIR_NATIVE} \
-DLLVM_HEADERS_TABLEGEN=${STAGING_BINDIR_NATIVE}/llvm-min-tblgen \
-DPYTHON_LIBRARY=${STAGING_LIBDIR}/lib${PYTHON_DIR}${PYTHON_ABI}.so \
-DLLDB_PYTHON_RELATIVE_PATH=${PYTHON_SITEPACKAGES_DIR} \
-DLLDB_PYTHON_EXE_RELATIVE_PATH=${PYTHON_PN} \
-DLLDB_PYTHON_EXT_SUFFIX=${SOLIBSDEV} \
-DPYTHON_INCLUDE_DIR=${STAGING_INCDIR}/${PYTHON_DIR}${PYTHON_ABI} \
-DPYTHON_EXECUTABLE='${PYTHON}' \
"
EXTRA_OECMAKE:append:class-target = "\
-DLLVM_NATIVE_TOOL_DIR=${STAGING_BINDIR_NATIVE} \
-DLLVM_HEADERS_TABLEGEN=${STAGING_BINDIR_NATIVE}/llvm-min-tblgen \
-DCMAKE_RANLIB=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-ranlib \
-DCMAKE_AR=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-ar \
-DCMAKE_NM=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-nm \
-DCMAKE_STRIP=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-strip \
-DLLVM_TARGET_ARCH=${@get_clang_target_arch(bb, d)} \
-DLLVM_DEFAULT_TARGET_TRIPLE=${TARGET_SYS}${HF} \
-DLLVM_HOST_TRIPLE=${TARGET_SYS}${HF} \
-DPYTHON_LIBRARY=${STAGING_LIBDIR}/lib${PYTHON_DIR}${PYTHON_ABI}.so \
-DPYTHON_INCLUDE_DIR=${STAGING_INCDIR}/${PYTHON_DIR}${PYTHON_ABI} \
-DLLVM_LIBDIR_SUFFIX=${LLVM_LIBDIR_SUFFIX} \
-DLLDB_PYTHON_RELATIVE_PATH=${PYTHON_SITEPACKAGES_DIR} \
-DLLDB_PYTHON_EXE_RELATIVE_PATH=${bindir} \
-DLLDB_PYTHON_EXT_SUFFIX=${SOLIBSDEV} \
"
DEPENDS = "binutils zlib zstd libffi libxml2 libxml2-native ninja-native swig-native spirv-tools-native"
DEPENDS:append:class-nativesdk = " clang-crosssdk-${SDK_SYS} virtual/nativesdk-cross-binutils nativesdk-python3"
DEPENDS:append:class-target = " clang-cross-${TARGET_ARCH} python3 ${@bb.utils.contains('TC_CXX_RUNTIME', 'llvm', 'compiler-rt libcxx', '', d)}"
RRECOMMENDS:${PN} = "binutils"
RRECOMMENDS:${PN}:append:class-target = "${@bb.utils.contains('TC_CXX_RUNTIME', 'llvm', ' libcxx-dev', '', d)}"
# patch out build host paths for reproducibility
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() {
rm -rf ${D}${libdir}/python*/site-packages/six.py
for t in clang-pseudo clang-pseudo-gen clang-rename; do
if [ -e ${B}${BINPATHPREFIX}/bin/$t ]; then
install -Dm 0755 ${B}${BINPATHPREFIX}/bin/$t ${D}${bindir}/$t
fi
done
}
do_install:append:class-target () {
# Allow bin path to change based on YOCTO_ALTERNATE_EXE_PATH
sed -i 's;${_IMPORT_PREFIX}/bin;${_IMPORT_PREFIX_BIN};g' ${D}${libdir}/cmake/llvm/LLVMExports-release.cmake
# Insert function to populate Import Variables
sed -i "4i\
if(DEFINED ENV{YOCTO_ALTERNATE_EXE_PATH})\n\
execute_process(COMMAND \"llvm-config\" \"--bindir\" OUTPUT_VARIABLE _IMPORT_PREFIX_BIN OUTPUT_STRIP_TRAILING_WHITESPACE)\n\
else()\n\
set(_IMPORT_PREFIX_BIN \"\${_IMPORT_PREFIX}/bin\")\n\
endif()\n" ${D}${libdir}/cmake/llvm/LLVMExports-release.cmake
if [ -n "${LLVM_LIBDIR_SUFFIX}" ]; then
mkdir -p ${D}${nonarch_libdir}
mv ${D}${libdir}/clang ${D}${nonarch_libdir}/clang
ln -rs ${D}${nonarch_libdir}/clang ${D}${libdir}/clang
rmdir --ignore-fail-on-non-empty ${D}${libdir}
fi
for t in clang clang++ llvm-nm llvm-ar llvm-as llvm-ranlib llvm-strip llvm-objcopy llvm-objdump llvm-readelf \
llvm-addr2line llvm-dwp llvm-size llvm-strings llvm-cov; do
ln -sf $t ${D}${bindir}/${TARGET_PREFIX}$t
done
# reproducibility
sed -i -e 's,${B},,g' ${D}${libdir}/cmake/llvm/LLVMConfig.cmake
}
do_install:append:class-native () {
if ${@bb.utils.contains('PACKAGECONFIG', 'clangd', 'true', 'false', d)}; then
install -Dm 0755 ${B}${BINPATHPREFIX}/bin/clangd-indexer ${D}${bindir}/clangd-indexer
fi
install -Dm 0755 ${B}${BINPATHPREFIX}/bin/clang-tidy-confusable-chars-gen ${D}${bindir}/clang-tidy-confusable-chars-gen
install -Dm 0755 ${B}${BINPATHPREFIX}/bin/clang-tblgen ${D}${bindir}/clang-tblgen
install -Dm 0755 ${B}${BINPATHPREFIX}/bin/lldb-tblgen ${D}${bindir}/lldb-tblgen
install -Dm 0755 ${B}${BINPATHPREFIX}/bin/llvm-min-tblgen ${D}${bindir}/llvm-min-tblgen
install -Dm 0755 ${B}${BINPATHPREFIX}/bin/prepare_builtins ${D}${bindir}/prepare_builtins
for f in `find ${D}${bindir} -executable -type f -not -type l`; do
test -n "`file -b $f|grep -i ELF`" && ${STRIP} $f
echo "stripped $f"
done
ln -sf clang-tblgen ${D}${bindir}/clang-tblgen${PV}
ln -sf llvm-tblgen ${D}${bindir}/llvm-tblgen${PV}
ln -sf llvm-config ${D}${bindir}/llvm-config${PV}
}
do_install:append:class-nativesdk () {
if [ -e ${D}${libdir}/cmake/llvm/LLVMConfig.cmake ] ; then
sed -i -e "s|${B}/./bin/||g" ${D}${libdir}/cmake/llvm/LLVMConfig.cmake
fi
if ${@bb.utils.contains('PACKAGECONFIG', 'clangd', 'true', 'false', d)}; then
install -Dm 0755 ${B}${BINPATHPREFIX}/bin/clangd-indexer ${D}${bindir}/clangd-indexer
fi
install -Dm 0755 ${B}${BINPATHPREFIX}/bin/clang-tblgen ${D}${bindir}/clang-tblgen
install -Dm 0755 ${B}${BINPATHPREFIX}/bin/clang-tidy-confusable-chars-gen ${D}${bindir}/clang-tidy-confusable-chars-gen
for f in `find ${D}${bindir} -executable -type f -not -type l`; do
test -n "`file -b $f|grep -i ELF`" && ${STRIP} $f
done
ln -sf clang-tblgen ${D}${bindir}/clang-tblgen${PV}
ln -sf llvm-tblgen ${D}${bindir}/llvm-tblgen${PV}
ln -sf llvm-config ${D}${bindir}/llvm-config${PV}
rm -rf ${D}${datadir}/llvm/cmake
rm -rf ${D}${datadir}/llvm
#reproducibility
if [ -e ${D}${libdir}/cmake/llvm/LLVMConfig.cmake ] ; then
sed -i -e 's,${B},,g' ${D}${libdir}/cmake/llvm/LLVMConfig.cmake
fi
}
PROVIDES:append:class-native = " llvm-native libclc-native"
PROVIDES:append:class-target = " llvm libclc"
PROVIDES:append:class-nativesdk = " nativesdk-llvm nativesdk-libclc"
PACKAGES =+ "${PN}-libllvm ${PN}-lldb-python ${PN}-libclang-cpp ${PN}-tidy ${PN}-format ${PN}-tools ${PN}-clc \
libclang lldb lldb-server liblldb llvm-linker-tools"
BBCLASSEXTEND = "native nativesdk"
RDEPENDS:lldb += "${PN}-lldb-python lldb-server"
RDEPENDS:${PN}-tools += "\
perl-module-digest-md5 \
perl-module-file-basename \
perl-module-file-copy \
perl-module-file-find \
perl-module-file-path \
perl-module-findbin \
perl-module-hash-util \
perl-module-sys-hostname \
perl-module-term-ansicolor \
"
RPROVIDES:${PN}-clc = "${MLPREFIX}libclc"
RRECOMMENDS:${PN}-tidy += "${PN}-tools"
FILES:llvm-linker-tools = "${libdir}/LLVMgold* ${libdir}/libLTO.so.* ${libdir}/LLVMPolly*"
FILES:${PN}-libclang-cpp = "${libdir}/libclang-cpp.so.*"
FILES:${PN}-lldb-python = "${libdir}/python*/site-packages/lldb/*"
FILES:${PN}-tidy = "${bindir}/*clang-tidy*"
FILES:${PN}-format = "${bindir}/*clang-format*"
FILES:${PN}-tools = "${bindir}/analyze-build \
${bindir}/c-index-test \
${bindir}/clang-apply-replacements \
${bindir}/clang-change-namespace \
${bindir}/clang-check \
${bindir}/clang-doc \
${bindir}/clang-extdef-mapping \
${bindir}/clang-include-fixer \
${bindir}/clang-linker-wrapper \
${bindir}/clang-move \
${bindir}/clang-nvlink-wrapper \
${bindir}/clang-offload-bundler \
${bindir}/clang-offload-packager \
${bindir}/clang-pseudo* \
${bindir}/clang-query \
${bindir}/clang-refactor \
${bindir}/clang-rename* \
${bindir}/clang-reorder-fields \
${bindir}/clang-repl \
${bindir}/clang-scan-deps \
${bindir}/diagtool \
${bindir}/find-all-symbols \
${bindir}/hmaptool \
${bindir}/hwasan_symbolize \
${bindir}/intercept-build \
${bindir}/modularize \
${bindir}/pp-trace \
${bindir}/sancov \
${bindir}/scan-build \
${bindir}/scan-build-py \
${bindir}/scan-view \
${bindir}/split-file \
${libdir}/libscanbuild/* \
${libdir}/libear/* \
${libexecdir}/analyze-c++ \
${libexecdir}/analyze-cc \
${libexecdir}/c++-analyzer \
${libexecdir}/ccc-analyzer \
${libexecdir}/intercept-c++ \
${libexecdir}/intercept-cc \
${datadir}/scan-build/* \
${datadir}/scan-view/* \
${datadir}/opt-viewer/* \
${datadir}/clang/* \
"
FILES:${PN} += "\
${bindir}/clang-cl \
${libdir}/BugpointPasses.so \
${libdir}/LLVMHello.so \
${libdir}/*Plugin.so \
${libdir}/${BPN} \
${nonarch_libdir}/${BPN}/*/include/ \
"
FILES:${PN}-clc += "${datadir}/clc"
FILES:lldb = "\
${bindir}/lldb \
${bindir}/lldb-argdumper \
${bindir}/lldb-instr \
${bindir}/lldb-vscode \
"
FILES:lldb-server = "\
${bindir}/lldb-server \
"
FILES:liblldb = "\
${libdir}/liblldbIntelFeatures.so.* \
${libdir}/liblldb.so.* \
"
FILES:${PN}-libllvm =+ "\
${libdir}/libLLVM.so.${MAJOR_VER}.${MINOR_VER} \
${libdir}/libLLVM-${MAJOR_VER}.so \
${libdir}/libRemarks.so.* \
"
FILES:libclang = "\
${libdir}/libclang.so.* \
"
FILES:${PN}-dev += "\
${datadir}/llvm/cmake \
${libdir}/cmake \
${nonarch_libdir}/libear \
${nonarch_libdir}/${BPN}/*.la \
"
FILES:${PN}-doc += "${datadir}/clang-doc"
FILES:${PN}-staticdev += "${nonarch_libdir}/${BPN}/*.a"
FILES:${PN}-staticdev:remove = "${libdir}/${BPN}/*.a"
FILES:${PN}-dev:remove = "${libdir}/${BPN}/*.la"
FILES:${PN}:remove = "${libdir}/${BPN}/*"
INSANE_SKIP:${PN} += "already-stripped"
#INSANE_SKIP:${PN}-dev += "dev-elf"
INSANE_SKIP:${PN}-lldb-python += "dev-so dev-deps"
INSANE_SKIP:${MLPREFIX}liblldb = "dev-so"
INSANE_SKIP:${PN}-libllvm = "dev-so"
#Avoid SSTATE_SCAN_COMMAND running sed over llvm-config.
SSTATE_SCAN_FILES:remove = "*-config"
COMPILER_RT:class-nativesdk:toolchain-clang:runtime-llvm = "-rtlib=libgcc --unwindlib=libgcc"
LIBCPLUSPLUS:class-nativesdk:toolchain-clang:runtime-llvm = "-stdlib=libstdc++"
SYSROOT_DIRS:append:class-target = " ${nonarch_libdir}"
SYSROOT_PREPROCESS_FUNCS:append:class-target = " clang_sysroot_preprocess"
SYSROOT_PREPROCESS_FUNCS:append:class-nativesdk = " clang_sysroot_preprocess"
clang_sysroot_preprocess() {
install -d ${SYSROOT_DESTDIR}${bindir_crossscripts}/
install -m 0755 ${S}/llvm/tools/llvm-config/llvm-config ${SYSROOT_DESTDIR}${bindir_crossscripts}/
ln -sf llvm-config ${SYSROOT_DESTDIR}${bindir_crossscripts}/llvm-config${PV}
# LLDTargets.cmake references the lld executable(!) that some modules/plugins link to
install -d ${SYSROOT_DESTDIR}${bindir}
binaries="lld diagtool clang-${MAJOR_VER} clang-format clang-offload-packager
clang-offload-bundler clang-scan-deps clang-repl
clang-refactor clang-check clang-extdef-mapping clang-apply-replacements
clang-reorder-fields clang-tidy clang-change-namespace clang-doc clang-include-fixer
find-all-symbols clang-move clang-query pp-trace modularize"
if ${@bb.utils.contains('PACKAGECONFIG', 'clangd', 'true', 'false', d)}; then
binaries="${binaries} clangd"
fi
for f in ${binaries}
do
install -m 755 ${D}${bindir}/$f ${SYSROOT_DESTDIR}${bindir}/
done
}