[llvm-dev] Linker errors after installing/compiling LLVM/CLANG

Chris Bieneman via llvm-dev llvm-dev at lists.llvm.org
Mon Jul 8 12:46:50 PDT 2019


Hey Joan,

Creating directories and files outside the build directory is not expected, and not great. I really don't know what would cause that.

Sorry,
-Chris

> On Jul 8, 2019, at 2:42 AM, Joan Lluch <joan.lluch at icloud.com> wrote:
> 
> Hi Chris,
> 
> I applied the .diff according to your changes and it worked!!  Thank you very much for that.
> 
> I observed now that after building the “install” scheme, a number of new directories where created at the same level of my llvm-project clone directory.
> 
> LLVM.build	benchmarks	examples	include		install		lib		llvm-project	tools		unittests	utils 
> 
> The ‘install’ directory was created by me and that’s where all the executables went as per my cmake command line. 
> 
> However I’m unsure if the remaining directories are supposed to be there as well, as most of them appear to contain intermediate files or files used for build purposes (I don’t really know). Please, forgive me if this is ok, the presence of these directories is not a problem as everything seems to work ok now, but I just am curious. I will update your review with my accepted revision later today.
> 
> Thanks again!
> 
> Joan
> 
> 
>> On 7 Jul 2019, at 23:18, Chris Bieneman <chris.bieneman at me.com <mailto:chris.bieneman at me.com>> wrote:
>> 
>> Hey Joan,
>> 
>> Take a look at this patch, and see if it resolves your issue:
>> https://reviews.llvm.org/D64300 <https://reviews.llvm.org/D64300>
>> 
>> Thanks,
>> -Chris
>> 
>>> On Jul 7, 2019, at 3:54 PM, Chris Bieneman via llvm-dev <llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>> wrote:
>>> 
>>> Hey Joan,
>>> 
>>> I looked into the Xcode build issue that you're experiencing, and it relates to a limitation in Xcode which was surfaced by a CMake change I made a few months back. The issue is that Xcode can't handle library targets that don't have any sources associated with them, and I made a change to how we build clang so that we generate object libraries for every target then build a static library from the object target.
>>> 
>>> Long story short, I actually think I have a fix for it.
>>> 
>>> I should have a patch up for review today.
>>> 
>>> -Chris
>>> 
>>>> On Jul 7, 2019, at 3:25 PM, Zachary Turner via llvm-dev <llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>> wrote:
>>>> 
>>>> I don’t personally develop on Mac (i use Windows), but I have an analogous setup there where i use ninja to build and Visual Studio for editing, debugging, etc.
>>>> 
>>>> What i do, and I assume it will be the same or very similar for Xcode, is to run cmake twice, once with Ninja, and once with VS (Xcode for you), from separate directories.  I build with the ninja one (“ninja clang” on command line), and I change  the debugger target from the default to point directly into my ninja directory , so VS is debugging the thing that was built with ninja.
>>>> 
>>>> Hopefully that makes sense
>>>> 
>>>> On Sun, Jul 7, 2019 at 11:59 AM Joan Lluch <joan.lluch at icloud.com <mailto:joan.lluch at icloud.com>> wrote:
>>>> Hi zturner
>>>> 
>>>> Please, would you describe me step by step how do I get both a Xcode project and a Ninja setup for compiling the same?
>>>> 
>>>> I have downloaded the Ninja-mac binary from here https://github.com/ninja-build/ninja/releases <https://github.com/ninja-build/ninja/releases> and have setup system path to it.  What’s next?
>>>> 
>>>> Thanks
>>>> 
>>>> 
>>>> 
>>>> 
>>>>> On 7 Jul 2019, at 19:23, Zachary Turner <zturner at roblox.com <mailto:zturner at roblox.com>> wrote:
>>>>> 
>>>>> I’m not saying you can’t use Xcode, I’m just saying that instead of *building* in Xcode, just type “ninja” on the command line to do your build and then use Xcode as you normally would.
>>>>> 
>>>>> I don’t think it’s the case that LLVM does not intend to support Xcode, just that its a community driven project, so unless someone is sufficiently motivated to fix whatever this problem is, it might stay this way for some time.  On that note, patches are certainly welcome, but if you just want to unblock yourself, the easiest way is going to be to type a command on the command line to do your build instead of pressing a button in the UI (and you could still use the UI for everything else)
>>>>> 
>>>>> On Sun, Jul 7, 2019 at 9:40 AM Joan Lluch <joan.lluch at icloud.com <mailto:joan.lluch at icloud.com>> wrote:
>>>>> 
>>>>> Hi zturner,
>>>>> 
>>>>> I understand what you say and I have been suggested this a couple of times, but I really don’t want to make the switch to ninja. I’m a retired senior software developer and I just use LLVM for a custom backend that I have already almost completed in LLVM 7.0. I’m not really into LLVM-project development, and Xcode is both familiar and fast enough for incremental builds of ‘llc’ or ‘clang’ alone including my target backend, (or it used to be in 7.0). It’s just the right tool for me. 
>>>>> 
>>>>> On the other hand I think that in case there’s no intention to fully support Xcode in the future, then it should be removed from de doc descriptions to prevent deceptive information. Otherwise, at least major issues like this one, should be taken care of. 
>>>>> 
>>>>> John
>>>>> 
>>>>> 
>>>>> 
>>>>> On 7 Jul 2019, at 17:08, Zachary Turner <zturner at roblox.com <mailto:zturner at roblox.com>> wrote:
>>>>> 
>>>>>> Try using ninja generator, most people do not use Xcode for building, so since it lesser-used, it also lesser tested.  Note that it’s perfectly possible to use Xcode for code browsing, debugging, editing while using ninja for building, which is what I think most people do
>>>>>> 
>>>>>> On Sun, Jul 7, 2019 at 4:20 AM Joan Lluch via llvm-dev <llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>> wrote:
>>>>>> I also filled a bug report. I think this is actually a bug
>>>>>> 
>>>>>> https://bugs.llvm.org/show_bug.cgi?id=42528 <https://bugs.llvm.org/show_bug.cgi?id=42528>
>>>>>> 
>>>>>> John
>>>>>> 
>>>>>> 
>>>>>>> On 7 Jul 2019, at 09:27, Joan Lluch via llvm-dev <llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>> wrote:
>>>>>>> 
>>>>>>> I understand that a difference between ninja and xcode is they use a different way to determine code dependencies. So to my understanding xcode needs dependencies to be properly created whereas ninja just doesn’t care. Maybe this is why ninja is able to find what it needs for the compilation to succeed, but not xcode.
>>>>>>> 
>>>>>>> So I have now looked at the CMakeLists.txt files and found that all the missing libraries are defined in files under the ‘clang’ directory. 
>>>>>>> 
>>>>>>> The llvm_project clone has the following structure:
>>>>>>> 
>>>>>>> llvm-project
>>>>>>> 	llvm
>>>>>>> 	clang
>>>>>>> 	(others)
>>>>>>> 
>>>>>>> Everything  under ‘llvm’ is properly compiled with no issues, however what is under ‘clang’ fails to compile (with linker errors) even if -DLLVM_ENABLE_PROJECTS=“clang” is specified.
>>>>>>> 
>>>>>>> I suspect now that there may be some kind of bug in the llvm project that prevents this to work properly, or maybe something else needs to be done to get clang compiled on xcode. I also suspect that this may pass unnoticed when using ninja because it simply uses it’s own way to find dependencies (but I don’t really know anything about ninja). 
>>>>>>> 
>>>>>>> Maybe this may help somebody to figure out what could be happening and hopefully help me to narrow the issue? I honestly am totally lost on what to try next. This is kind of ridiculous.
>>>>>>> 
>>>>>>> Thanks
>>>>>>> 
>>>>>>> 
>>>>>>>> On 6 Jul 2019, at 23:49, Neil Nelson <nnelson at infowest.com <mailto:nnelson at infowest.com>> wrote:
>>>>>>>> 
>>>>>>>> Joan,
>>>>>>>> 
>>>>>>>> Just completed a good clang compile built from a mostly vanilla Xubuntu 19.04 VM, installed the llvm-needed Ubuntu packages, downloaded a new copy of llvm using the noted llvm install page, configured using
>>>>>>>> 
>>>>>>>> cmake -G Ninja -DLLVM_ENABLE_PROJECTS="clang" -DLLVM_USE_LINKER=lld -DCMAKE_BUILD_TYPE="Release" -DCMAKE_INSTALL_PREFIX=/home/nnelson/Documents/llvm/install ../llvm &> cmake.log
>>>>>>>> 
>>>>>>>> which is primarily different from yours where I am using a 'Release' build to avoid the much larger memory and disk usage of a 'Debug' build. The 'ninja install' command put everything in llvm/install as expected including clang. I look through cmake.log to see if there are errors that need to be corrected.
>>>>>>>> 
>>>>>>>> My differences appear to be Xubuntu, the packages, ninja, and the cmake line.
>>>>>>>> 
>>>>>>>> On Linux I can use
>>>>>>>> 
>>>>>>>> ninja &> ninja_compile.log
>>>>>>>> 
>>>>>>>> to look at the compile history and see if something went wrong.
>>>>>>>> 
>>>>>>>> Neil
>>>>>>>> 
>>>>>>>> On 7/6/19 12:00 AM, Joan Lluch wrote:
>>>>>>>>> Hi Nelson,
>>>>>>>>> 
>>>>>>>>> Thanks for your reply. 
>>>>>>>>> 
>>>>>>>>> The “build/Debug/lib” and "build/Release/lib” directories is where all the libraries go. Similarly, the executables go to “build/Debug/bin” and “build/Release/bin” before they are moved to the install directory. This is expected and normal. However, the problem is that a small number of libraries (exactly 20 in total) are not created at all for the LLVM 9.0 version that I cloned from gitHub. These libraries are in fact not created anywhere!.
>>>>>>>>> 
>>>>>>>>> I still have LLVM 7.0 installed in my computer and the libraries for that version are all there in the right places under the LLMV 7.0 directory, but in that case I installed it all in a different way as I said, loosing the benefits of git.
>>>>>>>>> 
>>>>>>>>> I forgot to mention that “llc” alone compiles and links correctly without any issue. The problem is only when I try to get ‘clang’ compiled.
>>>>>>>>> 
>>>>>>>>> You mention that you enabled a lot of projects:  "clang;clang-tools-extra;compiler-rt;debuginfo-tests;libclc;libcxx;libcxxabi;libunwind;lld;lldb;llvm;openmp;parallel-libs;polly;pstl”. I only really need the basic installation of “clang”, and I do not need any testing tools because all I want is to add my custom target to it. I also tried "clang;libclc;libcxx” but the problem with the missing libraries is exactly the same.
>>>>>>>>> 
>>>>>>>>> Just as a matter of information: I successfully implemented a custom target backend, and have it almost finished and running perfectly on LLVM 7.0. Now, I just want to move it to LLVM 9.0, but got stuck in what is supposed to be the easiest part which is just compiling it (??), but I do not understand why it doesn’t compile!
>>>>>>>>> 
>>>>>>>>> Any ideas?
>>>>>>>>> 
>>>>>>>>> Joan
>>>>>>>>> 
>>>>>>>>>> John, I compiled and installed to /usr/local all the projects under llvm except llgo yesterday. The three files you noted are in
>>>>>>>>>> ../llvm-project/build/lib
>>>>>>>>>> I do not have a llvm-project/build/Debug directory.
>>>>>>>>>> Xubuntu 19.04. llvm downloaded from github on 6/18 using instructions from the page you note.
>>>>>>>>>> cmake -G Ninja -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;compiler-rt;debuginfo-tests;libclc;libcxx;libcxxabi;libunwind;lld;lldb;llvm;openmp;parallel-libs;polly;pstl" -DLLVM_USE_LINKER=lld -DCMAKE_BUILD_TYPE="Release" ../llvm
>>>>>>>>>> Installed additional packages as needed.
>>>>>>>>>> Neil
>>>>>>>>>> On 7/5/19 6:46 AM, Joan Lluch via llvm-dev wrote:
>>>>>>>>>>> Hi All,
>>>>>>>>>>> 
>>>>>>>>>>> I am looking for the best way to install LLVM+clang,  but I do not seem to find a way that works for me.
>>>>>>>>>>> 
>>>>>>>>>>> I followed the steps in this document Getting Started with the LLVM System — LLVM 9 documentation <https://llvm.org/docs/GettingStarted.html> except that I created the following folder structure as I do not want clang and llc to go to /usr/local
>>>>>>>>>>> 
>>>>>>>>>>> LLVM-9
>>>>>>>>>>>    llvm-project  (cloned from github)
>>>>>>>>>>>    install
>>>>>>>>>>> 
>>>>>>>>>>> I ran the following command line from the build directory in llvm-project as described in the doc, but added the DLLVM_OPTIMIZED_TABLEGEN=On variable :
>>>>>>>>>>> 
>>>>>>>>>>> cmake -G Xcode -DLLVM_ENABLE_PROJECTS=clang -DCMAKE_INSTALL_PREFIX=/Users/joan/LLVM-9/install -DLLVM_OPTIMIZED_TABLEGEN=On ../llvm
>>>>>>>>>>> 
>>>>>>>>>>> The cmake command above seems to work ok, but after that, when I compile the “install” or “build_all” schemes I get a lot of linker errors. Such as these ones and more:
>>>>>>>>>>> 
>>>>>>>>>>> clang: error: no such file or directory: '/Users/joan/LLVM-9/llvm-project/build/Debug/lib/libclangAST.a'
>>>>>>>>>>> clang: error: no such file or directory: '/Users/joan/LLVM-9/llvm-project/build/Debug/lib/libclangLex.a'
>>>>>>>>>>> clang: error: no such file or directory: '/Users/joan/LLVM-9/llvm-project/build/Debug/lib/libclangBasic.a'
>>>>>>>>>>> 
>>>>>>>>>>> Up until recently, I have worked with LLVM 7.0 and all what I did was downloading both llvm and clang from llvm.org <http://llvm.org/>, copied clang into llvm/tools, and ran the cmake application (not command line).  That kind of worked except for some minor glitches but of course I didn’t get the benefits of git.
>>>>>>>>>>> 
>>>>>>>>>>> So what am I doing wrong now? Why I’m getting such linker errors?
>>>>>>>>>>> 
>>>>>>>>>>> It seems that a few required libraries are not created, but I do not understand why. Any ideas?
>>>>>>>>>>> 
>>>>>>>>>>> Thanks,
>>>>>>>>>>> 
>>>>>>>>>>> John
>>>>>>>>> 
>>>>>>> 
>>>>>>> _______________________________________________
>>>>>>> LLVM Developers mailing list
>>>>>>> llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>
>>>>>>> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev <https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev>
>>>>>> 
>>>>>> _______________________________________________
>>>>>> LLVM Developers mailing list
>>>>>> llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>
>>>>>> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev <https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev>
>>>> 
>>>> _______________________________________________
>>>> LLVM Developers mailing list
>>>> llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>
>>>> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev <https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev>
>>> 
>>> _______________________________________________
>>> LLVM Developers mailing list
>>> llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>
>>> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev <https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev>
>> 
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20190708/e83524da/attachment-0001.html>


More information about the llvm-dev mailing list