[PATCH] D40779: [cmake] Fix zlib library detection
Rafael Avila de Espindola via llvm-commits
llvm-commits at lists.llvm.org
Mon Dec 4 16:02:48 PST 2017
When building static I am getting
HAVE_LIBZ_Z:INTERNAL=1
and --system-libs shows
-lz -lrt -ldl -lpthread -lm
So I think it is working.
Thanks,
Rafael
Pavel Labath via Phabricator <reviews at reviews.llvm.org> writes:
> labath created this revision.
> Herald added a subscriber: mgorny.
>
> A couple of people were broken by the previous zlib patch. It turned out
> this was because I used find_libraries for searching for the z library.
> This returns absolute paths, and when these paths made it into
> llvm-config, it made it produce nonsensical flags for the --system-libs
> output. To fix this, I hand-roll a search for the library in the same
> way that we search for the terminfo library a couple of lines below.
>
> This is a bit less flexible than the find_library option, as it does not
> allow the user to specify the path to the library at configure time
> (which is important on windows, as zlib is unlikely to be found in any
> of the standard places cmake searches), but I was able to guide the
> build to find it with appropriate values of LIB and INCLUDE environment
> variables.
>
>
> https://reviews.llvm.org/D40779
>
> Files:
> cmake/config-ix.cmake
> lib/Support/CMakeLists.txt
>
>
> Index: lib/Support/CMakeLists.txt
> ===================================================================
> --- lib/Support/CMakeLists.txt
> +++ lib/Support/CMakeLists.txt
> @@ -1,6 +1,6 @@
> set(system_libs)
> if ( LLVM_ENABLE_ZLIB AND HAVE_LIBZ )
> - set(system_libs ${system_libs} ${ZLIB_LIBRARY_PATH})
> + set(system_libs ${system_libs} ${ZLIB_LIBRARIES})
> endif()
> if( MSVC OR MINGW )
> # libuuid required for FOLDERID_Profile usage in lib/Support/Windows/Path.inc.
> Index: cmake/config-ix.cmake
> ===================================================================
> --- cmake/config-ix.cmake
> +++ cmake/config-ix.cmake
> @@ -130,11 +130,17 @@
> # Don't look for these libraries if we're using MSan, since uninstrumented third
> # party code may call MSan interceptors like strlen, leading to false positives.
> if(NOT LLVM_USE_SANITIZER MATCHES "Memory.*")
> - find_library(ZLIB_LIBRARY_PATH NAMES z zlib)
> - if (LLVM_ENABLE_ZLIB AND ZLIB_LIBRARY_PATH)
> - check_library_exists(${ZLIB_LIBRARY_PATH} compress2 "" HAVE_LIBZ)
> - else()
> - set(HAVE_LIBZ 0)
> + set(HAVE_LIBZ 0)
> + if(LLVM_ENABLE_ZLIB)
> + foreach(library z zlib_static zlib)
> + string(TOUPPER ${library} library_suffix)
> + check_library_exists(${library} compress2 "" HAVE_LIBZ_${library_suffix})
> + if(HAVE_LIBZ_${library_suffix})
> + set(HAVE_LIBZ 1)
> + set(ZLIB_LIBRARIES "${library}")
> + break()
> + endif()
> + endforeach()
> endif()
>
> # Don't look for these libraries on Windows.
>
>
> Index: lib/Support/CMakeLists.txt
> ===================================================================
> --- lib/Support/CMakeLists.txt
> +++ lib/Support/CMakeLists.txt
> @@ -1,6 +1,6 @@
> set(system_libs)
> if ( LLVM_ENABLE_ZLIB AND HAVE_LIBZ )
> - set(system_libs ${system_libs} ${ZLIB_LIBRARY_PATH})
> + set(system_libs ${system_libs} ${ZLIB_LIBRARIES})
> endif()
> if( MSVC OR MINGW )
> # libuuid required for FOLDERID_Profile usage in lib/Support/Windows/Path.inc.
> Index: cmake/config-ix.cmake
> ===================================================================
> --- cmake/config-ix.cmake
> +++ cmake/config-ix.cmake
> @@ -130,11 +130,17 @@
> # Don't look for these libraries if we're using MSan, since uninstrumented third
> # party code may call MSan interceptors like strlen, leading to false positives.
> if(NOT LLVM_USE_SANITIZER MATCHES "Memory.*")
> - find_library(ZLIB_LIBRARY_PATH NAMES z zlib)
> - if (LLVM_ENABLE_ZLIB AND ZLIB_LIBRARY_PATH)
> - check_library_exists(${ZLIB_LIBRARY_PATH} compress2 "" HAVE_LIBZ)
> - else()
> - set(HAVE_LIBZ 0)
> + set(HAVE_LIBZ 0)
> + if(LLVM_ENABLE_ZLIB)
> + foreach(library z zlib_static zlib)
> + string(TOUPPER ${library} library_suffix)
> + check_library_exists(${library} compress2 "" HAVE_LIBZ_${library_suffix})
> + if(HAVE_LIBZ_${library_suffix})
> + set(HAVE_LIBZ 1)
> + set(ZLIB_LIBRARIES "${library}")
> + break()
> + endif()
> + endforeach()
> endif()
>
> # Don't look for these libraries on Windows.
More information about the llvm-commits
mailing list