[PATCH] D106131: Fix FindZ3.cmake to support static libraries and Windows

Tomasz KamiƄski via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Jul 16 00:32:57 PDT 2021


tomasz-kaminski-sonarsource updated this revision to Diff 359238.
tomasz-kaminski-sonarsource added a comment.

Removed uncessary debug message.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D106131/new/

https://reviews.llvm.org/D106131

Files:
  llvm/cmake/modules/FindZ3.cmake


Index: llvm/cmake/modules/FindZ3.cmake
===================================================================
--- llvm/cmake/modules/FindZ3.cmake
+++ llvm/cmake/modules/FindZ3.cmake
@@ -2,8 +2,19 @@
 
 # Function to check Z3's version
 function(check_z3_version z3_include z3_lib)
+  # Get lib path
+  set(z3_link_libs "${z3_lib}")
+
+  # Try to find a threading module in case Z3 was built with threading support.
+  # Threads are required elsewhere in LLVM, but not marked as required here because
+  # Z3 could have been compiled without threading support.
+  find_package(Threads)
+  if(CMAKE_THREAD_LIBS_INIT)
+    list(APPEND z3_link_libs "${CMAKE_THREAD_LIBS_INIT}")
+  endif()
+
   # The program that will be executed to print Z3's version.
-  file(WRITE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testz3.c
+  file(WRITE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testz3.cpp
        "#include <assert.h>
         #include <z3.h>
         int main() {
@@ -13,16 +24,14 @@
           return 0;
        }")
 
-  # Get lib path
-  get_filename_component(z3_lib_path ${z3_lib} PATH)
-
   try_run(
     Z3_RETURNCODE
     Z3_COMPILED
     ${CMAKE_BINARY_DIR}
-    ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testz3.c
+    ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testz3.cpp
     COMPILE_DEFINITIONS -I"${z3_include}"
-    LINK_LIBRARIES -L${z3_lib_path} -lz3
+    LINK_LIBRARIES ${z3_link_libs}
+    COMPILE_OUTPUT_VARIABLE COMPILE_OUTPUT
     RUN_OUTPUT_VARIABLE SRC_OUTPUT
   )
 
@@ -30,6 +39,9 @@
     string(REGEX REPLACE "([0-9]*\\.[0-9]*\\.[0-9]*)" "\\1"
            z3_version "${SRC_OUTPUT}")
     set(Z3_VERSION_STRING ${z3_version} PARENT_SCOPE)
+  else()
+    message(NOTICE "${COMPILE_OUTPUT}")
+    message(WARNING "Failed to compile Z3 program that is used to determine library version.")
   endif()
 endfunction(check_z3_version)
 
@@ -86,7 +98,7 @@
 
   file(STRINGS "${Z3_INCLUDE_DIR}/z3_version.h"
        z3_version_str REGEX "^#define[\t ]+Z3_BUILD_NUMBER[\t ]+.*")
-  string(REGEX REPLACE "^.*Z3_BUILD_VERSION[\t ]+([0-9]).*$" "\\1"
+  string(REGEX REPLACE "^.*Z3_BUILD_NUMBER[\t ]+([0-9]).*$" "\\1"
          Z3_BUILD "${z3_version_str}")
 
   set(Z3_VERSION_STRING ${Z3_MAJOR}.${Z3_MINOR}.${Z3_BUILD})
@@ -98,6 +110,7 @@
   # conservative and force the found version to 0.0.0 to make version
   # checks always fail.
   set(Z3_VERSION_STRING "0.0.0")
+  message(WARNING "Failed to determine Z3 library version, defaulting to 0.0.0.")
 endif()
 
 # handle the QUIETLY and REQUIRED arguments and set Z3_FOUND to TRUE if


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D106131.359238.patch
Type: text/x-patch
Size: 2581 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210716/4bd08e4f/attachment.bin>


More information about the llvm-commits mailing list