diff options
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 ??= "" |
