[PATCH] D115513: [CMake][Z3] Add customized Z3 install path to RPATH

Ella Ma via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Dec 10 05:39:02 PST 2021


OikawaKirie created this revision.
OikawaKirie added reviewers: ddcc, delcypher, hubert.reinterpretcast, JDevlieghere, phosek.
OikawaKirie added a project: LLVM.
Herald added subscribers: mikhail.ramalho, mgorny.
OikawaKirie requested review of this revision.
Herald added a subscriber: llvm-commits.

When using a customized Z3 installation via variable `LLVM_Z3_INSTALL_DIR`, the desired Z3 installation may not be used if the system has another installation. And if there is not a system-wide one, the compilation will stop when using `llvm-tblgen`, as the `libz3.so` cannot be found by the executable.

This patch tries to fix this problem by adding the customized Z3 install path to RPATH. And it will not be added if the system-wide installed version is used (variable `LLVM_Z3_INSTALL_DIR` is not set during cmake).


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D115513

Files:
  llvm/cmake/modules/AddLLVM.cmake
  llvm/cmake/modules/FindZ3.cmake


Index: llvm/cmake/modules/FindZ3.cmake
===================================================================
--- llvm/cmake/modules/FindZ3.cmake
+++ llvm/cmake/modules/FindZ3.cmake
@@ -60,6 +60,9 @@
   PATH_SUFFIXES lib bin
   )
 
+# Prepare for setting RPATH if found from customized install directory
+get_filename_component(Z3_RPATH_DIR "${Z3_LIBRARIES}" DIRECTORY)
+
 # If Z3 has not been found in LLVM_Z3_INSTALL_DIR look in the default directories
 find_path(Z3_INCLUDE_DIR NAMES z3.h
   PATH_SUFFIXES libz3 z3
Index: llvm/cmake/modules/AddLLVM.cmake
===================================================================
--- llvm/cmake/modules/AddLLVM.cmake
+++ llvm/cmake/modules/AddLLVM.cmake
@@ -2140,17 +2140,21 @@
     set(extra_libdir ${LLVM_LIBRARY_DIR})
   endif()
 
+  if(LLVM_WITH_Z3 AND Z3_RPATH_DIR)
+    set(z3_libdir ${Z3_RPATH_DIR})
+  endif()
+
   if (APPLE)
     set(_install_name_dir INSTALL_NAME_DIR "@rpath")
-    set(_install_rpath "@loader_path/../lib${LLVM_LIBDIR_SUFFIX}" ${extra_libdir})
+    set(_install_rpath "@loader_path/../lib${LLVM_LIBDIR_SUFFIX}" ${extra_libdir} ${z3_libdir})
   elseif(${CMAKE_SYSTEM_NAME} MATCHES "AIX" AND BUILD_SHARED_LIBS)
     # $ORIGIN is not interpreted at link time by aix ld.
     # Since BUILD_SHARED_LIBS is only recommended for use by developers,
     # hardcode the rpath to build/install lib dir first in this mode.
     # FIXME: update this when there is better solution.
-    set(_install_rpath "${LLVM_LIBRARY_OUTPUT_INTDIR}" "${CMAKE_INSTALL_PREFIX}/lib${LLVM_LIBDIR_SUFFIX}" ${extra_libdir})
+    set(_install_rpath "${LLVM_LIBRARY_OUTPUT_INTDIR}" "${CMAKE_INSTALL_PREFIX}/lib${LLVM_LIBDIR_SUFFIX}" ${extra_libdir} ${z3_libdir})
   elseif(UNIX)
-    set(_install_rpath "\$ORIGIN/../lib${LLVM_LIBDIR_SUFFIX}" ${extra_libdir})
+    set(_install_rpath "\$ORIGIN/../lib${LLVM_LIBDIR_SUFFIX}" ${extra_libdir} ${z3_libdir})
     if(${CMAKE_SYSTEM_NAME} MATCHES "(FreeBSD|DragonFly)")
       set_property(TARGET ${name} APPEND_STRING PROPERTY
                    LINK_FLAGS " -Wl,-z,origin ")


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D115513.393450.patch
Type: text/x-patch
Size: 2058 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20211210/b17973fe/attachment.bin>


More information about the llvm-commits mailing list