Add a llvm_chost_setup function that handles CHOST-specific setup.
Initially, this means setting CMake variables that control
`find_package()` lookups.

Signed-off-by: Michał Górny <mgo...@gentoo.org>
---
 eclass/llvm-r2.eclass | 37 ++++++++++++++++++++++++++++++-------
 1 file changed, 30 insertions(+), 7 deletions(-)

diff --git a/eclass/llvm-r2.eclass b/eclass/llvm-r2.eclass
index 93c16e75be83..91e841821331 100644
--- a/eclass/llvm-r2.eclass
+++ b/eclass/llvm-r2.eclass
@@ -248,16 +248,35 @@ llvm_cbuild_setup() {
        llvm_prepend_path -b "${LLVM_SLOT}"
 }
 
-# @FUNCTION: llvm-r2_pkg_setup
+# @FUNCTION: llvm_chost_setup
 # @DESCRIPTION:
-# Prepend the appropriate executable directory for the selected LLVM
-# slot to PATH.
+# Set the environment for finding selected LLVM slot installed
+# for CHOST.
 #
-# The PATH manipulation is only done for source builds. The function
-# is a no-op when installing a binary package.
+# This function is meant to be used when the package in question uses
+# LLVM compiles against and links to LLVM.  It is called automatically
+# by llvm-r2_pkg_setup if LLVM is found installed in ESYSROOT.
+llvm_chost_setup() {
+       debug-print-function ${FUNCNAME} "$@"
+
+       local esysroot_prefix=$(get_llvm_prefix -d)
+       einfo "Using ${esysroot_prefix} for CHOST LLVM ${LLVM_SLOT}"
+       [[ -d ${esysroot_prefix} ]] ||
+               die "LLVM ${LLVM_SLOT} not found installed in ESYSROOT 
(expected: ${esysroot_prefix})"
+
+       # satisfies find_package() in CMake
+       export LLVM_ROOT="${esysroot_prefix}"
+       export Clang_ROOT="${esysroot_prefix}"
+       export LLD_ROOT="${esysroot_prefix}"
+}
+
+# @FUNCTION: llvm-r2_pkg_setup
+# @DESCRIPTION:
+# Handle all supported setup actions automatically.  If LLVM is found
+# installed for CBUILD, call llvm_cbuild_setup.  If it is found
+# installed for CHOST, call llvm_chost_setup.
 #
-# If any other behavior is desired, the contents of the function
-# should be inlined into the ebuild and modified as necessary.
+# This function is a no-op when installing a binary package.
 #
 # Note that this function is not exported if LLVM_OPTIONAL is set.
 # In that case, it needs to be called manually.
@@ -270,6 +289,10 @@ llvm-r2_pkg_setup() {
                if [[ -d $(get_llvm_prefix -b)/bin ]]; then
                        llvm_cbuild_setup
                fi
+
+               if [[ -d $(get_llvm_prefix -d) ]]; then
+                       llvm_chost_setup
+               fi
        fi
 }
 
-- 
2.47.1


Reply via email to