[Trilinos-Users] [EXTERNAL] Re: BLAS/LAPACK automatically linked by compiler
Phipps, Eric T
etphipp at sandia.gov
Mon Sep 10 13:19:27 MDT 2012
Here' what I have done in this situation (e.g., Cray platforms), and it
works:
-D TPL_BLAS_LIBRARIES="" \
-D BLAS_LIBRARY_NAMES="" \
-Eric
On 9/10/12 1:12 PM, "Perschbacher, Brent M" <bmpersc at sandia.gov> wrote:
>Actually, setting TPL_<tpl name>_LIBRARIES explicitly does short circuit
>the
>logic of our current tpl system. However, I don't think we've every really
>tested that the empty string will behave as expected here.
>
>As Antonio pointed out the FILEPATH may be necessary in this case. What is
>done in our tpl system is to check to see if TPL_<tpl name>_LIBARIES is
>already set, if it is we assume it was set correctly and use it verbatim.
>However, if you leave it up to cmake to determine what the type of that
>variable is it may confuse us. An empty string for a STRING variable in
>cmake is false if you do a simple test like "if(TPL_<tpl_name>_libraries)"
>which is how we test to see if the user set the variable. I haven't tried
>setting these variables to the empty string myself, but it is possible
>that
>to cmake a FILEPATH variable that is the empty string is not false.
>
>Brent
>
>
>On 9/10/12 12:29 PM, "Eric Bavier" <bavier at cray.com> wrote:
>
>> Setting the TPL_BLAS_LIBRARIES variable does not short-circuit the logic
>> in the TPL library declaration code (TribitsTplDeclareLibraries.cmake),
>> so it continues to search for the libraries named in FindBLAS.cmake.
>>
>> What is possible however is to define TPL_BLAS_LIBRARY_NAMES:STRING="",
>> an override that is "documented" in a comment in
>> TribitsTplDeclareLibraries.cmake. So, doing the following should work:
>>
>> -D TPL_ENABLE_BLAS:BOOL=ON
>> -D TPL_BLAS_LIBRARY_NAMES:STRING=""
>>
>> `~Eric
>>
>>
>> On 09/10/2012 01:06 PM, Antonio Cervone wrote:
>>> from Trilinos10CMakeQuickstart.txt:
>>>
>>> NOTE: The variables TPL_<TPLNAME>_INCLUDE_DIRS and
>>>TPL_<TPLNAME>_LIBRARIES
>>> are what are directly used by the CMake build infrastructure. These
>>> variables are normally set by the variables <TPLNAME>_INCLUDE_DIRS,
>>> <TPLNAME>_LIBRARY_NAMES, and <TPLNAME>_LIBRARY_DIRS using find
>>>commands
>>> but
>>> you can always override these by setting the (type FILEPATH) cache
>>> variables TPL_<TPLNAME>_INCLUDE_DIRS and TPL_<TPLNAME>_LIBRARIES.
>>>This
>>> gives
>>> the user complete and direct control in specifying exactly what is
>>>used in
>>> the build process. The other variables that start with <TPLNAME>_
>>>are
>>> just a
>>> convenience to make it easier to specify the location of the
>>>libraries.
>>>
>>> it seems that the user has not the desired "complete and direct
>>>control" :D
>>>
>>> try adding FILEPATH, it can be important
>>>
>>> -D TPL_BLAS_LIBRARIES:FILEPATH=""
>>>
>>> this way cmake has no other choice then to set that variable as you
>>>asked.
>>>
>>> antonio
>>>
>>> On Mon, Sep 10, 2012 at 7:45 PM, Nico Schlömer
>>><nico.schloemer at gmail.com>
>>> wrote:
>>>> Hm. Doing this
>>>>
>>>> -D TPL_ENABLE_BLAS:BOOL=ON \
>>>> -D TPL_BLAS_LIBRARIES="" \
>>>>
>>>> yields this
>>>>
>>>> -- Processing enabled TPL: BLAS
>>>> -- Searching for library 'blas' ...
>>>> -- Searching for library 'blas_win32' ...
>>>> -- Warning: Could not find a library in the set "blas blas_win32"
>>>> for the TPL BLAS! Please manually set BLAS_LIBRARY_DIRS and/or
>>>> BLAS_LIBRARY_NAMES or just TPL_BLAS_LIBRARIES to point to the BLAS
>>>> libraries!
>>>>
>>>> --Nico
>>>>
>>>> On Mon, Sep 10, 2012 at 6:02 PM, Antonio Cervone
>>>><ant.cervone at gmail.com>
>>>> wrote:
>>>>> hi Nico,
>>>>> one way to go around this problem is to explicitly set the internal
>>>>> variable that tribits uses to link the library, i.e.
>>>>>
>>>>> TPL_BLAS_LIBRARIES
>>>>> TPL_BLAS_INCLUDE_DIRS
>>>>>
>>>>> if you set them to empty you should avoid the double linking.
>>>>> bye
>>>>>
>>>>> antonio
>>>>>
>>>>>
>>>>>
>>>>> On Mon, Sep 10, 2012 at 5:54 PM, Nico Schlömer
>>>>><nico.schloemer at gmail.com>
>>>>> wrote:
>>>>>> Hi all,
>>>>>>
>>>>>> here's a funny compiler issue.
>>>>>> On NERSC, the BLAS and LAPACK libraries are automatically included
>>>>>>on
>>>>>> the link line by their compiler wrappers, much like libmpi.a is
>>>>>> automatically linked on many other platforms.
>>>>>> We've got outselves a little bit of a conflict of responsibilities
>>>>>> here since also CMake tries to care of BLAS and LAPACK, e.g.,
>>>>>>
>>>>>> -D TPL_ENABLE_BLAS:BOOL=ON \
>>>>>> -D BLAS_LIBRARY_DIRS:FILEPATH="$CRAY_LIBSCI_PREFIX_DIR/lib" \
>>>>>> -D BLAS_LIBRARY_NAMES="sci_gnu" \
>>>>>>
>>>>>> The exact library locations aren't officially disclosed, so at best
>>>>>> I'm getting BLAS and LAPACK implicitly twice on the link line.
>>>>>>Should
>>>>>> they decide to change their BLAS/LAPACK directories in the wrappers
>>>>>> one day, however, this'll lead to two different BLAS/LAPACK
>>>>>>libraries
>>>>>> on the link line which is less than ideal.
>>>>>>
>>>>>> What's the situation on other HPCs, and how do you deal with this?
>>>>>>
>>>>>> --Nico
>>>>>>
>>>>>> _______________________________________________
>>>>>> Trilinos-Users mailing list
>>>>>> Trilinos-Users at software.sandia.gov
>>>>>> http://software.sandia.gov/mailman/listinfo/trilinos-users
>>>>>>
>>>
>>> _______________________________________________
>>> Trilinos-Users mailing list
>>> Trilinos-Users at software.sandia.gov
>>> http://software.sandia.gov/mailman/listinfo/trilinos-users
>>>
>>
>>
>>
>> _______________________________________________
>> Trilinos-Users mailing list
>> Trilinos-Users at software.sandia.gov
>> http://software.sandia.gov/mailman/listinfo/trilinos-users
>
>
>_______________________________________________
>Trilinos-Users mailing list
>Trilinos-Users at software.sandia.gov
>http://software.sandia.gov/mailman/listinfo/trilinos-users
More information about the Trilinos-Users
mailing list