[LLVMdev] [RFC] Late May Update: Progress report on CMake build system's ability to replace autoconf

Chris Bieneman beanz at apple.com
Fri May 29 10:48:29 PDT 2015


To answer Johannes’ questions:

> Do they really allways put them into Release/bin or rather $<CONFIG>/bin?
> 
Yes. When generating multi-configuration build files (Xcode, Visual Studio, Eclipse…) the binaries are always built to $CMAKE_BINARY_DIR/$CMAKE_BUILD_TYPE/bin/…

For multi-configuration generators I hard-code the type as Release because the whole point of this patch is to use the Release tablegen.

> Is the Release tblgen even built when you build in Debug mode? Otherwise this introduces the need to build Release before Debug.
> 

That is exactly what the LLVM_OPTIMIZED_TABLEGEN flag does. It is kinda hacky, but it can dramatically reduce build times. There is probably a way to make this work better for multi-config builds, but the general idea is that when you enable the flag CMake generates two configured build directories - one for what you wanted to use, and one for CMake to use to generate an optimized tablegen. It then hooks up the dependencies so that the optimized tablegen is used in place of an unoptimized one.

The speedup can be significant. From my experience I see the best results using the Ninja generator, but once I land this last patch it will, hopefully, work with all generators.

-Chris

> On May 29, 2015, at 2:17 AM, Yaron Keren <yaron.keren at gmail.com> wrote:
> 
> Yes, that's the idea, when you  -DLLVM_OPTIMIZED_TABLEGEN=ON tblgen is built in Release in addition to whatever /property:Configuration= is.
> 
> 
> 2015-05-29 10:03 GMT+03:00 Mueller-Roemer, Johannes Sebastian <Johannes.Sebastian.Mueller-Roemer at igd.fraunhofer.de <mailto:Johannes.Sebastian.Mueller-Roemer at igd.fraunhofer.de>>:
> That it’s faster is no surprise. Is the Release tblgen even built when you build in Debug mode? Otherwise this introduces the need to build Release before Debug.
> 
>  
> 
> --
> 
> Johannes S. Mueller-Roemer, MSc
> 
> Wiss. Mitarbeiter - Interactive Engineering Technologies (IET)
> 
>  
> 
> Fraunhofer-Institut für Graphische Datenverarbeitung IGD
> 
> Fraunhoferstr. 5  |  64283 Darmstadt  |  Germany
> 
> Tel +49 6151 155-606  |  Fax +49 6151 155-139
> 
> johannes.mueller-roemer at igd.fraunhofer.de <mailto:johannes.mueller-roemer at igd.fraunhofer.de>  |  www.igd.fraunhofer.de <http://www.igd.fraunhofer.de/>
>  
> 
> From: Yaron Keren [mailto:yaron.keren at gmail.com <mailto:yaron.keren at gmail.com>] 
> Sent: Friday, May 29, 2015 08:59
> To: Mueller-Roemer, Johannes Sebastian
> Cc: Chris Bieneman; LLVM Developers Mailing List
> 
> 
> Subject: Re: [LLVMdev] [RFC] Late May Update: Progress report on CMake build system's ability to replace autoconf
> 
>  
> 
> Both Release and $CONFIG tblgen are built but the Release one is always used. At least with Visual C++ the Release tblgen is much faster than the Debug one.
> 
>  
> 
>  
> 
> 2015-05-29 9:37 GMT+03:00 Mueller-Roemer, Johannes Sebastian <Johannes.Sebastian.Mueller-Roemer at igd.fraunhofer.de <mailto:Johannes.Sebastian.Mueller-Roemer at igd.fraunhofer.de>>:
> 
> Do they really allways put them into Release/bin or rather $<CONFIG>/bin?
> 
>  
> 
> --
> 
> Johannes S. Mueller-Roemer, MSc
> 
> Wiss. Mitarbeiter - Interactive Engineering Technologies (IET)
> 
>  
> 
> Fraunhofer-Institut für Graphische Datenverarbeitung IGD
> 
> Fraunhoferstr. 5  |  64283 Darmstadt  |  Germany
> 
> Tel +49 6151 155-606  |  Fax +49 6151 155-139
> 
> johannes.mueller-roemer at igd.fraunhofer.de <mailto:johannes.mueller-roemer at igd.fraunhofer.de>  |  www.igd.fraunhofer.de <http://www.igd.fraunhofer.de/>
>  
> 
> From: llvmdev-bounces at cs.uiuc.edu <mailto:llvmdev-bounces at cs.uiuc.edu> [mailto:llvmdev-bounces at cs.uiuc.edu <mailto:llvmdev-bounces at cs.uiuc.edu>] On Behalf Of Chris Bieneman
> Sent: Thursday, May 28, 2015 22:36
> To: Yaron Keren
> Cc: LLVM Developers Mailing List
> Subject: Re: [LLVMdev] [RFC] Late May Update: Progress report on CMake build system's ability to replace autoconf
> 
>  
> 
> I sent out a patch for review.
> 
>  
> 
> http://reviews.llvm.org/D10102 <https://urldefense.proofpoint.com/v2/url?u=http-3A__reviews.llvm.org_D10102&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=Mfk2qtn1LTDThVkh6-oGglNfMADXfJdty4_bhmuhMHA&m=CnMJsu0f0vSR1CHLloYJapdWWCpu9GRn3nQydr1tcoc&s=8zJYqD7TktfFqlUjdI8Gcv-ULAGh72ZOOZ9KumO1PZo&e=>
>  
> 
> -Chris
> 
>  
> 
> On May 28, 2015, at 9:48 AM, Yaron Keren <yaron.keren at gmail.com <mailto:yaron.keren at gmail.com>> wrote:
> 
>  
> 
> Thanks!
> 
>  
> 
> 2015-05-28 18:56 GMT+03:00 Chris Bieneman <beanz at apple.com <mailto:beanz at apple.com>>:
> 
>  
> 
> On May 28, 2015, at 8:37 AM, Yaron Keren <yaron.keren at gmail.com <mailto:yaron.keren at gmail.com>> wrote:
> 
>  
> 
> Probably not a blocker for replacing autoconf, while at it:
> 
> Bug 23468 - LLVM_OPTIMIZED_TABLEGEN does not work with Visual Studio.
> 
> It makes the tablegenning really slow.
> 
>  
> 
> This is actually a feature of the CMake build system that the autoconf one doesn’t have, so this is not related to replacing autoconf.
> 
>  
> 
> That said, I’ll try to address this soon.
> 
>  
> 
> -Chris
> 
>  
> 
>  
> 
>  
> 
> 2015-05-28 18:22 GMT+03:00 Chris Bieneman <beanz at apple.com <mailto:beanz at apple.com>>:
> 
> Hi all,
> 
> Time for another update on the status of the CMake build system.
> 
> Completed:
> * Bug 18496 - [cmake] .S assembly files not compiled by cmake in libclang_rt.ARCH
> * Bug 22725 - lldb build with cmake fails with "Program error: Invalid parameters entered, -h for help. "
> * Update GettingStarted to prefer CMake
> 
> Still Outstanding:
> 
> * Bug 14109 - CMake build for compiler-rt should use just-built clang
>  - No Update: Still some small issues to resolve.
> 
> * Bug 19462 - Use the INSTALL(EXPORT ...) to export CMake definitions
>  - I commented in the review for this today (http://reviews.llvm.org/D7623 <https://urldefense.proofpoint.com/v2/url?u=http-3A__reviews.llvm.org_D7623&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=Mfk2qtn1LTDThVkh6-oGglNfMADXfJdty4_bhmuhMHA&m=CnMJsu0f0vSR1CHLloYJapdWWCpu9GRn3nQydr1tcoc&s=sUUTJf37gKTcDMx58mdbge8nZhoWhIh5vIfTXTa8ibI&e=>). I think the patches I have are good to land, but Stephen Kelly made some other suggestions in the bug we should consider separately.
> 
> * Bug 19875 - libraries and executables need different rpaths
>  - No Update: Still outstanding, I don't think this is a blocker.
> 
> * Bug 21561 - Update release scripts to use CMake
>  - No Update: Still outstanding and blocking removal of autoconf
> 
> * Bug 21562 - Add a CMake equivalent for make/platform/clang_darwin.mk <https://urldefense.proofpoint.com/v2/url?u=http-3A__clang-5Fdarwin.mk_&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=Mfk2qtn1LTDThVkh6-oGglNfMADXfJdty4_bhmuhMHA&m=CnMJsu0f0vSR1CHLloYJapdWWCpu9GRn3nQydr1tcoc&s=wt0UGa6r8x3w45AVGzPGHAjLVWguk3nXjPFh74rdxxM&e=> in compiler_rt
>  - I've looked at this a bit on and off. It is unfortunately a hard problem. I think it would be easier if CMake had better support for setting clang's sysroot and arch flags. To that end I've filed a bug against CMake (http://www.cmake.org/Bug/view.php?id=15591 <https://urldefense.proofpoint.com/v2/url?u=http-3A__www.cmake.org_Bug_view.php-3Fid-3D15591&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=Mfk2qtn1LTDThVkh6-oGglNfMADXfJdty4_bhmuhMHA&m=CnMJsu0f0vSR1CHLloYJapdWWCpu9GRn3nQydr1tcoc&s=umuCvLy-UFJkds60slnEM9ROl2OiO4qvtQbhF7MhIF8&e=>).
> 
> * Bug 21568 - Cannot add rpath
>  - No Update: Not a blocker.
> 
> Other issues not tracked by bugs:
> 
> * FreeBSD seemed to have problems with CMake identifying itself as amd64 causing x86_64 tests to fail
> * Migrating buildbots
> * We need to make sure libc++ works properly on Darwin
> * Put together a “cheat sheet” document for transitioning
>  - If you have an autoconf workflow you’d like to see in the cheat sheet please send your commands my way and I‘ll assemble the cheat sheet.
> 
> If there is anything I’m missing please let me know. Thanks,
> 
> Thanks,
> -Chris
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu <mailto:LLVMdev at cs.uiuc.edu>         http://llvm.cs.uiuc.edu <http://llvm.cs.uiuc.edu/>
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev <http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev>
>  
> 
>  
> 
>  
> 
>  
> 
> 
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu <mailto:LLVMdev at cs.uiuc.edu>         http://llvm.cs.uiuc.edu <http://llvm.cs.uiuc.edu/>
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev <http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev>
>  
> 
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150529/69bbb29b/attachment.html>


More information about the llvm-dev mailing list