diff options
author | Ross Burton <ross.burton@arm.com> | 2025-10-07 11:42:46 +0100 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2025-10-07 22:31:08 +0100 |
commit | 1ac3c2201f0153043838be2bc92b11c4a7334d08 (patch) | |
tree | 78f2cc29608ee92ef57adc54c403f56dacfc023a | |
parent | e427680f83a357ebeaecdcef7eb3655d578062da (diff) | |
download | poky-1ac3c2201f0153043838be2bc92b11c4a7334d08.tar.gz |
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: aee38ae43e3a8c337af93da440758a368eab7da2)
Signed-off-by: Ross Burton <ross.burton@arm.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
4 files changed, 117 insertions, 162 deletions
diff --git a/meta/recipes-devtools/clang/clang/0001-clang-Support-building-native-tools-when-cross-compi.patch b/meta/recipes-devtools/clang/clang/0001-clang-Support-building-native-tools-when-cross-compi.patch new file mode 100644 index 0000000000..c4198394ac --- /dev/null +++ b/meta/recipes-devtools/clang/clang/0001-clang-Support-building-native-tools-when-cross-compi.patch | |||
@@ -0,0 +1,63 @@ | |||
1 | From 2ff1134d1d2b9f3c207e3ebd98de922f9ef6c15a Mon Sep 17 00:00:00 2001 | ||
2 | From: Ross Burton <ross.burton@arm.com> | ||
3 | Date: Wed, 24 Sep 2025 17:02:57 +0100 | ||
4 | Subject: [PATCH] [clang] Support building native tools when cross-compiling | ||
5 | standalone clang | ||
6 | |||
7 | When cross-compiling the LLVM project as a whole (from llvm/), if it | ||
8 | cannot find presupplied tools it will create a native build environment | ||
9 | to build the tools it needs. | ||
10 | |||
11 | However, when doing a standalone build of clang (that is, from clang/ | ||
12 | and linking against an existing libLLVM) this doesn't work. Instead | ||
13 | a _target_ binary is built which predictably then fails. | ||
14 | |||
15 | The conventional workaround for this is to build the native tools in a | ||
16 | separate native compile phase and pass the paths to the cross build, for | ||
17 | example see OpenEmbedded[1] or Nix[2]. But we can do better! | ||
18 | |||
19 | The first problem is that LLVM_USE_HOST_TOOLS is only set in the llvm/ | ||
20 | CMakeLists.txt, so setup_host_tool() will never consider building a | ||
21 | native binary. This can be solved by setting LLVM_USE_HOST_TOOLS based | ||
22 | on CMAKE_CROSSCOMPILING in clang/CMakeLists.txt in the standalone case. | ||
23 | |||
24 | Now setup_host_tool() will try to build a native tool, but it needs | ||
25 | build_native_tool() from CrossCompile.cmake, so that also needs to be | ||
26 | included. | ||
27 | |||
28 | Finally, the native binary then fails because there's no provider for | ||
29 | the dependency "CONFIGURE_Clang_NATIVE", so use llvm_create_cross_target | ||
30 | to create the native environment. | ||
31 | |||
32 | These few lines mirror what the lldb CMakeLists.txt does in the | ||
33 | standalone case, so there is prior art for this. | ||
34 | |||
35 | [1] https://git.openembedded.org/openembedded-core/tree/meta/recipes-devtools/clang/clang_git.bb?id=e18d697e92b55e57124e80234369d46575226386#n212 | ||
36 | [2] https://github.com/NixOS/nixpkgs/blob/3354d448f2a26117a74638957b0131ce3da9c8c4/pkgs/development/compilers/llvm/common/tblgen.nix#L54 | ||
37 | |||
38 | Upstream-Status: Submitted [https://github.com/llvm/llvm-project/pull/160605] | ||
39 | Signed-off-by: Ross Burton <ross.burton@arm.com> | ||
40 | --- | ||
41 | clang/CMakeLists.txt | 6 ++++++ | ||
42 | 1 file changed, 6 insertions(+) | ||
43 | |||
44 | diff --git a/clang/CMakeLists.txt b/clang/CMakeLists.txt | ||
45 | index 1bb73599970c..4eaa71289985 100644 | ||
46 | --- a/clang/CMakeLists.txt | ||
47 | +++ b/clang/CMakeLists.txt | ||
48 | @@ -80,6 +80,12 @@ if(CLANG_BUILT_STANDALONE) | ||
49 | include(GetErrcMessages) | ||
50 | include(LLVMDistributionSupport) | ||
51 | |||
52 | + if(CMAKE_CROSSCOMPILING) | ||
53 | + set(LLVM_USE_HOST_TOOLS ON) | ||
54 | + include(CrossCompile) | ||
55 | + llvm_create_cross_target(Clang NATIVE "" Release) | ||
56 | + endif() | ||
57 | + | ||
58 | set(PACKAGE_VERSION "${LLVM_PACKAGE_VERSION}") | ||
59 | set(BUG_REPORT_URL "${LLVM_PACKAGE_BUGREPORT}" CACHE STRING | ||
60 | "Default URL where bug reports are to be submitted.") | ||
61 | -- | ||
62 | 2.43.0 | ||
63 | |||
diff --git a/meta/recipes-devtools/clang/clang/clang-no-tblgen.patch b/meta/recipes-devtools/clang/clang/clang-no-tblgen.patch new file mode 100644 index 0000000000..e89cad8dc8 --- /dev/null +++ b/meta/recipes-devtools/clang/clang/clang-no-tblgen.patch | |||
@@ -0,0 +1,24 @@ | |||
1 | [clang] Only build clang-tblgen if it is actually needed | ||
2 | |||
3 | It's possible to build clang with an existing clang-tblgen (common when | ||
4 | cross-compiling, for instance) by setting CLANG_TABLEGEN_EXE. If this | ||
5 | is the case there's no need to build it, as it won't be used. | ||
6 | |||
7 | Upstream-Status: Submitted [https://github.com/llvm/llvm-project/pull/161952] | ||
8 | Signed-off-by: Ross Burton <ross.burton@arm.com> | ||
9 | |||
10 | diff --git a/clang/CMakeLists.txt b/clang/CMakeLists.txt | ||
11 | index e4cb1a359620..b650b3b986f4 100644 | ||
12 | --- a/clang/CMakeLists.txt | ||
13 | +++ b/clang/CMakeLists.txt | ||
14 | @@ -479,7 +479,9 @@ option(CLANG_ENABLE_HLSL "Include HLSL build products" Off) | ||
15 | # While HLSL support is experimental this should stay hidden. | ||
16 | mark_as_advanced(CLANG_ENABLE_HLSL) | ||
17 | |||
18 | -add_subdirectory(utils/TableGen) | ||
19 | +if (NOT DEFINED CLANG_TABLEGEN_EXE OR CLANG_INCLUDE_TESTS) | ||
20 | + add_subdirectory(utils/TableGen) | ||
21 | +endif() | ||
22 | |||
23 | # Export CLANG_TABLEGEN_EXE for use by flang docs. | ||
24 | set(CLANG_TABLEGEN_EXE "${CLANG_TABLEGEN_EXE}" CACHE INTERNAL "") | ||
diff --git a/meta/recipes-devtools/clang/clang_git.bb b/meta/recipes-devtools/clang/clang_git.bb index f25633a586..ca53963590 100644 --- a/meta/recipes-devtools/clang/clang_git.bb +++ b/meta/recipes-devtools/clang/clang_git.bb | |||
@@ -19,81 +19,37 @@ require common-source.inc | |||
19 | 19 | ||
20 | BPN = "clang" | 20 | BPN = "clang" |
21 | 21 | ||
22 | CVE_PRODUCT += "llvm:clang" | 22 | CVE_PRODUCT = "llvm:clang" |
23 | |||
24 | INHIBIT_DEFAULT_DEPS:class-native = "1" | ||
25 | 23 | ||
26 | LDFLAGS:append:class-target:riscv32 = " -Wl,--no-as-needed -latomic -Wl,--as-needed" | 24 | LDFLAGS:append:class-target:riscv32 = " -Wl,--no-as-needed -latomic -Wl,--as-needed" |
27 | LDFLAGS:append:class-target:mips = " -Wl,--no-as-needed -latomic -Wl,--as-needed" | 25 | LDFLAGS:append:class-target:mips = " -Wl,--no-as-needed -latomic -Wl,--as-needed" |
28 | 26 | ||
29 | inherit cmake pkgconfig multilib_header python3-dir | 27 | inherit cmake pkgconfig multilib_header python3-dir |
30 | 28 | ||
31 | PACKAGECONFIG_CLANG_COMMON = "build-id eh libedit rtti shared-libs libclang-python \ | 29 | PACKAGECONFIG ??= "build-id clangd libclang-python \ |
32 | ${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-lld', 'lld', '', d)} \ | ||
33 | ${@bb.utils.contains('TC_CXX_RUNTIME', 'llvm', 'compiler-rt libcplusplus libomp unwindlib', '', d)} \ | ||
34 | " | ||
35 | |||
36 | PACKAGECONFIG ??= "${PACKAGECONFIG_CLANG_COMMON} \ | ||
37 | ${@bb.utils.filter('DISTRO_FEATURES', 'lto thin-lto', d)} \ | 30 | ${@bb.utils.filter('DISTRO_FEATURES', 'lto thin-lto', d)} \ |
31 | ${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-lld', 'lld', '', d)} \ | ||
32 | ${@bb.utils.contains('TC_CXX_RUNTIME', 'llvm', 'compiler-rt libcplusplus libomp unwindlib', '', d)} \ | ||
38 | " | 33 | " |
39 | PACKAGECONFIG:class-native = "clangd \ | 34 | PACKAGECONFIG:remove:class-native = "lto thin-lto" |
40 | ${PACKAGECONFIG_CLANG_COMMON} \ | ||
41 | " | ||
42 | PACKAGECONFIG:class-nativesdk = "clangd \ | ||
43 | ${PACKAGECONFIG_CLANG_COMMON} \ | ||
44 | ${@bb.utils.filter('DISTRO_FEATURES', 'lto thin-lto', d)} \ | ||
45 | " | ||
46 | 35 | ||
47 | PACKAGECONFIG[build-id] = "-DENABLE_LINKER_BUILD_ID=ON,-DENABLE_LINKER_BUILD_ID=OFF,," | 36 | PACKAGECONFIG[build-id] = "-DENABLE_LINKER_BUILD_ID=ON,-DENABLE_LINKER_BUILD_ID=OFF,," |
48 | PACKAGECONFIG[clangd] = "-DCLANG_ENABLE_CLANGD=ON,-DCLANG_ENABLE_CLANGD=OFF,," | 37 | PACKAGECONFIG[clangd] = "-DCLANG_ENABLE_CLANGD=ON,-DCLANG_ENABLE_CLANGD=OFF,," |
49 | |||
50 | # Activate to build the dexp tool in clangd | 38 | # Activate to build the dexp tool in clangd |
51 | # Disabled by default for -native since it is known to trigger compiler failure on Debian 11 | 39 | # Disabled by default for -native since it is known to trigger compiler failure on Debian 11 |
52 | # See: https://bugzilla.yoctoproject.org/show_bug.cgi?id=15803 | 40 | # See: https://bugzilla.yoctoproject.org/show_bug.cgi?id=15803 |
53 | PACKAGECONFIG[clangd-dexp] = "-DCLANGD_BUILD_DEXP=ON,-DCLANGD_BUILD_DEXP=OFF,," | 41 | PACKAGECONFIG[clangd-dexp] = "-DCLANGD_BUILD_DEXP=ON,-DCLANGD_BUILD_DEXP=OFF,," |
54 | |||
55 | PACKAGECONFIG[compiler-rt] = "-DCLANG_DEFAULT_RTLIB=compiler-rt,," | 42 | PACKAGECONFIG[compiler-rt] = "-DCLANG_DEFAULT_RTLIB=compiler-rt,," |
56 | PACKAGECONFIG[eh] = "-DLLVM_ENABLE_EH=ON,-DLLVM_ENABLE_EH=OFF,," | ||
57 | PACKAGECONFIG[exegesis] = "-DLLVM_TOOL_LLVM_EXEGESIS_BUILD=ON,-DLLVM_TOOL_LLVM_EXEGESIS_BUILD=OFF" | ||
58 | PACKAGECONFIG[libcplusplus] = "-DCLANG_DEFAULT_CXX_STDLIB=libc++,," | 43 | PACKAGECONFIG[libcplusplus] = "-DCLANG_DEFAULT_CXX_STDLIB=libc++,," |
59 | PACKAGECONFIG[libedit] = "-DLLVM_ENABLE_LIBEDIT=ON,-DLLVM_ENABLE_LIBEDIT=OFF,libedit libedit-native" | ||
60 | PACKAGECONFIG[libomp] = "-DCLANG_DEFAULT_OPENMP_RUNTIME=libomp,," | 44 | PACKAGECONFIG[libomp] = "-DCLANG_DEFAULT_OPENMP_RUNTIME=libomp,," |
61 | PACKAGECONFIG[lld] = "-DCLANG_DEFAULT_LINKER=lld,,," | 45 | PACKAGECONFIG[lld] = "-DCLANG_DEFAULT_LINKER=lld,,," |
62 | PACKAGECONFIG[lto] = "-DLLVM_ENABLE_LTO=Full -DLLVM_BINUTILS_INCDIR=${STAGING_INCDIR},,binutils," | 46 | PACKAGECONFIG[lto] = "-DLLVM_ENABLE_LTO=Full -DLLVM_BINUTILS_INCDIR=${STAGING_INCDIR},,binutils," |
63 | PACKAGECONFIG[opt-viewer] = "-DLLVM_TOOL_OPT_VIEWER_BUILD=ON,-DLLVM_TOOL_OPT_VIEWER_BUILD=OFF, \ | ||
64 | python3-pyyaml-native python3-pygments-native python3-pyyaml python3-pygments, \ | ||
65 | python3-pyyaml python3-pygments," | ||
66 | PACKAGECONFIG[pfm] = "-DLLVM_ENABLE_LIBPFM=ON,-DLLVM_ENABLE_LIBPFM=OFF,libpfm," | ||
67 | PACKAGECONFIG[rtti] = "-DLLVM_ENABLE_RTTI=ON,-DLLVM_ENABLE_RTTI=OFF,," | ||
68 | PACKAGECONFIG[shared-libs] = "-DLLVM_BUILD_LLVM_DYLIB=ON -DLLVM_LINK_LLVM_DYLIB=ON,,," | ||
69 | PACKAGECONFIG[split-dwarf] = "-DLLVM_USE_SPLIT_DWARF=ON,-DLLVM_USE_SPLIT_DWARF=OFF,," | ||
70 | PACKAGECONFIG[thin-lto] = "-DLLVM_ENABLE_LTO=Thin -DLLVM_BINUTILS_INCDIR=${STAGING_INCDIR},,binutils," | 47 | PACKAGECONFIG[thin-lto] = "-DLLVM_ENABLE_LTO=Thin -DLLVM_BINUTILS_INCDIR=${STAGING_INCDIR},,binutils," |
71 | PACKAGECONFIG[unwindlib] = "-DCLANG_DEFAULT_UNWINDLIB=libunwind,-DCLANG_DEFAULT_UNWINDLIB=libgcc,," | 48 | PACKAGECONFIG[unwindlib] = "-DCLANG_DEFAULT_UNWINDLIB=libunwind,-DCLANG_DEFAULT_UNWINDLIB=libgcc,," |
72 | PACKAGECONFIG[libclang-python] = "-DCLANG_PYTHON_BINDINGS_VERSIONS=${PYTHON_BASEVERSION},," | 49 | PACKAGECONFIG[libclang-python] = "-DCLANG_PYTHON_BINDINGS_VERSIONS=${PYTHON_BASEVERSION},," |
73 | 50 | ||
74 | OECMAKE_SOURCEPATH = "${S}/llvm" | 51 | OECMAKE_SOURCEPATH = "${S}/clang" |
75 | |||
76 | # By default we build all the supported CPU architectures, and the GPU targets | ||
77 | # if the opencl, opengl or vulkan DISTRO_FEATURES are enabled. | ||
78 | # | ||
79 | # For target builds we default to building that specific architecture, BPF, and the GPU targets if required. | ||
80 | # | ||
81 | # The available target list can be seen in the source code | ||
82 | # in the LLVM_ALL_TARGETS assignment: | ||
83 | # https://github.com/llvm/llvm-project/blob/main/llvm/CMakeLists.txt | ||
84 | LLVM_TARGETS_GPU ?= "${@bb.utils.contains_any('DISTRO_FEATURES', 'opencl opengl vulkan', 'AMDGPU;NVPTX;SPIRV', '', d)}" | ||
85 | LLVM_TARGETS_TO_BUILD ?= "AArch64;ARM;BPF;Mips;PowerPC;RISCV;X86;LoongArch;${LLVM_TARGETS_GPU}" | ||
86 | LLVM_TARGETS_TO_BUILD:class-target ?= "${@get_clang_host_arch(bb, d)};BPF;${LLVM_TARGETS_GPU}" | ||
87 | 52 | ||
88 | LLVM_EXPERIMENTAL_TARGETS_TO_BUILD ?= "" | ||
89 | |||
90 | HF = "" | ||
91 | HF:class-target = "${@ bb.utils.contains('TUNE_CCARGS_MFLOAT', 'hard', 'hf', '', d)}" | ||
92 | HF[vardepvalue] = "${HF}" | ||
93 | |||
94 | # Ensure that LLVM_PROJECTS does not contain compiler runtime components e.g. libcxx etc | ||
95 | # they are enabled via LLVM_ENABLE_RUNTIMES | ||
96 | LLVM_PROJECTS ?= "clang;clang-tools-extra" | ||
97 | 53 | ||
98 | # linux hosts (.so) on Windows .pyd | 54 | # linux hosts (.so) on Windows .pyd |
99 | SOLIBSDEV:mingw32 = ".pyd" | 55 | SOLIBSDEV:mingw32 = ".pyd" |
@@ -102,89 +58,43 @@ SOLIBSDEV:mingw32 = ".pyd" | |||
102 | 58 | ||
103 | EXTRA_OECMAKE += "-DLLVM_ENABLE_ASSERTIONS=OFF \ | 59 | EXTRA_OECMAKE += "-DLLVM_ENABLE_ASSERTIONS=OFF \ |
104 | -DLLVM_APPEND_VC_REV=OFF \ | 60 | -DLLVM_APPEND_VC_REV=OFF \ |
105 | -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=OFF \ | ||
106 | -DLLVM_ENABLE_EXPENSIVE_CHECKS=OFF \ | ||
107 | -DLLVM_ENABLE_PIC=ON \ | 61 | -DLLVM_ENABLE_PIC=ON \ |
108 | -DCLANG_DEFAULT_PIE_ON_LINUX=ON \ | 62 | -DCLANG_DEFAULT_PIE_ON_LINUX=ON \ |
109 | -DLLVM_BINDINGS_LIST='' \ | ||
110 | -DLLVM_ENABLE_FFI=ON \ | ||
111 | -DLLVM_ENABLE_ZSTD=ON \ | ||
112 | -DFFI_INCLUDE_DIR=$(pkg-config --variable=includedir libffi) \ | 63 | -DFFI_INCLUDE_DIR=$(pkg-config --variable=includedir libffi) \ |
113 | -DLLVM_BUILD_EXTERNAL_COMPILER_RT=ON \ | 64 | -DLLVM_BUILD_EXTERNAL_COMPILER_RT=ON \ |
114 | -DCMAKE_SYSTEM_NAME=Linux \ | 65 | -DCMAKE_SYSTEM_NAME=Linux \ |
115 | -DCMAKE_BUILD_TYPE=MinSizeRel \ | 66 | -DCMAKE_BUILD_TYPE=MinSizeRel \ |
116 | -DLLVM_ENABLE_PROJECTS='${LLVM_PROJECTS}' \ | ||
117 | -DLLVM_BINUTILS_INCDIR=${STAGING_INCDIR} \ | ||
118 | -DLLVM_VERSION_SUFFIX='${VER_SUFFIX}' \ | 67 | -DLLVM_VERSION_SUFFIX='${VER_SUFFIX}' \ |
119 | -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON \ | 68 | -DLLVM_CMAKE_DIR=${STAGING_LIBDIR}/cmake/llvm \ |
120 | -DLLVM_TARGETS_TO_BUILD='${LLVM_TARGETS_TO_BUILD}' \ | ||
121 | -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD='${LLVM_EXPERIMENTAL_TARGETS_TO_BUILD}' \ | ||
122 | -DLLVM_NATIVE_TOOL_DIR=${STAGING_BINDIR_NATIVE} \ | 69 | -DLLVM_NATIVE_TOOL_DIR=${STAGING_BINDIR_NATIVE} \ |
123 | -DLLVM_TABLEGEN=${STAGING_BINDIR_NATIVE}/llvm-tblgen \ | ||
124 | -DLLVM_TABLEGEN_EXE=${STAGING_BINDIR_NATIVE}/llvm-tblgen \ | 70 | -DLLVM_TABLEGEN_EXE=${STAGING_BINDIR_NATIVE}/llvm-tblgen \ |
71 | -DCLANG_TABLEGEN_EXE=${STAGING_BINDIR_NATIVE}/clang-tblgen \ | ||
125 | -DLLVM_INCLUDE_TESTS=OFF \ | 72 | -DLLVM_INCLUDE_TESTS=OFF \ |
126 | -DCROSS_TOOLCHAIN_FLAGS_NATIVE='-DCMAKE_TOOLCHAIN_FILE=${WORKDIR}/toolchain-native.cmake' \ | 73 | -DCROSS_TOOLCHAIN_FLAGS_NATIVE='-DCMAKE_TOOLCHAIN_FILE=${WORKDIR}/toolchain-native.cmake' \ |
127 | " | ||
128 | |||
129 | EXTRA_OECMAKE:append:class-nativesdk = "\ | ||
130 | -DCMAKE_RANLIB=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-ranlib \ | ||
131 | -DCMAKE_AR=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-ar \ | ||
132 | -DCMAKE_NM=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-nm \ | ||
133 | -DCMAKE_STRIP=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-strip \ | ||
134 | " | ||
135 | EXTRA_OECMAKE:append:class-target = "\ | ||
136 | -DCMAKE_RANLIB=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-ranlib \ | ||
137 | -DCMAKE_AR=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-ar \ | ||
138 | -DCMAKE_NM=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-nm \ | ||
139 | -DCMAKE_STRIP=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-strip \ | ||
140 | -DLLVM_TARGET_ARCH=${HOST_ARCH} \ | ||
141 | -DLLVM_DEFAULT_TARGET_TRIPLE=${TARGET_SYS}${HF} \ | ||
142 | -DLLVM_HOST_TRIPLE=${TARGET_SYS}${HF} \ | ||
143 | -DLLVM_LIBDIR_SUFFIX=${LLVM_LIBDIR_SUFFIX} \ | 74 | -DLLVM_LIBDIR_SUFFIX=${LLVM_LIBDIR_SUFFIX} \ |
75 | -DCMAKE_AR=${STAGING_BINDIR_NATIVE}/llvm-ar \ | ||
76 | -DCMAKE_NM=${STAGING_BINDIR_NATIVE}/llvm-nm \ | ||
77 | -DCMAKE_RANLIB=${STAGING_BINDIR_NATIVE}/llvm-ranlib \ | ||
78 | -DCMAKE_STRIP=${STAGING_BINDIR_NATIVE}/llvm-strip \ | ||
144 | " | 79 | " |
145 | 80 | ||
146 | DEPENDS = "binutils zlib zstd libffi libxml2 libxml2-native llvm-tblgen-native" | 81 | DEPENDS = "llvm-tblgen-native llvm-native llvm binutils zlib zstd libffi libxml2 libxml2-native" |
147 | DEPENDS:append:class-nativesdk = " clang-crosssdk-${SDK_SYS} virtual/nativesdk-cross-binutils" | 82 | DEPENDS:append:class-target = " ${@bb.utils.contains('TC_CXX_RUNTIME', 'llvm', 'compiler-rt libcxx', '', d)}" |
148 | DEPENDS:append:class-target = " ${MLPREFIX}clang-cross-${TARGET_ARCH} ${@bb.utils.contains('TC_CXX_RUNTIME', 'llvm', 'compiler-rt libcxx', '', d)}" | ||
149 | 83 | ||
150 | RDEPENDS:${PN}:append:class-target = "${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-lld', ' lld', '', d)}" | 84 | RDEPENDS:${PN}:append:class-target = "${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-lld', ' lld', '', d)}" |
151 | RRECOMMENDS:${PN}:append:class-target = "binutils ${@bb.utils.contains('TC_CXX_RUNTIME', 'llvm', ' libcxx-dev', '', d)}" | 85 | RRECOMMENDS:${PN}:append:class-target = "binutils ${@bb.utils.contains('TC_CXX_RUNTIME', 'llvm', ' libcxx-dev', '', d)}" |
152 | 86 | ||
153 | # patch out build host paths for reproducibility | 87 | do_configure:prepend() { |
154 | reproducible_build_variables() { | 88 | # Link clang-tools-extra into the clang tree as clang will look for it here |
155 | sed -i -e "s,${DEBUG_PREFIX_MAP},,g" \ | 89 | # if it's doing a standalone build. |
156 | -e "s,--sysroot=${RECIPE_SYSROOT},,g" \ | 90 | ln -srf ${S}/clang-tools-extra ${S}/clang/tools/extra |
157 | -e "s,${STAGING_DIR_HOST},,g" \ | ||
158 | -e "s,${S}/llvm,,g" \ | ||
159 | -e "s,${B},,g" \ | ||
160 | ${B}/tools/llvm-config/BuildVariables.inc | ||
161 | } | ||
162 | |||
163 | do_configure:append:class-target() { | ||
164 | reproducible_build_variables | ||
165 | } | ||
166 | |||
167 | do_configure:append:class-nativesdk() { | ||
168 | reproducible_build_variables | ||
169 | } | 91 | } |
170 | 92 | ||
171 | do_install:append() { | 93 | do_install:append() { |
172 | oe_multilib_header llvm/Config/llvm-config.h | ||
173 | oe_multilib_header clang/Config/config.h | 94 | oe_multilib_header clang/Config/config.h |
174 | } | 95 | } |
175 | 96 | ||
176 | do_install:append:class-target () { | 97 | do_install:append:class-target () { |
177 | # Allow bin path to change based on YOCTO_ALTERNATE_EXE_PATH | ||
178 | sed -i 's;${_IMPORT_PREFIX}/bin;${_IMPORT_PREFIX_BIN};g' ${D}${libdir}/cmake/llvm/LLVMExports-*.cmake | ||
179 | |||
180 | # Insert function to populate Import Variables | ||
181 | sed -i "4i\ | ||
182 | if(DEFINED ENV{YOCTO_ALTERNATE_EXE_PATH})\n\ | ||
183 | execute_process(COMMAND \"llvm-config\" \"--bindir\" OUTPUT_VARIABLE _IMPORT_PREFIX_BIN OUTPUT_STRIP_TRAILING_WHITESPACE)\n\ | ||
184 | else()\n\ | ||
185 | set(_IMPORT_PREFIX_BIN \"\${_IMPORT_PREFIX}/bin\")\n\ | ||
186 | endif()\n" ${D}${libdir}/cmake/llvm/LLVMExports-*.cmake | ||
187 | |||
188 | if [ -n "${LLVM_LIBDIR_SUFFIX}" ]; then | 98 | if [ -n "${LLVM_LIBDIR_SUFFIX}" ]; then |
189 | mkdir -p ${D}${nonarch_libdir} | 99 | mkdir -p ${D}${nonarch_libdir} |
190 | mv ${D}${libdir}/clang ${D}${nonarch_libdir}/clang | 100 | mv ${D}${libdir}/clang ${D}${nonarch_libdir}/clang |
@@ -195,53 +105,16 @@ endif()\n" ${D}${libdir}/cmake/llvm/LLVMExports-*.cmake | |||
195 | llvm-addr2line llvm-dwp llvm-size llvm-strings llvm-cov; do | 105 | llvm-addr2line llvm-dwp llvm-size llvm-strings llvm-cov; do |
196 | ln -sf $t ${D}${bindir}/${TARGET_PREFIX}$t | 106 | ln -sf $t ${D}${bindir}/${TARGET_PREFIX}$t |
197 | done | 107 | done |
198 | |||
199 | # reproducibility | ||
200 | sed -i -e 's,${B},,g' ${D}${libdir}/cmake/llvm/LLVMConfig.cmake | ||
201 | } | ||
202 | |||
203 | do_install:append:class-native () { | ||
204 | if ${@bb.utils.contains('PACKAGECONFIG', 'clangd', 'true', 'false', d)}; then | ||
205 | install -Dm 0755 ${B}${BINPATHPREFIX}/bin/clangd-indexer ${D}${bindir}/clangd-indexer | ||
206 | fi | ||
207 | |||
208 | for f in `find ${D}${bindir} -executable -type f -not -type l`; do | ||
209 | test -n "`file -b $f|grep -i ELF`" && ${STRIP} $f | ||
210 | echo "stripped $f" | ||
211 | done | ||
212 | ln -sf llvm-config ${D}${bindir}/llvm-config${PV} | ||
213 | |||
214 | # These are provided by llvm-tblgen-native | ||
215 | rm ${D}${bindir}/*-tblgen | ||
216 | } | 108 | } |
217 | 109 | ||
218 | do_install:append:class-nativesdk () { | 110 | do_install:append:class-nativesdk () { |
219 | if [ -e ${D}${libdir}/cmake/llvm/LLVMConfig.cmake ] ; then | ||
220 | sed -i -e "s|${B}/./bin/||g" ${D}${libdir}/cmake/llvm/LLVMConfig.cmake | ||
221 | fi | ||
222 | if ${@bb.utils.contains('PACKAGECONFIG', 'clangd', 'true', 'false', d)}; then | ||
223 | install -Dm 0755 ${B}${BINPATHPREFIX}/bin/clangd-indexer ${D}${bindir}/clangd-indexer | ||
224 | fi | ||
225 | |||
226 | for f in `find ${D}${bindir} -executable -type f -not -type l`; do | ||
227 | test -n "`file -b $f|grep -i ELF`" && ${STRIP} $f | ||
228 | done | ||
229 | |||
230 | rm -rf ${D}${datadir}/llvm/cmake | ||
231 | rm -rf ${D}${datadir}/llvm | ||
232 | |||
233 | #reproducibility | 111 | #reproducibility |
234 | if [ -e ${D}${libdir}/cmake/llvm/LLVMConfig.cmake ] ; then | 112 | if [ -e ${D}${libdir}/cmake/llvm/LLVMConfig.cmake ] ; then |
235 | sed -i -e 's,${B},,g' ${D}${libdir}/cmake/llvm/LLVMConfig.cmake | 113 | sed -i -e 's,${B},,g' ${D}${libdir}/cmake/llvm/LLVMConfig.cmake |
236 | fi | 114 | fi |
237 | } | 115 | } |
238 | 116 | ||
239 | PROVIDES:append:class-native = " llvm-native" | 117 | PACKAGES =+ "${PN}-libclang-python ${PN}-libclang-cpp ${PN}-tidy ${PN}-format ${PN}-tools libclang" |
240 | PROVIDES:append:class-target = " llvm" | ||
241 | PROVIDES:append:class-nativesdk = " nativesdk-llvm" | ||
242 | |||
243 | PACKAGES =+ "${PN}-libllvm ${PN}-libclang-python ${PN}-libclang-cpp ${PN}-tidy ${PN}-format ${PN}-tools \ | ||
244 | libclang llvm-linker-tools" | ||
245 | 118 | ||
246 | BBCLASSEXTEND = "native nativesdk" | 119 | BBCLASSEXTEND = "native nativesdk" |
247 | 120 | ||
@@ -259,8 +132,6 @@ RDEPENDS:${PN}-tools += "\ | |||
259 | 132 | ||
260 | RRECOMMENDS:${PN}-tidy += "${PN}-tools" | 133 | RRECOMMENDS:${PN}-tidy += "${PN}-tools" |
261 | 134 | ||
262 | FILES:llvm-linker-tools = "${libdir}/LLVMgold* ${libdir}/libLTO.so.* ${libdir}/LLVMPolly*" | ||
263 | |||
264 | FILES:${PN}-libclang-cpp = "${libdir}/libclang-cpp.so.*" | 135 | FILES:${PN}-libclang-cpp = "${libdir}/libclang-cpp.so.*" |
265 | 136 | ||
266 | FILES:${PN}-libclang-python = "${PYTHON_SITEPACKAGES_DIR}/clang/*" | 137 | FILES:${PN}-libclang-python = "${PYTHON_SITEPACKAGES_DIR}/clang/*" |
@@ -323,12 +194,6 @@ FILES:${PN} += "\ | |||
323 | ${nonarch_libdir}/${BPN}/*/include/ \ | 194 | ${nonarch_libdir}/${BPN}/*/include/ \ |
324 | " | 195 | " |
325 | 196 | ||
326 | FILES:${PN}-libllvm =+ "\ | ||
327 | ${libdir}/libLLVM.so.${MAJOR_VER}.${MINOR_VER} \ | ||
328 | ${libdir}/libLLVM-${MAJOR_VER}.so \ | ||
329 | ${libdir}/libRemarks.so.* \ | ||
330 | " | ||
331 | |||
332 | FILES:libclang = "\ | 197 | FILES:libclang = "\ |
333 | ${libdir}/libclang.so.* \ | 198 | ${libdir}/libclang.so.* \ |
334 | " | 199 | " |
@@ -349,7 +214,6 @@ FILES:${PN}:remove = "${libdir}/${BPN}/*" | |||
349 | 214 | ||
350 | INSANE_SKIP:${PN} += "already-stripped" | 215 | INSANE_SKIP:${PN} += "already-stripped" |
351 | #INSANE_SKIP:${PN}-dev += "dev-elf" | 216 | #INSANE_SKIP:${PN}-dev += "dev-elf" |
352 | INSANE_SKIP:${PN}-libllvm = "dev-so" | ||
353 | 217 | ||
354 | #Avoid SSTATE_SCAN_COMMAND running sed over llvm-config. | 218 | #Avoid SSTATE_SCAN_COMMAND running sed over llvm-config. |
355 | SSTATE_SCAN_FILES:remove = "*-config" | 219 | SSTATE_SCAN_FILES:remove = "*-config" |
@@ -363,15 +227,17 @@ SYSROOT_PREPROCESS_FUNCS:append:class-target = " clang_sysroot_preprocess" | |||
363 | SYSROOT_PREPROCESS_FUNCS:append:class-nativesdk = " clang_sysroot_preprocess" | 227 | SYSROOT_PREPROCESS_FUNCS:append:class-nativesdk = " clang_sysroot_preprocess" |
364 | 228 | ||
365 | clang_sysroot_preprocess() { | 229 | clang_sysroot_preprocess() { |
366 | install -d ${SYSROOT_DESTDIR}${bindir_crossscripts}/ | 230 | install -d ${SYSROOT_DESTDIR}${bindir}/ |
367 | install -m 0755 ${S}/llvm/tools/llvm-config/llvm-config ${SYSROOT_DESTDIR}${bindir_crossscripts}/ | ||
368 | ln -sf llvm-config ${SYSROOT_DESTDIR}${bindir_crossscripts}/llvm-config${PV} | ||
369 | 231 | ||
232 | # clang and clang-tools | ||
370 | binaries="diagtool clang-${MAJOR_VER} clang-format clang-offload-packager | 233 | binaries="diagtool clang-${MAJOR_VER} clang-format clang-offload-packager |
371 | clang-offload-bundler clang-scan-deps clang-repl | 234 | clang-offload-bundler clang-scan-deps clang-repl |
372 | clang-refactor clang-check clang-extdef-mapping clang-apply-replacements | 235 | clang-refactor clang-check clang-extdef-mapping" |
373 | clang-reorder-fields clang-tidy clang-change-namespace clang-doc clang-include-fixer | 236 | |
374 | find-all-symbols clang-move clang-query pp-trace modularize" | 237 | # clang-extra-tools |
238 | binaries="${binaries} clang-apply-replacements clang-reorder-fields | ||
239 | clang-tidy clang-change-namespace clang-doc clang-include-fixer | ||
240 | find-all-symbols clang-move clang-query pp-trace modularize" | ||
375 | 241 | ||
376 | if ${@bb.utils.contains('PACKAGECONFIG', 'clangd', 'true', 'false', d)}; then | 242 | if ${@bb.utils.contains('PACKAGECONFIG', 'clangd', 'true', 'false', d)}; then |
377 | binaries="${binaries} clangd" | 243 | binaries="${binaries} clangd" |
diff --git a/meta/recipes-devtools/clang/common.inc b/meta/recipes-devtools/clang/common.inc index d7f069d253..a89831ce8f 100644 --- a/meta/recipes-devtools/clang/common.inc +++ b/meta/recipes-devtools/clang/common.inc | |||
@@ -62,6 +62,8 @@ SRC_URI = "\ | |||
62 | file://0039-Only-build-c-index-test-when-clang-tests-are-include.patch \ | 62 | file://0039-Only-build-c-index-test-when-clang-tests-are-include.patch \ |
63 | file://0001-Install-lldb-tblgen.patch \ | 63 | file://0001-Install-lldb-tblgen.patch \ |
64 | file://0001-dont-expose-LLVM_HAVE_OPT_VIEWER_MODULES.patch \ | 64 | file://0001-dont-expose-LLVM_HAVE_OPT_VIEWER_MODULES.patch \ |
65 | file://0001-clang-Support-building-native-tools-when-cross-compi.patch \ | ||
66 | file://clang-no-tblgen.patch \ | ||
65 | " | 67 | " |
66 | # Fallback to no-PIE if not set | 68 | # Fallback to no-PIE if not set |
67 | GCCPIE ??= "" | 69 | GCCPIE ??= "" |