# 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 ?= ""
EXTRA_OECMAKE += "-DCMAKE_BUILD_TYPE=MinSizeRel \
-DLLVM_ENABLE_BINDINGS=OFF \
+ -DLLVM_INSTALL_UTILS=ON \
-DLLVM_ENABLE_FFI=ON \
-DLLVM_ENABLE_RTTI=ON \
-DLLVM_TARGETS_TO_BUILD='${LLVM_TARGETS_TO_BUILD}' \
inherit rust
inherit cargo_common
-DEPENDS += "rust-llvm"
+DEPENDS += "llvm"
# native rust uses cargo/rustc from binary snapshots to bootstrap
# but everything else should use our native builds
DEPENDS:append:class-target = " cargo-native rust-native"
export FORCE_CRATE_HASH = "${BB_TASKHASH}"
-RUST_ALTERNATE_EXE_PATH ?= "${STAGING_LIBDIR}/llvm-rust/bin/llvm-config"
-RUST_ALTERNATE_EXE_PATH_NATIVE = "${STAGING_LIBDIR_NATIVE}/llvm-rust/bin/llvm-config"
+RUST_ALTERNATE_EXE_PATH ?= "${STAGING_BINDIR}/llvm-config"
+RUST_ALTERNATE_EXE_PATH_NATIVE = "${STAGING_BINDIR_NATIVE}/llvm-config"
# We don't want to use bitbakes vendoring because the rust sources do their
# own vendoring.
bb.build.exec_func("setup_cargo_environment", d)
}
+# llvm-config expects static libraries to be in the 'lib' directory rather than 'lib64' when
+# multilibs enabled. Since we are copying the natively built llvm-config into the target sysroot
+# and executing it there, it will default to searching in 'lib', as it is unaware of the 'lib64'
+# directory. To ensure llvm-config can locate the necessary libraries, create a symlink from 'lib'
+do_compile:append:class-target() {
+ # Ensure llvm-config can find static libraries in multilib setup
+ lib64_dir="${STAGING_DIR_TARGET}/usr/lib64"
+ lib_dir="${STAGING_DIR_TARGET}/usr/lib"
+
+ if [ -d "$lib64_dir" ]; then
+ # If lib does not exist, symlink it to lib64
+ if [ ! -e "$lib_dir" ]; then
+ ln -s lib64 "$lib_dir"
+ fi
+
+ # Only do per-file symlinking if lib is a real directory (not symlink)
+ if [ -d "$lib_dir" ] && [ ! -L "$lib_dir" ]; then
+ for lib64_file in "${lib64_dir}"/libLLVM*.a; do
+ if [ -e "$lib64_file" ]; then
+ lib_name=$(basename "${lib64_file}")
+ target_link="${lib_dir}/${lib_name}"
+
+ if [ ! -e "${target_link}" ]; then
+ ln -s "../lib64/${lib_name}" "${target_link}"
+ fi
+ fi
+ done
+ fi
+ fi
+}
+
rust_runx () {
echo "COMPILE ${PN}" "$@"
unset CXXFLAGS
unset CPPFLAGS
- export RUSTFLAGS="${RUST_DEBUG_REMAP}"
+ export RUSTFLAGS="${RUST_DEBUG_REMAP} -Clink-arg=-lz -Clink-arg=-lzstd"
# Copy the natively built llvm-config into the target so we can run it. Horrible,
# but works!