poky/meta/recipes-devtools/clang/clang_git.bb
Ross Burton 8bd63e170c clang: consolidate LLVM_APPEND_VC_REV=OFF
Whilst the change to add TMPDIR to GIT_CEILING_DIRECTORIES should stop
LLVM from embedding git information into the recipes, also disable this
behaviour explicitly.

We do this because it's not just the sha of the source tree but also
the full URL of the repository, which would be an information leak if
an internal git mirror was being used.

(From OE-Core rev: 9247e242bf0e2384142427b67e5f1f7b4018c45d)

Signed-off-by: Ross Burton <ross.burton@arm.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2025-10-09 10:58:07 +01:00

250 lines
9.1 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
BPN = "clang"
CVE_PRODUCT = "llvm:clang"
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 multilib_header python3-dir
PACKAGECONFIG ??= "build-id clangd libclang-python \
${@bb.utils.filter('DISTRO_FEATURES', 'lto thin-lto', d)} \
${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-lld', 'lld', '', d)} \
${@bb.utils.contains('TC_CXX_RUNTIME', 'llvm', 'compiler-rt libcplusplus libomp unwindlib', '', d)} \
"
PACKAGECONFIG:remove:class-native = "lto thin-lto"
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[libcplusplus] = "-DCLANG_DEFAULT_CXX_STDLIB=libc++,,"
PACKAGECONFIG[libomp] = "-DCLANG_DEFAULT_OPENMP_RUNTIME=libomp,,"
PACKAGECONFIG[lld] = "-DCLANG_DEFAULT_LINKER=lld,,,"
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,"
PACKAGECONFIG[unwindlib] = "-DCLANG_DEFAULT_UNWINDLIB=libunwind,-DCLANG_DEFAULT_UNWINDLIB=libgcc,,"
PACKAGECONFIG[libclang-python] = "-DCLANG_PYTHON_BINDINGS_VERSIONS=${PYTHON_BASEVERSION},,"
OECMAKE_SOURCEPATH = "${S}/clang"
# linux hosts (.so) on Windows .pyd
SOLIBSDEV:mingw32 = ".pyd"
#CMAKE_VERBOSE = "VERBOSE=1"
EXTRA_OECMAKE += "-DLLVM_ENABLE_ASSERTIONS=OFF \
-DLLVM_ENABLE_PIC=ON \
-DCLANG_DEFAULT_PIE_ON_LINUX=ON \
-DFFI_INCLUDE_DIR=$(pkg-config --variable=includedir libffi) \
-DLLVM_BUILD_EXTERNAL_COMPILER_RT=ON \
-DCMAKE_SYSTEM_NAME=Linux \
-DCMAKE_BUILD_TYPE=MinSizeRel \
-DLLVM_VERSION_SUFFIX='${VER_SUFFIX}' \
-DLLVM_CMAKE_DIR=${STAGING_LIBDIR}/cmake/llvm \
-DLLVM_NATIVE_TOOL_DIR=${STAGING_BINDIR_NATIVE} \
-DLLVM_TABLEGEN_EXE=${STAGING_BINDIR_NATIVE}/llvm-tblgen \
-DCLANG_TABLEGEN_EXE=${STAGING_BINDIR_NATIVE}/clang-tblgen \
-DLLVM_INCLUDE_TESTS=OFF \
-DCROSS_TOOLCHAIN_FLAGS_NATIVE='-DCMAKE_TOOLCHAIN_FILE=${WORKDIR}/toolchain-native.cmake' \
-DLLVM_LIBDIR_SUFFIX=${LLVM_LIBDIR_SUFFIX} \
-DCMAKE_AR=${STAGING_BINDIR_NATIVE}/llvm-ar \
-DCMAKE_NM=${STAGING_BINDIR_NATIVE}/llvm-nm \
-DCMAKE_RANLIB=${STAGING_BINDIR_NATIVE}/llvm-ranlib \
-DCMAKE_STRIP=${STAGING_BINDIR_NATIVE}/llvm-strip \
"
DEPENDS = "llvm-tblgen-native llvm-native llvm binutils zlib zstd libffi libxml2 libxml2-native"
DEPENDS:append:class-target = " ${@bb.utils.contains('TC_CXX_RUNTIME', 'llvm', 'compiler-rt libcxx', '', d)}"
RDEPENDS:${PN}:append:class-target = "${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-lld', ' lld', '', d)}"
RRECOMMENDS:${PN}:append:class-target = "binutils ${@bb.utils.contains('TC_CXX_RUNTIME', 'llvm', ' libcxx-dev', '', d)}"
do_configure:prepend() {
# Link clang-tools-extra into the clang tree as clang will look for it here
# if it's doing a standalone build.
ln -srf ${S}/clang-tools-extra ${S}/clang/tools/extra
}
do_install:append() {
oe_multilib_header clang/Config/config.h
}
do_install:append:class-target () {
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
}
do_install:append:class-nativesdk () {
#reproducibility
if [ -e ${D}${libdir}/cmake/llvm/LLVMConfig.cmake ] ; then
sed -i -e 's,${B},,g' ${D}${libdir}/cmake/llvm/LLVMConfig.cmake
fi
}
PACKAGES =+ "${PN}-libclang-python ${PN}-libclang-cpp ${PN}-tidy ${PN}-format ${PN}-tools libclang"
BBCLASSEXTEND = "native nativesdk"
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 \
"
RRECOMMENDS:${PN}-tidy += "${PN}-tools"
FILES:${PN}-libclang-cpp = "${libdir}/libclang-cpp.so.*"
FILES:${PN}-libclang-python = "${PYTHON_SITEPACKAGES_DIR}/clang/*"
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: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"
#Avoid SSTATE_SCAN_COMMAND running sed over llvm-config.
SSTATE_SCAN_FILES:remove = "*-config"
COMPILER_RT:class-nativesdk:toolchain-clang = "-rtlib=libgcc --unwindlib=libgcc"
LIBCPLUSPLUS:class-nativesdk:toolchain-clang = "-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}/
# clang and clang-tools
binaries="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-extra-tools
binaries="${binaries} 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
}