summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--meta/recipes-devtools/clang/clang/0001-clang-Support-building-native-tools-when-cross-compi.patch63
-rw-r--r--meta/recipes-devtools/clang/clang/clang-no-tblgen.patch24
-rw-r--r--meta/recipes-devtools/clang/clang_git.bb190
-rw-r--r--meta/recipes-devtools/clang/common.inc2
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 @@
1From 2ff1134d1d2b9f3c207e3ebd98de922f9ef6c15a Mon Sep 17 00:00:00 2001
2From: Ross Burton <ross.burton@arm.com>
3Date: Wed, 24 Sep 2025 17:02:57 +0100
4Subject: [PATCH] [clang] Support building native tools when cross-compiling
5 standalone clang
6
7When cross-compiling the LLVM project as a whole (from llvm/), if it
8cannot find presupplied tools it will create a native build environment
9to build the tools it needs.
10
11However, when doing a standalone build of clang (that is, from clang/
12and linking against an existing libLLVM) this doesn't work. Instead
13a _target_ binary is built which predictably then fails.
14
15The conventional workaround for this is to build the native tools in a
16separate native compile phase and pass the paths to the cross build, for
17example see OpenEmbedded[1] or Nix[2]. But we can do better!
18
19The first problem is that LLVM_USE_HOST_TOOLS is only set in the llvm/
20CMakeLists.txt, so setup_host_tool() will never consider building a
21native binary. This can be solved by setting LLVM_USE_HOST_TOOLS based
22on CMAKE_CROSSCOMPILING in clang/CMakeLists.txt in the standalone case.
23
24Now setup_host_tool() will try to build a native tool, but it needs
25build_native_tool() from CrossCompile.cmake, so that also needs to be
26included.
27
28Finally, the native binary then fails because there's no provider for
29the dependency "CONFIGURE_Clang_NATIVE", so use llvm_create_cross_target
30to create the native environment.
31
32These few lines mirror what the lldb CMakeLists.txt does in the
33standalone 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
38Upstream-Status: Submitted [https://github.com/llvm/llvm-project/pull/160605]
39Signed-off-by: Ross Burton <ross.burton@arm.com>
40---
41 clang/CMakeLists.txt | 6 ++++++
42 1 file changed, 6 insertions(+)
43
44diff --git a/clang/CMakeLists.txt b/clang/CMakeLists.txt
45index 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--
622.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
3It's possible to build clang with an existing clang-tblgen (common when
4cross-compiling, for instance) by setting CLANG_TABLEGEN_EXE. If this
5is the case there's no need to build it, as it won't be used.
6
7Upstream-Status: Submitted [https://github.com/llvm/llvm-project/pull/161952]
8Signed-off-by: Ross Burton <ross.burton@arm.com>
9
10diff --git a/clang/CMakeLists.txt b/clang/CMakeLists.txt
11index 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
20BPN = "clang" 20BPN = "clang"
21 21
22CVE_PRODUCT += "llvm:clang" 22CVE_PRODUCT = "llvm:clang"
23
24INHIBIT_DEFAULT_DEPS:class-native = "1"
25 23
26LDFLAGS:append:class-target:riscv32 = " -Wl,--no-as-needed -latomic -Wl,--as-needed" 24LDFLAGS:append:class-target:riscv32 = " -Wl,--no-as-needed -latomic -Wl,--as-needed"
27LDFLAGS:append:class-target:mips = " -Wl,--no-as-needed -latomic -Wl,--as-needed" 25LDFLAGS:append:class-target:mips = " -Wl,--no-as-needed -latomic -Wl,--as-needed"
28 26
29inherit cmake pkgconfig multilib_header python3-dir 27inherit cmake pkgconfig multilib_header python3-dir
30 28
31PACKAGECONFIG_CLANG_COMMON = "build-id eh libedit rtti shared-libs libclang-python \ 29PACKAGECONFIG ??= "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
36PACKAGECONFIG ??= "${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 "
39PACKAGECONFIG:class-native = "clangd \ 34PACKAGECONFIG:remove:class-native = "lto thin-lto"
40 ${PACKAGECONFIG_CLANG_COMMON} \
41 "
42PACKAGECONFIG:class-nativesdk = "clangd \
43 ${PACKAGECONFIG_CLANG_COMMON} \
44 ${@bb.utils.filter('DISTRO_FEATURES', 'lto thin-lto', d)} \
45 "
46 35
47PACKAGECONFIG[build-id] = "-DENABLE_LINKER_BUILD_ID=ON,-DENABLE_LINKER_BUILD_ID=OFF,," 36PACKAGECONFIG[build-id] = "-DENABLE_LINKER_BUILD_ID=ON,-DENABLE_LINKER_BUILD_ID=OFF,,"
48PACKAGECONFIG[clangd] = "-DCLANG_ENABLE_CLANGD=ON,-DCLANG_ENABLE_CLANGD=OFF,," 37PACKAGECONFIG[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
53PACKAGECONFIG[clangd-dexp] = "-DCLANGD_BUILD_DEXP=ON,-DCLANGD_BUILD_DEXP=OFF,," 41PACKAGECONFIG[clangd-dexp] = "-DCLANGD_BUILD_DEXP=ON,-DCLANGD_BUILD_DEXP=OFF,,"
54
55PACKAGECONFIG[compiler-rt] = "-DCLANG_DEFAULT_RTLIB=compiler-rt,," 42PACKAGECONFIG[compiler-rt] = "-DCLANG_DEFAULT_RTLIB=compiler-rt,,"
56PACKAGECONFIG[eh] = "-DLLVM_ENABLE_EH=ON,-DLLVM_ENABLE_EH=OFF,,"
57PACKAGECONFIG[exegesis] = "-DLLVM_TOOL_LLVM_EXEGESIS_BUILD=ON,-DLLVM_TOOL_LLVM_EXEGESIS_BUILD=OFF"
58PACKAGECONFIG[libcplusplus] = "-DCLANG_DEFAULT_CXX_STDLIB=libc++,," 43PACKAGECONFIG[libcplusplus] = "-DCLANG_DEFAULT_CXX_STDLIB=libc++,,"
59PACKAGECONFIG[libedit] = "-DLLVM_ENABLE_LIBEDIT=ON,-DLLVM_ENABLE_LIBEDIT=OFF,libedit libedit-native"
60PACKAGECONFIG[libomp] = "-DCLANG_DEFAULT_OPENMP_RUNTIME=libomp,," 44PACKAGECONFIG[libomp] = "-DCLANG_DEFAULT_OPENMP_RUNTIME=libomp,,"
61PACKAGECONFIG[lld] = "-DCLANG_DEFAULT_LINKER=lld,,," 45PACKAGECONFIG[lld] = "-DCLANG_DEFAULT_LINKER=lld,,,"
62PACKAGECONFIG[lto] = "-DLLVM_ENABLE_LTO=Full -DLLVM_BINUTILS_INCDIR=${STAGING_INCDIR},,binutils," 46PACKAGECONFIG[lto] = "-DLLVM_ENABLE_LTO=Full -DLLVM_BINUTILS_INCDIR=${STAGING_INCDIR},,binutils,"
63PACKAGECONFIG[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,"
66PACKAGECONFIG[pfm] = "-DLLVM_ENABLE_LIBPFM=ON,-DLLVM_ENABLE_LIBPFM=OFF,libpfm,"
67PACKAGECONFIG[rtti] = "-DLLVM_ENABLE_RTTI=ON,-DLLVM_ENABLE_RTTI=OFF,,"
68PACKAGECONFIG[shared-libs] = "-DLLVM_BUILD_LLVM_DYLIB=ON -DLLVM_LINK_LLVM_DYLIB=ON,,,"
69PACKAGECONFIG[split-dwarf] = "-DLLVM_USE_SPLIT_DWARF=ON,-DLLVM_USE_SPLIT_DWARF=OFF,,"
70PACKAGECONFIG[thin-lto] = "-DLLVM_ENABLE_LTO=Thin -DLLVM_BINUTILS_INCDIR=${STAGING_INCDIR},,binutils," 47PACKAGECONFIG[thin-lto] = "-DLLVM_ENABLE_LTO=Thin -DLLVM_BINUTILS_INCDIR=${STAGING_INCDIR},,binutils,"
71PACKAGECONFIG[unwindlib] = "-DCLANG_DEFAULT_UNWINDLIB=libunwind,-DCLANG_DEFAULT_UNWINDLIB=libgcc,," 48PACKAGECONFIG[unwindlib] = "-DCLANG_DEFAULT_UNWINDLIB=libunwind,-DCLANG_DEFAULT_UNWINDLIB=libgcc,,"
72PACKAGECONFIG[libclang-python] = "-DCLANG_PYTHON_BINDINGS_VERSIONS=${PYTHON_BASEVERSION},," 49PACKAGECONFIG[libclang-python] = "-DCLANG_PYTHON_BINDINGS_VERSIONS=${PYTHON_BASEVERSION},,"
73 50
74OECMAKE_SOURCEPATH = "${S}/llvm" 51OECMAKE_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
84LLVM_TARGETS_GPU ?= "${@bb.utils.contains_any('DISTRO_FEATURES', 'opencl opengl vulkan', 'AMDGPU;NVPTX;SPIRV', '', d)}"
85LLVM_TARGETS_TO_BUILD ?= "AArch64;ARM;BPF;Mips;PowerPC;RISCV;X86;LoongArch;${LLVM_TARGETS_GPU}"
86LLVM_TARGETS_TO_BUILD:class-target ?= "${@get_clang_host_arch(bb, d)};BPF;${LLVM_TARGETS_GPU}"
87 52
88LLVM_EXPERIMENTAL_TARGETS_TO_BUILD ?= ""
89
90HF = ""
91HF:class-target = "${@ bb.utils.contains('TUNE_CCARGS_MFLOAT', 'hard', 'hf', '', d)}"
92HF[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
96LLVM_PROJECTS ?= "clang;clang-tools-extra"
97 53
98# linux hosts (.so) on Windows .pyd 54# linux hosts (.so) on Windows .pyd
99SOLIBSDEV:mingw32 = ".pyd" 55SOLIBSDEV:mingw32 = ".pyd"
@@ -102,89 +58,43 @@ SOLIBSDEV:mingw32 = ".pyd"
102 58
103EXTRA_OECMAKE += "-DLLVM_ENABLE_ASSERTIONS=OFF \ 59EXTRA_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
129EXTRA_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"
135EXTRA_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
146DEPENDS = "binutils zlib zstd libffi libxml2 libxml2-native llvm-tblgen-native" 81DEPENDS = "llvm-tblgen-native llvm-native llvm binutils zlib zstd libffi libxml2 libxml2-native"
147DEPENDS:append:class-nativesdk = " clang-crosssdk-${SDK_SYS} virtual/nativesdk-cross-binutils" 82DEPENDS:append:class-target = " ${@bb.utils.contains('TC_CXX_RUNTIME', 'llvm', 'compiler-rt libcxx', '', d)}"
148DEPENDS:append:class-target = " ${MLPREFIX}clang-cross-${TARGET_ARCH} ${@bb.utils.contains('TC_CXX_RUNTIME', 'llvm', 'compiler-rt libcxx', '', d)}"
149 83
150RDEPENDS:${PN}:append:class-target = "${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-lld', ' lld', '', d)}" 84RDEPENDS:${PN}:append:class-target = "${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-lld', ' lld', '', d)}"
151RRECOMMENDS:${PN}:append:class-target = "binutils ${@bb.utils.contains('TC_CXX_RUNTIME', 'llvm', ' libcxx-dev', '', d)}" 85RRECOMMENDS:${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 87do_configure:prepend() {
154reproducible_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
163do_configure:append:class-target() {
164 reproducible_build_variables
165}
166
167do_configure:append:class-nativesdk() {
168 reproducible_build_variables
169} 91}
170 92
171do_install:append() { 93do_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
176do_install:append:class-target () { 97do_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\
182if(DEFINED ENV{YOCTO_ALTERNATE_EXE_PATH})\n\
183 execute_process(COMMAND \"llvm-config\" \"--bindir\" OUTPUT_VARIABLE _IMPORT_PREFIX_BIN OUTPUT_STRIP_TRAILING_WHITESPACE)\n\
184else()\n\
185 set(_IMPORT_PREFIX_BIN \"\${_IMPORT_PREFIX}/bin\")\n\
186endif()\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
203do_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
218do_install:append:class-nativesdk () { 110do_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
239PROVIDES:append:class-native = " llvm-native" 117PACKAGES =+ "${PN}-libclang-python ${PN}-libclang-cpp ${PN}-tidy ${PN}-format ${PN}-tools libclang"
240PROVIDES:append:class-target = " llvm"
241PROVIDES:append:class-nativesdk = " nativesdk-llvm"
242
243PACKAGES =+ "${PN}-libllvm ${PN}-libclang-python ${PN}-libclang-cpp ${PN}-tidy ${PN}-format ${PN}-tools \
244 libclang llvm-linker-tools"
245 118
246BBCLASSEXTEND = "native nativesdk" 119BBCLASSEXTEND = "native nativesdk"
247 120
@@ -259,8 +132,6 @@ RDEPENDS:${PN}-tools += "\
259 132
260RRECOMMENDS:${PN}-tidy += "${PN}-tools" 133RRECOMMENDS:${PN}-tidy += "${PN}-tools"
261 134
262FILES:llvm-linker-tools = "${libdir}/LLVMgold* ${libdir}/libLTO.so.* ${libdir}/LLVMPolly*"
263
264FILES:${PN}-libclang-cpp = "${libdir}/libclang-cpp.so.*" 135FILES:${PN}-libclang-cpp = "${libdir}/libclang-cpp.so.*"
265 136
266FILES:${PN}-libclang-python = "${PYTHON_SITEPACKAGES_DIR}/clang/*" 137FILES:${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
326FILES:${PN}-libllvm =+ "\
327 ${libdir}/libLLVM.so.${MAJOR_VER}.${MINOR_VER} \
328 ${libdir}/libLLVM-${MAJOR_VER}.so \
329 ${libdir}/libRemarks.so.* \
330"
331
332FILES:libclang = "\ 197FILES:libclang = "\
333 ${libdir}/libclang.so.* \ 198 ${libdir}/libclang.so.* \
334" 199"
@@ -349,7 +214,6 @@ FILES:${PN}:remove = "${libdir}/${BPN}/*"
349 214
350INSANE_SKIP:${PN} += "already-stripped" 215INSANE_SKIP:${PN} += "already-stripped"
351#INSANE_SKIP:${PN}-dev += "dev-elf" 216#INSANE_SKIP:${PN}-dev += "dev-elf"
352INSANE_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.
355SSTATE_SCAN_FILES:remove = "*-config" 219SSTATE_SCAN_FILES:remove = "*-config"
@@ -363,15 +227,17 @@ SYSROOT_PREPROCESS_FUNCS:append:class-target = " clang_sysroot_preprocess"
363SYSROOT_PREPROCESS_FUNCS:append:class-nativesdk = " clang_sysroot_preprocess" 227SYSROOT_PREPROCESS_FUNCS:append:class-nativesdk = " clang_sysroot_preprocess"
364 228
365clang_sysroot_preprocess() { 229clang_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
67GCCPIE ??= "" 69GCCPIE ??= ""