[llvm] r319533 - [cmake] Enable zlib support on windows
Pavel Labath via llvm-commits
llvm-commits at lists.llvm.org
Mon Dec 4 02:02:56 PST 2017
Hmm... it seems find_library prefers dynamic libraries over static
ones. I used it because it allows specifying multiple names, and zlib
tends to be called zlib.lib on windows.
The other benefit of find_library is that it allows you to override
the library name at configure time, so you can force static linking by
configuring with -DZLIB_LIBRARY_PATH=/path/to/libz.a.
However, if static linking is preferable as a default, we can change
the find_library line to something like
find_library(ZLIB_LIBRARY_PATH NAMES libz.a libz.so libz.dylib
zlibstatic.lib zlib.lib)
What do you think?
On 1 December 2017 at 22:37, Rafael Avila de Espindola
<rafael.espindola at gmail.com> wrote:
> This broke static linking on linux as ZLIB_LIBRARY_PATH points to the
> .so instead of the .a.
>
> Cheers,
> Rafael
>
>
> Pavel Labath via llvm-commits <llvm-commits at lists.llvm.org> writes:
>
>> Author: labath
>> Date: Fri Dec 1 03:41:07 2017
>> New Revision: 319533
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=319533&view=rev
>> Log:
>> [cmake] Enable zlib support on windows
>>
>> Summary:
>> zlib support was hard-wired to off for (non-cygwin) windows targets.
>> This disables some features, such as reading debug info from compressed
>> dwarf sections.
>>
>> This has been this way since zlib support was added in 2013 (r180083),
>> but there is no obvious reason for that. Zlib is perfectly capable of
>> being compiled for windows (it even has a cmake file that works out of
>> the box).
>>
>> This enables one to turn on zlib support on windows, if one has zlib
>> avaliable.
>>
>> Reviewers: rnk, beanz
>>
>> Subscribers: mgorny, aprantl, llvm-commits
>>
>> Differential Revision: https://reviews.llvm.org/D40655
>>
>> Modified:
>> llvm/trunk/cmake/config-ix.cmake
>> llvm/trunk/lib/Support/CMakeLists.txt
>>
>> Modified: llvm/trunk/cmake/config-ix.cmake
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/cmake/config-ix.cmake?rev=319533&r1=319532&r2=319533&view=diff
>> ==============================================================================
>> --- llvm/trunk/cmake/config-ix.cmake (original)
>> +++ llvm/trunk/cmake/config-ix.cmake Fri Dec 1 03:41:07 2017
>> @@ -127,45 +127,49 @@ if(HAVE_LIBPTHREAD)
>> set(LLVM_PTHREAD_LIB ${CMAKE_THREAD_LIBS_INIT})
>> endif()
>>
>> -# Don't look for these libraries on Windows. Also don't look for them if we're
>> -# using MSan, since uninstrumented third party code may call MSan interceptors
>> -# like strlen, leading to false positives.
>> -if( NOT PURE_WINDOWS AND NOT LLVM_USE_SANITIZER MATCHES "Memory.*")
>> - if (LLVM_ENABLE_ZLIB)
>> - check_library_exists(z compress2 "" HAVE_LIBZ)
>> +# 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)
>> endif()
>> - # Skip libedit if using ASan as it contains memory leaks.
>> - if (LLVM_ENABLE_LIBEDIT AND HAVE_HISTEDIT_H AND NOT LLVM_USE_SANITIZER MATCHES ".*Address.*")
>> - check_library_exists(edit el_init "" HAVE_LIBEDIT)
>> - else()
>> - set(HAVE_LIBEDIT 0)
>> - endif()
>> - if(LLVM_ENABLE_TERMINFO)
>> - set(HAVE_TERMINFO 0)
>> - foreach(library tinfo terminfo curses ncurses ncursesw)
>> - string(TOUPPER ${library} library_suffix)
>> - check_library_exists(${library} setupterm "" HAVE_TERMINFO_${library_suffix})
>> - if(HAVE_TERMINFO_${library_suffix})
>> - set(HAVE_TERMINFO 1)
>> - set(TERMINFO_LIBS "${library}")
>> - break()
>> - endif()
>> - endforeach()
>> - else()
>> - set(HAVE_TERMINFO 0)
>> - endif()
>>
>> - find_library(ICONV_LIBRARY_PATH NAMES iconv libiconv libiconv-2 c)
>> - set(LLVM_LIBXML2_ENABLED 0)
>> - set(LIBXML2_FOUND 0)
>> - if((LLVM_ENABLE_LIBXML2) AND ((CMAKE_SYSTEM_NAME MATCHES "Linux") AND (ICONV_LIBRARY_PATH) OR APPLE))
>> - find_package(LibXml2)
>> - if (LIBXML2_FOUND)
>> - set(LLVM_LIBXML2_ENABLED 1)
>> - include_directories(${LIBXML2_INCLUDE_DIR})
>> - set(LIBXML2_LIBS "xml2")
>> + # Don't look for these libraries on Windows.
>> + if (NOT PURE_WINDOWS)
>> + # Skip libedit if using ASan as it contains memory leaks.
>> + if (LLVM_ENABLE_LIBEDIT AND HAVE_HISTEDIT_H AND NOT LLVM_USE_SANITIZER MATCHES ".*Address.*")
>> + check_library_exists(edit el_init "" HAVE_LIBEDIT)
>> + else()
>> + set(HAVE_LIBEDIT 0)
>> + endif()
>> + if(LLVM_ENABLE_TERMINFO)
>> + set(HAVE_TERMINFO 0)
>> + foreach(library tinfo terminfo curses ncurses ncursesw)
>> + string(TOUPPER ${library} library_suffix)
>> + check_library_exists(${library} setupterm "" HAVE_TERMINFO_${library_suffix})
>> + if(HAVE_TERMINFO_${library_suffix})
>> + set(HAVE_TERMINFO 1)
>> + set(TERMINFO_LIBS "${library}")
>> + break()
>> + endif()
>> + endforeach()
>> + else()
>> + set(HAVE_TERMINFO 0)
>> + endif()
>> +
>> + find_library(ICONV_LIBRARY_PATH NAMES iconv libiconv libiconv-2 c)
>> + set(LLVM_LIBXML2_ENABLED 0)
>> + set(LIBXML2_FOUND 0)
>> + if((LLVM_ENABLE_LIBXML2) AND ((CMAKE_SYSTEM_NAME MATCHES "Linux") AND (ICONV_LIBRARY_PATH) OR APPLE))
>> + find_package(LibXml2)
>> + if (LIBXML2_FOUND)
>> + set(LLVM_LIBXML2_ENABLED 1)
>> + include_directories(${LIBXML2_INCLUDE_DIR})
>> + set(LIBXML2_LIBS "xml2")
>> + endif()
>> endif()
>> endif()
>> endif()
>>
>> Modified: llvm/trunk/lib/Support/CMakeLists.txt
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/CMakeLists.txt?rev=319533&r1=319532&r2=319533&view=diff
>> ==============================================================================
>> --- llvm/trunk/lib/Support/CMakeLists.txt (original)
>> +++ llvm/trunk/lib/Support/CMakeLists.txt Fri Dec 1 03:41:07 2017
>> @@ -1,4 +1,7 @@
>> set(system_libs)
>> +if ( LLVM_ENABLE_ZLIB AND HAVE_LIBZ )
>> + set(system_libs ${system_libs} ${ZLIB_LIBRARY_PATH})
>> +endif()
>> if( MSVC OR MINGW )
>> # libuuid required for FOLDERID_Profile usage in lib/Support/Windows/Path.inc.
>> set(system_libs ${system_libs} psapi shell32 ole32 uuid)
>> @@ -21,9 +24,6 @@ elseif( CMAKE_HOST_UNIX )
>> set(system_libs ${system_libs} atomic)
>> endif()
>> set(system_libs ${system_libs} ${LLVM_PTHREAD_LIB})
>> - if ( LLVM_ENABLE_ZLIB AND HAVE_LIBZ )
>> - set(system_libs ${system_libs} z)
>> - endif()
>> if( UNIX AND NOT (BEOS OR HAIKU) )
>> set(system_libs ${system_libs} m)
>> endif()
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list