mirror of
git://git.yoctoproject.org/poky
synced 2026-09-27 04:46:35 +00:00
clang: use llvm recipe
Change this recipe to build just clang and clang-tools-extra, using the LLVM provided by the llvm recipe. This adds an 'extra-tools' PACKAGECONFIG (enabled by default) that controls whether to build the clang-tools-extra project. This includes clang-tidy and clangd, but the compile time and size for these components is not insignificant. Add a patch from upstream to support using native prebuilt tools (such as clang-tblgen) when building standalone. Add a patch that is being worked on with upstream to not rebuild clang- tblgen if it has already been provided. This saves a little build time, but more importantly for us resolves a static linking/uninative problem. Remove the dependency on clang-cross in non-native builds by just depending on llvm-native and using the un-prefixed tools directly. (From OE-Core rev: d76dc362c8e18779cc4ddc6a778fb423c0e66a65) Signed-off-by: Ross Burton <ross.burton@arm.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
parent
1ad97d9786
commit
b1f036069e
@ -0,0 +1,63 @@
|
|||||||
|
From 2ff1134d1d2b9f3c207e3ebd98de922f9ef6c15a Mon Sep 17 00:00:00 2001
|
||||||
|
From: Ross Burton <ross.burton@arm.com>
|
||||||
|
Date: Wed, 24 Sep 2025 17:02:57 +0100
|
||||||
|
Subject: [PATCH] [clang] Support building native tools when cross-compiling
|
||||||
|
standalone clang
|
||||||
|
|
||||||
|
When cross-compiling the LLVM project as a whole (from llvm/), if it
|
||||||
|
cannot find presupplied tools it will create a native build environment
|
||||||
|
to build the tools it needs.
|
||||||
|
|
||||||
|
However, when doing a standalone build of clang (that is, from clang/
|
||||||
|
and linking against an existing libLLVM) this doesn't work. Instead
|
||||||
|
a _target_ binary is built which predictably then fails.
|
||||||
|
|
||||||
|
The conventional workaround for this is to build the native tools in a
|
||||||
|
separate native compile phase and pass the paths to the cross build, for
|
||||||
|
example see OpenEmbedded[1] or Nix[2]. But we can do better!
|
||||||
|
|
||||||
|
The first problem is that LLVM_USE_HOST_TOOLS is only set in the llvm/
|
||||||
|
CMakeLists.txt, so setup_host_tool() will never consider building a
|
||||||
|
native binary. This can be solved by setting LLVM_USE_HOST_TOOLS based
|
||||||
|
on CMAKE_CROSSCOMPILING in clang/CMakeLists.txt in the standalone case.
|
||||||
|
|
||||||
|
Now setup_host_tool() will try to build a native tool, but it needs
|
||||||
|
build_native_tool() from CrossCompile.cmake, so that also needs to be
|
||||||
|
included.
|
||||||
|
|
||||||
|
Finally, the native binary then fails because there's no provider for
|
||||||
|
the dependency "CONFIGURE_Clang_NATIVE", so use llvm_create_cross_target
|
||||||
|
to create the native environment.
|
||||||
|
|
||||||
|
These few lines mirror what the lldb CMakeLists.txt does in the
|
||||||
|
standalone case, so there is prior art for this.
|
||||||
|
|
||||||
|
[1] https://git.openembedded.org/openembedded-core/tree/meta/recipes-devtools/clang/clang_git.bb?id=e18d697e92b55e57124e80234369d46575226386#n212
|
||||||
|
[2] https://github.com/NixOS/nixpkgs/blob/3354d448f2a26117a74638957b0131ce3da9c8c4/pkgs/development/compilers/llvm/common/tblgen.nix#L54
|
||||||
|
|
||||||
|
Upstream-Status: Submitted [https://github.com/llvm/llvm-project/pull/160605]
|
||||||
|
Signed-off-by: Ross Burton <ross.burton@arm.com>
|
||||||
|
---
|
||||||
|
clang/CMakeLists.txt | 6 ++++++
|
||||||
|
1 file changed, 6 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/clang/CMakeLists.txt b/clang/CMakeLists.txt
|
||||||
|
index 1bb73599970c..4eaa71289985 100644
|
||||||
|
--- a/clang/CMakeLists.txt
|
||||||
|
+++ b/clang/CMakeLists.txt
|
||||||
|
@@ -80,6 +80,12 @@ if(CLANG_BUILT_STANDALONE)
|
||||||
|
include(GetErrcMessages)
|
||||||
|
include(LLVMDistributionSupport)
|
||||||
|
|
||||||
|
+ if(CMAKE_CROSSCOMPILING)
|
||||||
|
+ set(LLVM_USE_HOST_TOOLS ON)
|
||||||
|
+ include(CrossCompile)
|
||||||
|
+ llvm_create_cross_target(Clang NATIVE "" Release)
|
||||||
|
+ endif()
|
||||||
|
+
|
||||||
|
set(PACKAGE_VERSION "${LLVM_PACKAGE_VERSION}")
|
||||||
|
set(BUG_REPORT_URL "${LLVM_PACKAGE_BUGREPORT}" CACHE STRING
|
||||||
|
"Default URL where bug reports are to be submitted.")
|
||||||
|
--
|
||||||
|
2.43.0
|
||||||
|
|
||||||
24
meta/recipes-devtools/clang/clang/clang-no-tblgen.patch
Normal file
24
meta/recipes-devtools/clang/clang/clang-no-tblgen.patch
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
[clang] Only build clang-tblgen if it is actually needed
|
||||||
|
|
||||||
|
It's possible to build clang with an existing clang-tblgen (common when
|
||||||
|
cross-compiling, for instance) by setting CLANG_TABLEGEN_EXE. If this
|
||||||
|
is the case there's no need to build it, as it won't be used.
|
||||||
|
|
||||||
|
Upstream-Status: Submitted [https://github.com/llvm/llvm-project/pull/161952]
|
||||||
|
Signed-off-by: Ross Burton <ross.burton@arm.com>
|
||||||
|
|
||||||
|
diff --git a/clang/CMakeLists.txt b/clang/CMakeLists.txt
|
||||||
|
index e4cb1a359620..b650b3b986f4 100644
|
||||||
|
--- a/clang/CMakeLists.txt
|
||||||
|
+++ b/clang/CMakeLists.txt
|
||||||
|
@@ -479,7 +479,9 @@ option(CLANG_ENABLE_HLSL "Include HLSL build products" Off)
|
||||||
|
# While HLSL support is experimental this should stay hidden.
|
||||||
|
mark_as_advanced(CLANG_ENABLE_HLSL)
|
||||||
|
|
||||||
|
-add_subdirectory(utils/TableGen)
|
||||||
|
+if (NOT DEFINED CLANG_TABLEGEN_EXE OR CLANG_INCLUDE_TESTS)
|
||||||
|
+ add_subdirectory(utils/TableGen)
|
||||||
|
+endif()
|
||||||
|
|
||||||
|
# Export CLANG_TABLEGEN_EXE for use by flang docs.
|
||||||
|
set(CLANG_TABLEGEN_EXE "${CLANG_TABLEGEN_EXE}" CACHE INTERNAL "")
|
||||||
@ -19,81 +19,37 @@ require common-source.inc
|
|||||||
|
|
||||||
BPN = "clang"
|
BPN = "clang"
|
||||||
|
|
||||||
CVE_PRODUCT += "llvm:clang"
|
CVE_PRODUCT = "llvm:clang"
|
||||||
|
|
||||||
INHIBIT_DEFAULT_DEPS:class-native = "1"
|
|
||||||
|
|
||||||
LDFLAGS:append:class-target:riscv32 = " -Wl,--no-as-needed -latomic -Wl,--as-needed"
|
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"
|
LDFLAGS:append:class-target:mips = " -Wl,--no-as-needed -latomic -Wl,--as-needed"
|
||||||
|
|
||||||
inherit cmake pkgconfig multilib_header python3-dir
|
inherit cmake pkgconfig multilib_header python3-dir
|
||||||
|
|
||||||
PACKAGECONFIG_CLANG_COMMON = "build-id eh libedit rtti shared-libs libclang-python \
|
PACKAGECONFIG ??= "build-id clangd libclang-python \
|
||||||
${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-lld', 'lld', '', d)} \
|
|
||||||
${@bb.utils.contains('TC_CXX_RUNTIME', 'llvm', 'compiler-rt libcplusplus libomp unwindlib', '', d)} \
|
|
||||||
"
|
|
||||||
|
|
||||||
PACKAGECONFIG ??= "${PACKAGECONFIG_CLANG_COMMON} \
|
|
||||||
${@bb.utils.filter('DISTRO_FEATURES', 'lto thin-lto', d)} \
|
${@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:class-native = "clangd \
|
PACKAGECONFIG:remove:class-native = "lto thin-lto"
|
||||||
${PACKAGECONFIG_CLANG_COMMON} \
|
|
||||||
"
|
|
||||||
PACKAGECONFIG:class-nativesdk = "clangd \
|
|
||||||
${PACKAGECONFIG_CLANG_COMMON} \
|
|
||||||
${@bb.utils.filter('DISTRO_FEATURES', 'lto thin-lto', d)} \
|
|
||||||
"
|
|
||||||
|
|
||||||
PACKAGECONFIG[build-id] = "-DENABLE_LINKER_BUILD_ID=ON,-DENABLE_LINKER_BUILD_ID=OFF,,"
|
PACKAGECONFIG[build-id] = "-DENABLE_LINKER_BUILD_ID=ON,-DENABLE_LINKER_BUILD_ID=OFF,,"
|
||||||
PACKAGECONFIG[clangd] = "-DCLANG_ENABLE_CLANGD=ON,-DCLANG_ENABLE_CLANGD=OFF,,"
|
PACKAGECONFIG[clangd] = "-DCLANG_ENABLE_CLANGD=ON,-DCLANG_ENABLE_CLANGD=OFF,,"
|
||||||
|
|
||||||
# Activate to build the dexp tool in clangd
|
# Activate to build the dexp tool in clangd
|
||||||
# Disabled by default for -native since it is known to trigger compiler failure on Debian 11
|
# 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
|
# See: https://bugzilla.yoctoproject.org/show_bug.cgi?id=15803
|
||||||
PACKAGECONFIG[clangd-dexp] = "-DCLANGD_BUILD_DEXP=ON,-DCLANGD_BUILD_DEXP=OFF,,"
|
PACKAGECONFIG[clangd-dexp] = "-DCLANGD_BUILD_DEXP=ON,-DCLANGD_BUILD_DEXP=OFF,,"
|
||||||
|
|
||||||
PACKAGECONFIG[compiler-rt] = "-DCLANG_DEFAULT_RTLIB=compiler-rt,,"
|
PACKAGECONFIG[compiler-rt] = "-DCLANG_DEFAULT_RTLIB=compiler-rt,,"
|
||||||
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[libcplusplus] = "-DCLANG_DEFAULT_CXX_STDLIB=libc++,,"
|
PACKAGECONFIG[libcplusplus] = "-DCLANG_DEFAULT_CXX_STDLIB=libc++,,"
|
||||||
PACKAGECONFIG[libedit] = "-DLLVM_ENABLE_LIBEDIT=ON,-DLLVM_ENABLE_LIBEDIT=OFF,libedit libedit-native"
|
|
||||||
PACKAGECONFIG[libomp] = "-DCLANG_DEFAULT_OPENMP_RUNTIME=libomp,,"
|
PACKAGECONFIG[libomp] = "-DCLANG_DEFAULT_OPENMP_RUNTIME=libomp,,"
|
||||||
PACKAGECONFIG[lld] = "-DCLANG_DEFAULT_LINKER=lld,,,"
|
PACKAGECONFIG[lld] = "-DCLANG_DEFAULT_LINKER=lld,,,"
|
||||||
PACKAGECONFIG[lto] = "-DLLVM_ENABLE_LTO=Full -DLLVM_BINUTILS_INCDIR=${STAGING_INCDIR},,binutils,"
|
PACKAGECONFIG[lto] = "-DLLVM_ENABLE_LTO=Full -DLLVM_BINUTILS_INCDIR=${STAGING_INCDIR},,binutils,"
|
||||||
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[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[thin-lto] = "-DLLVM_ENABLE_LTO=Thin -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[unwindlib] = "-DCLANG_DEFAULT_UNWINDLIB=libunwind,-DCLANG_DEFAULT_UNWINDLIB=libgcc,,"
|
||||||
PACKAGECONFIG[libclang-python] = "-DCLANG_PYTHON_BINDINGS_VERSIONS=${PYTHON_BASEVERSION},,"
|
PACKAGECONFIG[libclang-python] = "-DCLANG_PYTHON_BINDINGS_VERSIONS=${PYTHON_BASEVERSION},,"
|
||||||
|
|
||||||
OECMAKE_SOURCEPATH = "${S}/llvm"
|
OECMAKE_SOURCEPATH = "${S}/clang"
|
||||||
|
|
||||||
# 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_TARGETS_TO_BUILD:class-target ?= "${@get_clang_host_arch(bb, d)};BPF;${LLVM_TARGETS_GPU}"
|
|
||||||
|
|
||||||
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"
|
|
||||||
|
|
||||||
# linux hosts (.so) on Windows .pyd
|
# linux hosts (.so) on Windows .pyd
|
||||||
SOLIBSDEV:mingw32 = ".pyd"
|
SOLIBSDEV:mingw32 = ".pyd"
|
||||||
@ -102,89 +58,43 @@ SOLIBSDEV:mingw32 = ".pyd"
|
|||||||
|
|
||||||
EXTRA_OECMAKE += "-DLLVM_ENABLE_ASSERTIONS=OFF \
|
EXTRA_OECMAKE += "-DLLVM_ENABLE_ASSERTIONS=OFF \
|
||||||
-DLLVM_APPEND_VC_REV=OFF \
|
-DLLVM_APPEND_VC_REV=OFF \
|
||||||
-DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=OFF \
|
|
||||||
-DLLVM_ENABLE_EXPENSIVE_CHECKS=OFF \
|
|
||||||
-DLLVM_ENABLE_PIC=ON \
|
-DLLVM_ENABLE_PIC=ON \
|
||||||
-DCLANG_DEFAULT_PIE_ON_LINUX=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) \
|
-DFFI_INCLUDE_DIR=$(pkg-config --variable=includedir libffi) \
|
||||||
-DLLVM_BUILD_EXTERNAL_COMPILER_RT=ON \
|
-DLLVM_BUILD_EXTERNAL_COMPILER_RT=ON \
|
||||||
-DCMAKE_SYSTEM_NAME=Linux \
|
-DCMAKE_SYSTEM_NAME=Linux \
|
||||||
-DCMAKE_BUILD_TYPE=MinSizeRel \
|
-DCMAKE_BUILD_TYPE=MinSizeRel \
|
||||||
-DLLVM_ENABLE_PROJECTS='${LLVM_PROJECTS}' \
|
|
||||||
-DLLVM_BINUTILS_INCDIR=${STAGING_INCDIR} \
|
|
||||||
-DLLVM_VERSION_SUFFIX='${VER_SUFFIX}' \
|
-DLLVM_VERSION_SUFFIX='${VER_SUFFIX}' \
|
||||||
-DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON \
|
-DLLVM_CMAKE_DIR=${STAGING_LIBDIR}/cmake/llvm \
|
||||||
-DLLVM_TARGETS_TO_BUILD='${LLVM_TARGETS_TO_BUILD}' \
|
|
||||||
-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD='${LLVM_EXPERIMENTAL_TARGETS_TO_BUILD}' \
|
|
||||||
-DLLVM_NATIVE_TOOL_DIR=${STAGING_BINDIR_NATIVE} \
|
-DLLVM_NATIVE_TOOL_DIR=${STAGING_BINDIR_NATIVE} \
|
||||||
-DLLVM_TABLEGEN=${STAGING_BINDIR_NATIVE}/llvm-tblgen \
|
|
||||||
-DLLVM_TABLEGEN_EXE=${STAGING_BINDIR_NATIVE}/llvm-tblgen \
|
-DLLVM_TABLEGEN_EXE=${STAGING_BINDIR_NATIVE}/llvm-tblgen \
|
||||||
|
-DCLANG_TABLEGEN_EXE=${STAGING_BINDIR_NATIVE}/clang-tblgen \
|
||||||
-DLLVM_INCLUDE_TESTS=OFF \
|
-DLLVM_INCLUDE_TESTS=OFF \
|
||||||
-DCROSS_TOOLCHAIN_FLAGS_NATIVE='-DCMAKE_TOOLCHAIN_FILE=${WORKDIR}/toolchain-native.cmake' \
|
-DCROSS_TOOLCHAIN_FLAGS_NATIVE='-DCMAKE_TOOLCHAIN_FILE=${WORKDIR}/toolchain-native.cmake' \
|
||||||
"
|
|
||||||
|
|
||||||
EXTRA_OECMAKE:append:class-nativesdk = "\
|
|
||||||
-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 \
|
|
||||||
"
|
|
||||||
EXTRA_OECMAKE:append:class-target = "\
|
|
||||||
-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=${HOST_ARCH} \
|
|
||||||
-DLLVM_DEFAULT_TARGET_TRIPLE=${TARGET_SYS}${HF} \
|
|
||||||
-DLLVM_HOST_TRIPLE=${TARGET_SYS}${HF} \
|
|
||||||
-DLLVM_LIBDIR_SUFFIX=${LLVM_LIBDIR_SUFFIX} \
|
-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 = "binutils zlib zstd libffi libxml2 libxml2-native llvm-tblgen-native"
|
DEPENDS = "llvm-tblgen-native llvm-native llvm binutils zlib zstd libffi libxml2 libxml2-native"
|
||||||
DEPENDS:append:class-nativesdk = " clang-crosssdk-${SDK_SYS} virtual/nativesdk-cross-binutils"
|
DEPENDS:append:class-target = " ${@bb.utils.contains('TC_CXX_RUNTIME', 'llvm', 'compiler-rt libcxx', '', d)}"
|
||||||
DEPENDS:append:class-target = " ${MLPREFIX}clang-cross-${TARGET_ARCH} ${@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)}"
|
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)}"
|
RRECOMMENDS:${PN}:append:class-target = "binutils ${@bb.utils.contains('TC_CXX_RUNTIME', 'llvm', ' libcxx-dev', '', d)}"
|
||||||
|
|
||||||
# patch out build host paths for reproducibility
|
do_configure:prepend() {
|
||||||
reproducible_build_variables() {
|
# Link clang-tools-extra into the clang tree as clang will look for it here
|
||||||
sed -i -e "s,${DEBUG_PREFIX_MAP},,g" \
|
# if it's doing a standalone build.
|
||||||
-e "s,--sysroot=${RECIPE_SYSROOT},,g" \
|
ln -srf ${S}/clang-tools-extra ${S}/clang/tools/extra
|
||||||
-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() {
|
do_install:append() {
|
||||||
oe_multilib_header llvm/Config/llvm-config.h
|
|
||||||
oe_multilib_header clang/Config/config.h
|
oe_multilib_header clang/Config/config.h
|
||||||
}
|
}
|
||||||
|
|
||||||
do_install:append:class-target () {
|
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-*.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-*.cmake
|
|
||||||
|
|
||||||
if [ -n "${LLVM_LIBDIR_SUFFIX}" ]; then
|
if [ -n "${LLVM_LIBDIR_SUFFIX}" ]; then
|
||||||
mkdir -p ${D}${nonarch_libdir}
|
mkdir -p ${D}${nonarch_libdir}
|
||||||
mv ${D}${libdir}/clang ${D}${nonarch_libdir}/clang
|
mv ${D}${libdir}/clang ${D}${nonarch_libdir}/clang
|
||||||
@ -195,53 +105,16 @@ endif()\n" ${D}${libdir}/cmake/llvm/LLVMExports-*.cmake
|
|||||||
llvm-addr2line llvm-dwp llvm-size llvm-strings llvm-cov; do
|
llvm-addr2line llvm-dwp llvm-size llvm-strings llvm-cov; do
|
||||||
ln -sf $t ${D}${bindir}/${TARGET_PREFIX}$t
|
ln -sf $t ${D}${bindir}/${TARGET_PREFIX}$t
|
||||||
done
|
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
|
|
||||||
|
|
||||||
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 llvm-config ${D}${bindir}/llvm-config${PV}
|
|
||||||
|
|
||||||
# These are provided by llvm-tblgen-native
|
|
||||||
rm ${D}${bindir}/*-tblgen
|
|
||||||
}
|
}
|
||||||
|
|
||||||
do_install:append:class-nativesdk () {
|
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
|
|
||||||
|
|
||||||
for f in `find ${D}${bindir} -executable -type f -not -type l`; do
|
|
||||||
test -n "`file -b $f|grep -i ELF`" && ${STRIP} $f
|
|
||||||
done
|
|
||||||
|
|
||||||
rm -rf ${D}${datadir}/llvm/cmake
|
|
||||||
rm -rf ${D}${datadir}/llvm
|
|
||||||
|
|
||||||
#reproducibility
|
#reproducibility
|
||||||
if [ -e ${D}${libdir}/cmake/llvm/LLVMConfig.cmake ] ; then
|
if [ -e ${D}${libdir}/cmake/llvm/LLVMConfig.cmake ] ; then
|
||||||
sed -i -e 's,${B},,g' ${D}${libdir}/cmake/llvm/LLVMConfig.cmake
|
sed -i -e 's,${B},,g' ${D}${libdir}/cmake/llvm/LLVMConfig.cmake
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
PROVIDES:append:class-native = " llvm-native"
|
PACKAGES =+ "${PN}-libclang-python ${PN}-libclang-cpp ${PN}-tidy ${PN}-format ${PN}-tools libclang"
|
||||||
PROVIDES:append:class-target = " llvm"
|
|
||||||
PROVIDES:append:class-nativesdk = " nativesdk-llvm"
|
|
||||||
|
|
||||||
PACKAGES =+ "${PN}-libllvm ${PN}-libclang-python ${PN}-libclang-cpp ${PN}-tidy ${PN}-format ${PN}-tools \
|
|
||||||
libclang llvm-linker-tools"
|
|
||||||
|
|
||||||
BBCLASSEXTEND = "native nativesdk"
|
BBCLASSEXTEND = "native nativesdk"
|
||||||
|
|
||||||
@ -259,8 +132,6 @@ RDEPENDS:${PN}-tools += "\
|
|||||||
|
|
||||||
RRECOMMENDS:${PN}-tidy += "${PN}-tools"
|
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}-libclang-cpp = "${libdir}/libclang-cpp.so.*"
|
||||||
|
|
||||||
FILES:${PN}-libclang-python = "${PYTHON_SITEPACKAGES_DIR}/clang/*"
|
FILES:${PN}-libclang-python = "${PYTHON_SITEPACKAGES_DIR}/clang/*"
|
||||||
@ -323,12 +194,6 @@ FILES:${PN} += "\
|
|||||||
${nonarch_libdir}/${BPN}/*/include/ \
|
${nonarch_libdir}/${BPN}/*/include/ \
|
||||||
"
|
"
|
||||||
|
|
||||||
FILES:${PN}-libllvm =+ "\
|
|
||||||
${libdir}/libLLVM.so.${MAJOR_VER}.${MINOR_VER} \
|
|
||||||
${libdir}/libLLVM-${MAJOR_VER}.so \
|
|
||||||
${libdir}/libRemarks.so.* \
|
|
||||||
"
|
|
||||||
|
|
||||||
FILES:libclang = "\
|
FILES:libclang = "\
|
||||||
${libdir}/libclang.so.* \
|
${libdir}/libclang.so.* \
|
||||||
"
|
"
|
||||||
@ -349,7 +214,6 @@ FILES:${PN}:remove = "${libdir}/${BPN}/*"
|
|||||||
|
|
||||||
INSANE_SKIP:${PN} += "already-stripped"
|
INSANE_SKIP:${PN} += "already-stripped"
|
||||||
#INSANE_SKIP:${PN}-dev += "dev-elf"
|
#INSANE_SKIP:${PN}-dev += "dev-elf"
|
||||||
INSANE_SKIP:${PN}-libllvm = "dev-so"
|
|
||||||
|
|
||||||
#Avoid SSTATE_SCAN_COMMAND running sed over llvm-config.
|
#Avoid SSTATE_SCAN_COMMAND running sed over llvm-config.
|
||||||
SSTATE_SCAN_FILES:remove = "*-config"
|
SSTATE_SCAN_FILES:remove = "*-config"
|
||||||
@ -363,15 +227,17 @@ SYSROOT_PREPROCESS_FUNCS:append:class-target = " clang_sysroot_preprocess"
|
|||||||
SYSROOT_PREPROCESS_FUNCS:append:class-nativesdk = " clang_sysroot_preprocess"
|
SYSROOT_PREPROCESS_FUNCS:append:class-nativesdk = " clang_sysroot_preprocess"
|
||||||
|
|
||||||
clang_sysroot_preprocess() {
|
clang_sysroot_preprocess() {
|
||||||
install -d ${SYSROOT_DESTDIR}${bindir_crossscripts}/
|
install -d ${SYSROOT_DESTDIR}${bindir}/
|
||||||
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}
|
|
||||||
|
|
||||||
|
# clang and clang-tools
|
||||||
binaries="diagtool clang-${MAJOR_VER} clang-format clang-offload-packager
|
binaries="diagtool clang-${MAJOR_VER} clang-format clang-offload-packager
|
||||||
clang-offload-bundler clang-scan-deps clang-repl
|
clang-offload-bundler clang-scan-deps clang-repl
|
||||||
clang-refactor clang-check clang-extdef-mapping clang-apply-replacements
|
clang-refactor clang-check clang-extdef-mapping"
|
||||||
clang-reorder-fields clang-tidy clang-change-namespace clang-doc clang-include-fixer
|
|
||||||
find-all-symbols clang-move clang-query pp-trace modularize"
|
# 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
|
if ${@bb.utils.contains('PACKAGECONFIG', 'clangd', 'true', 'false', d)}; then
|
||||||
binaries="${binaries} clangd"
|
binaries="${binaries} clangd"
|
||||||
|
|||||||
@ -62,6 +62,8 @@ SRC_URI = "\
|
|||||||
file://0039-Only-build-c-index-test-when-clang-tests-are-include.patch \
|
file://0039-Only-build-c-index-test-when-clang-tests-are-include.patch \
|
||||||
file://0001-Install-lldb-tblgen.patch \
|
file://0001-Install-lldb-tblgen.patch \
|
||||||
file://0001-dont-expose-LLVM_HAVE_OPT_VIEWER_MODULES.patch \
|
file://0001-dont-expose-LLVM_HAVE_OPT_VIEWER_MODULES.patch \
|
||||||
|
file://0001-clang-Support-building-native-tools-when-cross-compi.patch \
|
||||||
|
file://clang-no-tblgen.patch \
|
||||||
"
|
"
|
||||||
# Fallback to no-PIE if not set
|
# Fallback to no-PIE if not set
|
||||||
GCCPIE ??= ""
|
GCCPIE ??= ""
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user