Jonas - see later down the message
________________________________________
From: Jonas Hahnfeld [hahnjo@hahnjo.de]
Sent: 15 August 2018 08:03
To: Fletcher, John P
Cc: cfe-dev [cfe-dev@lists.llvm.org]
Subject: Re: [cfe-dev] Problem building llvm and clang 7.0.0
Hi John,
_______________________________________
From: Jonas Hahnfeld [hahnjo@hahnjo.de]
Sent: 10 August 2018 18:08
To: Fletcher, John P
Cc: cfe-dev [cfe-dev@lists.llvm.org]
Subject: Re: [cfe-dev] Problem building llvm and clang 7.0.0
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