[llvm] r319533 - [cmake] Enable zlib support on windows

Pavel Labath via llvm-commits llvm-commits at lists.llvm.org
Mon Dec 4 03:35:32 PST 2017


I've found another issue with the patch, in that it corrupts
llvm-config --system-libs output. I've uploaded
https://reviews.llvm.org/D40779, which should fix that as well as your
problem. Can you give it a try?

On 4 December 2017 at 10:02, Pavel Labath <labath at google.com> wrote:
> 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