On Sep 3, 2010, at 6:30 PM, Michael Hertling wrote:
On 09/03/2010 04:13 PM, Belcourt, Kenneth wrote:
On Sep 3, 2010, at 5:07 AM, Eric Noulard wrote:
Curious to know, Why do you want to "some files" files to always be
built debug
in the first place?
For example, certain Lapack routines like slamch and dlamch fail
outright if compiled O2 or higher (don't ask why we build from source
instead using an optimized library). In our code base, we have
several routines that O3 generates bad code on so we can only
optimize
to O2 or lower (it's a compiler bug that we could work around by
rewriting our code but we choose to optimize to a lower level
instead). In other cases, when debugging a numerical problem in our
release code base, one of the simplest ways to find the problem is to
selectively recompile a single library at a time (and main) in debug
until the problem goes away. This helps us narrow down the source of
the numerical differences. These are all related to selectively
compiling something in, say release, while everything else is built
debug. Or, as in my case, selectively building certain files or
libraries in debug with everything else in release.
If your issue just boils down to a faulty optimization by GCC you will
probably get along with the COMPILE_FLAGS source or target properties:
CMake appends them to the compiler flags, and GCC assures that the
last
one seen on the command line takes effect.
Furthermore, in order to build with the highest possible optimization,
you could look at the differences between, say, -O2 and -O3, and find
out the particular switches that are causing a crash. Finally, enable/
disable them specifically for the affected source files or targets via
the COMPILE_FLAGS properties, so your projects can be built with,
e.g.,
-O3 as a whole.
The problem is having to write boatloads of logic for de-optimization
some files like this (Boost.Build syntax).
Disable optimization on a couple of platforms.
obj skit-formats
: SPARSKIT1.1/FORMATS/formats.f
: <toolset>darwin:<optimization>off
<toolset>gcc:<optimization>off
;
whereas for other files, need to de-optimize on all platforms
obj slamch
: SRC/slamch.f
: <toolset>darwin:<optimization>off
<toolset>gcc:<optimization>off
<toolset>intel:<optimization>off
<toolset>pathscale:<optimization>off
<toolset>pgi:<optimization>off
<toolset>sun:<optimization>off
<toolset>vacpp:<optimization>off
;
and for other performance critical files
obj options1
: options1.C
: <toolset>pgi,<variant>debug:<debug-symbols>off
<toolset>pgi,<variant>debug:<optimization>speed
;
and others to work around compiler version or platform specific failures
obj ug3dh8
: ug3dh8.cpp
: <toolset>intel,<toolset-version>10.1,<instruction-
set>itanium:<optimization>off
;
So many different combinations to handle. I'm just looking for as
concise a syntax as possible (well actually initially just want
something that works, which I now have thanks to your help).
-- Noel
_______________________________________________
Powered by www.kitware.com
Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html
Please keep messages on-topic and check the CMake FAQ at:
http://www.cmake.org/Wiki/CMake_FAQ
Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake