summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--meta/conf/distro/include/maintainers.inc1
-rw-r--r--meta/recipes-devtools/clang/llvm_git.bb129
2 files changed, 130 insertions, 0 deletions
diff --git a/meta/conf/distro/include/maintainers.inc b/meta/conf/distro/include/maintainers.inc
index 0e5150895f..d2c613b8e9 100644
--- a/meta/conf/distro/include/maintainers.inc
+++ b/meta/conf/distro/include/maintainers.inc
@@ -483,6 +483,7 @@ RECIPE_MAINTAINER:pn-lld = "Khem Raj <raj.khem@gmail.com>"
483RECIPE_MAINTAINER:pn-lldb = "Khem Raj <raj.khem@gmail.com>" 483RECIPE_MAINTAINER:pn-lldb = "Khem Raj <raj.khem@gmail.com>"
484RECIPE_MAINTAINER:pn-llvm-project-source-21.1.2 = "Khem Raj <raj.khem@gmail.com>" 484RECIPE_MAINTAINER:pn-llvm-project-source-21.1.2 = "Khem Raj <raj.khem@gmail.com>"
485RECIPE_MAINTAINER:pn-llvm-tblgen-native = "Khem Raj <raj.khem@gmail.com>" 485RECIPE_MAINTAINER:pn-llvm-tblgen-native = "Khem Raj <raj.khem@gmail.com>"
486RECIPE_MAINTAINER:pn-llvm = "Khem Raj <raj.khem@gmail.com>"
486RECIPE_MAINTAINER:pn-logrotate = "Yi Zhao <yi.zhao@windriver.com>" 487RECIPE_MAINTAINER:pn-logrotate = "Yi Zhao <yi.zhao@windriver.com>"
487RECIPE_MAINTAINER:pn-log4cplus = "Unassigned <unassigned@yoctoproject.org>" 488RECIPE_MAINTAINER:pn-log4cplus = "Unassigned <unassigned@yoctoproject.org>"
488RECIPE_MAINTAINER:pn-lrzsz = "Unassigned <unassigned@yoctoproject.org>" 489RECIPE_MAINTAINER:pn-lrzsz = "Unassigned <unassigned@yoctoproject.org>"
diff --git a/meta/recipes-devtools/clang/llvm_git.bb b/meta/recipes-devtools/clang/llvm_git.bb
new file mode 100644
index 0000000000..d2b060ff88
--- /dev/null
+++ b/meta/recipes-devtools/clang/llvm_git.bb
@@ -0,0 +1,129 @@
1# Copyright (C) 2017 Khem Raj <raj.khem@gmail.com>
2# Released under the MIT license (see COPYING.MIT for the terms)
3
4SUMMARY = "The LLVM Compiler Infrastructure"
5HOMEPAGE = "http://llvm.org"
6LICENSE = "Apache-2.0-with-LLVM-exception"
7SECTION = "devel"
8
9require common-clang.inc
10require common-source.inc
11
12LIC_FILES_CHKSUM = "file://LICENSE.TXT;md5=8a15a0759ef07f2682d2ba4b893c9afe"
13
14DEPENDS = "llvm-tblgen-native libffi libxml2 zlib zstd"
15
16inherit cmake pkgconfig lib_package
17
18OECMAKE_SOURCEPATH = "${S}/llvm"
19
20# By default we build all the supported CPU architectures, and the GPU targets
21# if the opencl, opengl or vulkan DISTRO_FEATURES are enabled.
22#
23# For target builds we default to building that specific architecture, BPF, and the GPU targets if required.
24#
25# The available target list can be seen in the source code
26# in the LLVM_ALL_TARGETS assignment:
27# https://github.com/llvm/llvm-project/blob/main/llvm/CMakeLists.txt
28LLVM_TARGETS_GPU ?= "${@bb.utils.contains_any('DISTRO_FEATURES', 'opencl opengl vulkan', 'AMDGPU;NVPTX;SPIRV', '', d)}"
29LLVM_TARGETS_TO_BUILD ?= "AArch64;ARM;BPF;Mips;PowerPC;RISCV;X86;LoongArch;${LLVM_TARGETS_GPU}"
30LLVM_TARGETS_TO_BUILD:class-target ?= "${@get_clang_host_arch(bb, d)};BPF;${LLVM_TARGETS_GPU}"
31
32LLVM_EXPERIMENTAL_TARGETS_TO_BUILD ?= ""
33
34HF = ""
35HF:class-target = "${@ bb.utils.contains('TUNE_CCARGS_MFLOAT', 'hard', 'hf', '', d)}"
36HF[vardepvalue] = "${HF}"
37
38EXTRA_OECMAKE += "-DCMAKE_BUILD_TYPE=MinSizeRel \
39 -DLLVM_ENABLE_BINDINGS=OFF \
40 -DLLVM_ENABLE_FFI=ON \
41 -DLLVM_ENABLE_RTTI=ON \
42 -DLLVM_TARGETS_TO_BUILD='${LLVM_TARGETS_TO_BUILD}' \
43 -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD='${LLVM_EXPERIMENTAL_TARGETS_TO_BUILD}' \
44 -DLLVM_LIBDIR_SUFFIX=${LLVM_LIBDIR_SUFFIX} \
45 -DLLVM_VERSION_SUFFIX='${VER_SUFFIX}' \
46 -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON \
47 -DLLVM_INCLUDE_TESTS=OFF \
48 -DLLVM_INCLUDE_EXAMPLES=OFF \
49 -DLLVM_TOOL_OBJ2YAML_BUILD=OFF \
50 -DLLVM_TOOL_YAML2OBJ_BUILD=OFF \
51 -DLLVM_NATIVE_TOOL_DIR=${STAGING_BINDIR_NATIVE} \
52 -DLLVM_TABLEGEN=${STAGING_BINDIR_NATIVE}/llvm-tblgen \
53 -DCROSS_TOOLCHAIN_FLAGS_NATIVE='-DCMAKE_TOOLCHAIN_FILE=${WORKDIR}/toolchain-native.cmake' \
54 "
55
56EXTRA_OECMAKE:append:class-target = "\
57 -DLLVM_DEFAULT_TARGET_TRIPLE=${TARGET_SYS}${HF} \
58 -DLLVM_TARGET_ARCH=${HOST_ARCH} \
59 -DLLVM_HOST_TRIPLE=${TARGET_SYS}${HF} \
60 -DLLVM_CONFIG_PATH=${STAGING_BINDIR_NATIVE}/llvm-config \
61 "
62
63EXTRA_OECMAKE:append:class-nativesdk = "\
64 -DLLVM_HOST_TRIPLE=${SDK_SYS} \
65 -DLLVM_CONFIG_PATH=${STAGING_BINDIR_NATIVE}/llvm-config \
66 "
67
68PACKAGECONFIG ??= "eh rtti shared-libs ${@bb.utils.filter('DISTRO_FEATURES', 'lto thin-lto', d)}"
69PACKAGECONFIG:remove:class-native = "lto thin-lto"
70
71PACKAGECONFIG[eh] = "-DLLVM_ENABLE_EH=ON,-DLLVM_ENABLE_EH=OFF"
72PACKAGECONFIG[exegesis] = "-DLLVM_TOOL_LLVM_EXEGESIS_BUILD=ON,-DLLVM_TOOL_LLVM_EXEGESIS_BUILD=OFF"
73PACKAGECONFIG[libedit] = "-DLLVM_ENABLE_LIBEDIT=ON,-DLLVM_ENABLE_LIBEDIT=OFF,libedit"
74PACKAGECONFIG[rtti] = "-DLLVM_ENABLE_RTTI=ON,-DLLVM_ENABLE_RTTI=OFF"
75PACKAGECONFIG[shared-libs] = "-DLLVM_BUILD_LLVM_DYLIB=ON -DLLVM_LINK_LLVM_DYLIB=ON,-DLLVM_BUILD_LLVM_DYLIB=OFF -DLLVM_LINK_LLVM_DYLIB=OFF"
76PACKAGECONFIG[split-dwarf] = "-DLLVM_USE_SPLIT_DWARF=ON,-DLLVM_USE_SPLIT_DWARF=OFF"
77PACKAGECONFIG[opt-viewer] = "-DLLVM_TOOL_OPT_VIEWER_BUILD=ON,-DLLVM_TOOL_OPT_VIEWER_BUILD=OFF, \
78 python3-pyyaml-native python3-pygments-native python3-pyyaml python3-pygments, \
79 python3-pyyaml python3-pygments,"
80PACKAGECONFIG[lto] = "-DLLVM_ENABLE_LTO=Full -DLLVM_BINUTILS_INCDIR=${STAGING_INCDIR},,binutils,"
81PACKAGECONFIG[thin-lto] = "-DLLVM_ENABLE_LTO=Thin -DLLVM_BINUTILS_INCDIR=${STAGING_INCDIR},,binutils,"
82
83# LLVM debug symbols are very large (several gigabytes), reduce the debug level
84# so they're just hundreds of megabytes.
85DEBUG_LEVELFLAG = "-g1"
86
87reproducible_build_variables() {
88 sed -i -e "s,${DEBUG_PREFIX_MAP},,g" \
89 -e "s,--sysroot=${RECIPE_SYSROOT},,g" \
90 -e "s,${STAGING_DIR_HOST},,g" \
91 -e "s,${S}/llvm,,g" \
92 -e "s,${B},,g" \
93 ${B}/tools/llvm-config/BuildVariables.inc
94}
95
96do_configure:append:class-target() {
97 reproducible_build_variables
98}
99do_configure:append:class-nativesdk() {
100 reproducible_build_variables
101}
102
103do_install:append() {
104 # llvm hardcodes lib as install path, this corrects it to actual libdir.
105 # https://github.com/llvm/llvm-project/issues/152193
106 if [ -d ${D}/${prefix}/lib -a ! -d ${D}/${libdir} ]; then
107 mv ${D}/${prefix}/lib ${D}/${libdir}
108 fi
109
110 # Reproducibility fixes
111 sed -i -e 's,${WORKDIR},,g' ${D}/${libdir}/cmake/llvm/LLVMConfig.cmake
112}
113
114do_install:append:class-native() {
115 # These are provided by llvm-tblgen-native
116 rm ${D}${bindir}/*-tblgen
117}
118
119SYSROOT_PREPROCESS_FUNCS:append:class-target = " llvm_sysroot_preprocess"
120SYSROOT_PREPROCESS_FUNCS:append:class-nativesdk = " llvm_sysroot_preprocess"
121
122llvm_sysroot_preprocess() {
123 install -d ${SYSROOT_DESTDIR}${bindir_crossscripts}/
124 install -m 0755 ${S}/llvm/tools/llvm-config/llvm-config ${SYSROOT_DESTDIR}${bindir_crossscripts}/
125}
126
127FILES:${PN}-dev += "${libdir}/llvm-config"
128
129BBCLASSEXTEND = "native nativesdk"