View Issue Details [ Jump to Notes ] | [ Print ] | ||||||||
ID | Project | Category | View Status | Date Submitted | Last Update | ||||
0009615 | CMake | CMake | public | 2009-09-29 08:10 | 2009-10-19 18:31 | ||||
Reporter | Martin Apel | ||||||||
Assigned To | Brad King | ||||||||
Priority | normal | Severity | minor | Reproducibility | always | ||||
Status | closed | Resolution | fixed | ||||||
Platform | OS | OS Version | |||||||
Product Version | CMake-2-8 | ||||||||
Target Version | Fixed in Version | ||||||||
Summary | 0009615: RC1 uses xiar to link Fortran libraries unnecessarily, which causes long link times | ||||||||
Description | Starting with CMake 2.8, CMake uses Intel's xiar to link static Fortran libraries, even if no ipo-option is used. This causes long link times at least on Linux. In my case the generation of a static library containing several thousand objects took about one minute instead of a few seconds with CMake 2.6. I think CMake should only use xiar, if the ipo option is specified and use ar otherwise. | ||||||||
Tags | No tags attached. | ||||||||
Attached Files | |||||||||
Relationships | |
Relationships |
Notes | |
(0017817) Brad King (manager) 2009-09-29 08:52 |
A problem is how to know when the -ipo option is present. It could end up in the compiler flags through a whole bunch of places, and it will not be reliable to detect it. Instead we should have some common way to enable both -ipo and xair together. I still need to think about how. |
(0017859) Brad King (manager) 2009-10-01 08:42 |
For reference, here is the thread of discussion that caused C and C++ to start using "xiar" in the first place: http://www.cmake.org/pipermail/cmake/2008-April/021224.html [^] Unfortunately they reached the conclusion to use "xiar" unconditionally because the original poster happened to be using "-ipo" but didn't mention it except in passing. No one at the time realized the importance. |
(0017878) Brad King (manager) 2009-10-01 14:37 |
Also for reference, here is your thread on the mailing list that started this issue: http://www.cmake.org/pipermail/cmake/2009-September/032275.html [^] |
(0017909) Brad King (manager) 2009-10-02 13:54 |
The commits below create an explicit INTERPROCEDURAL_OPTIMIZATION target and directory property to enable -ipo/xiar. Centralize language flag addition for Makefiles /cvsroot/CMake/CMake/Source/cmMakefileExecutableTargetGenerator.cxx,v <-- Source/cmMakefileExecutableTargetGenerator.cxx new revision: 1.65; previous revision: 1.64 /cvsroot/CMake/CMake/Source/cmMakefileLibraryTargetGenerator.cxx,v <-- Source/cmMakefileLibraryTargetGenerator.cxx new revision: 1.81; previous revision: 1.80 /cvsroot/CMake/CMake/Source/cmMakefileTargetGenerator.cxx,v <-- Source/cmMakefileTargetGenerator.cxx new revision: 1.126; previous revision: 1.125 /cvsroot/CMake/CMake/Source/cmMakefileTargetGenerator.h,v <-- Source/cmMakefileTargetGenerator.h new revision: 1.34; previous revision: 1.33 Introduce "build feature" lookup framework /cvsroot/CMake/CMake/Source/cmLocalGenerator.cxx,v <-- Source/cmLocalGenerator.cxx new revision: 1.319; previous revision: 1.318 /cvsroot/CMake/CMake/Source/cmLocalGenerator.h,v <-- Source/cmLocalGenerator.h new revision: 1.119; previous revision: 1.118 /cvsroot/CMake/CMake/Source/cmMakefile.cxx,v <-- Source/cmMakefile.cxx new revision: 1.524; previous revision: 1.523 /cvsroot/CMake/CMake/Source/cmMakefile.h,v <-- Source/cmMakefile.h new revision: 1.262; previous revision: 1.261 /cvsroot/CMake/CMake/Source/cmMakefileTargetGenerator.cxx,v <-- Source/cmMakefileTargetGenerator.cxx new revision: 1.127; previous revision: 1.126 /cvsroot/CMake/CMake/Source/cmMakefileTargetGenerator.h,v <-- Source/cmMakefileTargetGenerator.h new revision: 1.35; previous revision: 1.34 /cvsroot/CMake/CMake/Source/cmTarget.cxx,v <-- Source/cmTarget.cxx new revision: 1.274; previous revision: 1.273 /cvsroot/CMake/CMake/Source/cmTarget.h,v <-- Source/cmTarget.h new revision: 1.144; previous revision: 1.143 Create INTERPROCEDURAL_OPTIMIZATION build feature /cvsroot/CMake/CMake/Modules/Platform/Linux-Intel-C.cmake,v <-- Modules/Platform/Linux-Intel-C.cmake new revision: 1.5; previous revision: 1.4 /cvsroot/CMake/CMake/Modules/Platform/Linux-Intel-CXX.cmake,v <-- Modules/Platform/Linux-Intel-CXX.cmake new revision: 1.7; previous revision: 1.6 /cvsroot/CMake/CMake/Modules/Platform/Linux-Intel-Fortran.cmake,v <-- Modules/Platform/Linux-Intel-Fortran.cmake new revision: 1.4; previous revision: 1.3 /cvsroot/CMake/CMake/Source/cmMakefile.cxx,v <-- Source/cmMakefile.cxx new revision: 1.525; previous revision: 1.524 /cvsroot/CMake/CMake/Source/cmMakefileLibraryTargetGenerator.cxx,v <-- Source/cmMakefileLibraryTargetGenerator.cxx new revision: 1.82; previous revision: 1.81 /cvsroot/CMake/CMake/Source/cmMakefileTargetGenerator.cxx,v <-- Source/cmMakefileTargetGenerator.cxx new revision: 1.128; previous revision: 1.127 /cvsroot/CMake/CMake/Source/cmTarget.cxx,v <-- Source/cmTarget.cxx new revision: 1.275; previous revision: 1.274 Test INTERPROCEDURAL_OPTIMIZATION build feature /cvsroot/CMake/CMake/Tests/CMakeLists.txt,v <-- Tests/CMakeLists.txt new revision: 1.120; previous revision: 1.119 /cvsroot/CMake/CMake/Tests/IPO/CMakeLists.txt,v <-- Tests/IPO/CMakeLists.txt initial revision: 1.1 |
(0018022) Alex Neundorf (developer) 2009-10-08 06:22 |
I just hit that issue too. We have set(CMAKE_CXX_FLAGS_RELEASE "-wd654 -wd1572 -O3 -DNDEBUG -ipo" ) for some part of the project, and this was working with cvs HEAD before that last change. Linking with xiar and the object files compiled with these flags took a long time. In another directory we don't have -ipo as part of the compile flags, there also xiar was used for linking, and there linking was fast. Now I updated cmake, and our libs didn't link anymore, because the static library which was created (now using ar) didn't have any symbols anymore. Setting the new directory property makes it work again, but I don't see the advantage of not using xiar always (without -ipo it's also fast). Alex |
(0018023) Martin Apel (reporter) 2009-10-08 08:21 |
We definitively do not use IPO currently, but it was still very slow, when xiar has been used. But this is for a library with more than 6000 objects, so this may be the difference. For us it's essential to use ar instead of xiar, because otherwise people will complain about long build times. Martin |
(0018024) Brad King (manager) 2009-10-08 08:23 |
Okay, one of you says that xiar takes forever without -ipo, and one of you says that xiar is fast without -ipo. Which is it? Is there really that much difference between the Fortran and C++ versions? This change did break compatibility, but only for one compiler with one flag on one platform. It was by far the simplest way to solve this problem. It also finally introduces the first real "named-feature ==> flag" mapping. Just set the INTERPROCEDURAL_OPTIMIZATION directory or target property and you get -ipo and xiar back. |
Notes |
Issue History | |||
Date Modified | Username | Field | Change |
2009-09-29 08:10 | Martin Apel | New Issue | |
2009-09-29 08:48 | Brad King | Status | new => assigned |
2009-09-29 08:48 | Brad King | Assigned To | => Brad King |
2009-09-29 08:52 | Brad King | Note Added: 0017817 | |
2009-10-01 08:42 | Brad King | Note Added: 0017859 | |
2009-10-01 14:37 | Brad King | Note Added: 0017878 | |
2009-10-02 13:54 | Brad King | Note Added: 0017909 | |
2009-10-02 13:54 | Brad King | Status | assigned => closed |
2009-10-02 13:54 | Brad King | Resolution | open => fixed |
2009-10-08 06:22 | Alex Neundorf | Note Added: 0018022 | |
2009-10-08 06:22 | Alex Neundorf | Status | closed => feedback |
2009-10-08 06:22 | Alex Neundorf | Resolution | fixed => reopened |
2009-10-08 08:21 | Martin Apel | Note Added: 0018023 | |
2009-10-08 08:23 | Brad King | Note Added: 0018024 | |
2009-10-19 18:31 | Brad King | Status | feedback => closed |
2009-10-19 18:31 | Brad King | Resolution | reopened => fixed |
Issue History |
Copyright © 2000 - 2018 MantisBT Team |