[cfe-dev] Problem building llvm and clang 7.0.0
Jonas Hahnfeld via cfe-dev
cfe-dev at lists.llvm.org
Wed Aug 15 01:37:04 PDT 2018
On 2018-08-15 10:07, Fletcher, John P wrote:
> Jonas - see later down the message
> ________________________________________
> From: Jonas Hahnfeld [hahnjo at hahnjo.de]
> Sent: 15 August 2018 08:03
> To: Fletcher, John P
> Cc: cfe-dev [cfe-dev at lists.llvm.org]
> Subject: Re: [cfe-dev] Problem building llvm and clang 7.0.0
>
> Hi John,
>
> On 2018-08-15 00:33, Fletcher, John P wrote:
>> _______________________________________
>> From: Jonas Hahnfeld [hahnjo at hahnjo.de]
>> Sent: 10 August 2018 18:08
>> To: Fletcher, John P
>> Cc: cfe-dev [cfe-dev at lists.llvm.org]
>> Subject: Re: [cfe-dev] Problem building llvm and clang 7.0.0
>>
>> On 2018-08-10 18:34, Fletcher, John P via cfe-dev wrote:
>>> I am building LLVM and Clang using gcc 7.1 with Cmake and Ninja on a
>>> system based on Ubuntu 12.04.
>>>
>>> The following commands worked for clang 6.0.0 with all the source
>>> files installed:
>>>
>>> /opt/cmake/bin/cmake -GNinja \
>>> -DCMAKE_C_COMPILER=/opt/gcc-7.1/bin/gcc \
>>> -DCMAKE_CXX_COMPILER=/opt/gcc-7.1/bin/g++ \
>>> -DGCC_INSTALL_PREFIX=/opt/gcc-7.1 \
>>> -DCMAKE_INSTALL_PREFIX=/home/fletcher/LLVM/llvm-6.0.distrib/local
>>> -DCMAKE_BUILD_TYPE=Release -DLLVM_BUILD_LLVM_DYLIB=ON
>>> -DLLVM_TARGETS_TO_BUILD="host" -DLLVM_PARALLEL_LINK_JOBS=1
>>> -DCMAKE_EXE_LINKER_FLAGS="-Xlinker -R/opt/gcc-7.1/lib64
>>> -L/opt/gcc-7.1/lib64" ../llvm
>>>
>>> Some things seem to have changed with version 7.0.0
>>>
>>> (1) There has been a change associated with libomptarget and now it
>>> fails as it is picking up an old version of cuda on my computer and
>>> complaining that the gcc is too new. The only way I could find to
>>> get
>>> rid of this is to remove openmp.
>>
>> libomptarget uses the default FindCUDA.cmake. Can you try setting
>> CUDA_TOOLKIT_ROOT_DIR and / or CUDA_BIN_PATH to pont to the "right"
>> version of CUDA?
>> Alternatively you can point LIBOMPTARGET_NVPTX_ALTERNATE_HOST_COMPILER
>> to an older version of GCC that is compatible with the detected
>> version
>> of CUDA.
>>
>> Cheers,
>> Jonas
>>
>> ------------------------
>>
>> Jonas
>>
>> Thank you for your suggestion. I have tried various things and in the
>> end I have renamed my out of date link to cuda as cudaold so that it
>> is no longer picked up. That is not enough as it still fails in
>> openmp so I have taken that out.
>>
>> To the CLANG community.
>>
>> (1) I am concerned that something has changed and I cannot find any
>> documentation, in particular something which worked does not and is
>> NOT picked up by Cmake so that it crashes after 2.5 hours of running.
>> What is it that has changed?
>
> Of course something has changed, we are not standing still after all.
> If
> there were no changes what would be the point of new releases?
> In this particular case the OpenMP runtime for Nvidia GPUs is now
> included in the release.
>
>> (2) There has been no response on this problem.
>> -------
>> (2) When I did this it still does not build as it cannot link a
>> library with the following messages:
>>
>> FAILED: lib/clang/7.0.0/lib/linux/libclang_rt.fuzzer_no_main-x86_64.a
>> --localize-hidden: not found
>>
>> --localize-hidden seems to be an option for ld. I have not traced any
>> documentation.
>> --------
>> I now think that the problem about --localize-hidden: not found is
>> because it should be preceded by objcopy, for which it is an argument,
>> so that something in the command processing is broken.
>
> Or CMake just didn't find your objcopy - which would be bad. You have
> that installed, haven't you?
>
>> I am spending my time building on rc1 to help you get things sorted.
>> Where are you all?
>
> Please keep in mind that you are not guaranteed to get support from the
> community.
> To maximize chances you should post as much information as possible to
> narrow down the problem:
> - Are there errors during configuration?
> - What are the exact error messages you get when building?
> - What versions of software are you using? You already mentioned GCC
> 7.1, but which version of CUDA?
> - Does CMake find the versions you are intending to use? A log file
> might help here...
>
> Regards,
> Jonas
>
>
> -------------------------
>
> Jonas
>
> Thank you again.
>
> The comments I made about the lack of response were because it was the
> middle of the night and it had failed again. I am building rc1 and
> reporting failure, which is what we are encouraged to do!
>
> I have now made progress with things.
>
> On (1) The version of Cuda is an old one. 6.5. The point is that I
> don't want it included in the build at all, and I cannot find an
> option to exclude it. I have some hardware for CUDA on my computer
> which I am not currently using. The solution to this problem at the
> moment is to remove openmp completely.
Ok, that explains what you are seeing: Cuda 6.5 is older (from 2014)
than GCC-7 (from last year). As I mentioned in my first email you may
try to set -DLIBOMPTARGET_NVPTX_ALTERNATE_HOST_COMPILER=/usr/bin/gcc
which is probably older on Ubuntu 12.04. For disabling, see below.
> When things have changed I look at the files reporting changes. It is
> helpful if there is a note there if it is a breaking change or how to
> turn off a change.
It's added functionality so I wouldn't consider it a "breaking change".
I think the build is breaking because of the particular setup which is
just bad luck.
AFAIK there is no option to turn off building libomptarget-nvptx. But if
you are not interested in OpenMP offloading you can pass
-DOPENMP_ENABLE_LIBOMPTARGET=Off (which is undocumented as I just became
aware) to disable all of libomptarget. That way you will at least get
libomp, the OpenMP runtime library for host features.
> On (2) I have found that the CmakeCache.txt file produced for 6.0.0
> and 7.0.0 are different.
>
> The following lines which help locate binaries are missing in the file
> for 7.0.0.
>
> //Path to a program.
> CMAKE_NM:FILEPATH=/usr/bin/nm
>
> //Path to a program.
> CMAKE_OBJCOPY:FILEPATH=/usr/bin/objcopy
>
> //Path to a program.
> CMAKE_OBJDUMP:FILEPATH=/usr/bin/objdump
>
> //Path to a program.
> CMAKE_RANLIB:FILEPATH=/usr/bin/ranlib
>
> I am using cmake 3.6.2 in both cases.
>
> I do not know why the action has changed.
That's weird, assuming that you didn't remove these binaries in the
meantime. I'll ask a colleague of mine who was facing the same problem
but I can't remember the solution...
Cheers,
Jonas
More information about the cfe-dev
mailing list