<br><br><div class="gmail_quote">On Tue, Feb 5, 2013 at 8:58 PM, Szilárd Páll <span dir="ltr">&lt;<a href="mailto:szilard.pall@cbr.su.se" target="_blank">szilard.pall@cbr.su.se</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div><br></div><div>Note that I&#39;m not talking about some magic override, but simply the ability to go to the flags and remove e.g. the &quot;-ip&quot; icc flag which I know that it can in some cases cause performance regression.<br>
</div></div></div></div></blockquote><div><br>In a fresh release-4-6 build tree, if you use</div><div><br></div><div>CC=icc cmake .. -DGMXC_CFLAGS_RELEASE=&quot;-no-ip&quot;</div><div><br></div><div>you get</div><div><br>
</div><div>cd /nethome/mark/git/another-r46/build-cmake-amd2/src/gmxlib &amp;&amp; /opt/intel/composer_xe_2011_sp1.9.293/bin/intel64/icc  -Dgmx_EXPORTS -DTMPI_SET_AFFINITY -DHAVE_CONFIG_H -DHAVE_RDTSCP -DTMPI_EXPORTS -msse2   -std=gnu99 -Wall   -ip -funroll-all-loops -no-ip -O3 -DNDEBUG -fPIC -I/nethome/mark/git/another-r46/build-cmake-amd2/src -I/nethome/mark/git/another-r46/build-cmake-amd2/include -I/nethome/mark/git/another-r46/include -I/nethome/mark/git/another-r46/src/gmxlib   -openmp -o CMakeFiles/gmx.dir/rmpbc.c.o   -c /nethome/mark/git/another-r46/src/gmxlib/rmpbc.c</div>
<div><br></div><div>which seems to do roughly what you want, from a one-shot, because we have partially segmented the sets of flags GROMACS adds, and prepend them for each run of cmake. In this case, GMXC_CFLAGS_RELEASE is the magic name for the C flags we add for the Release build type. Because we prepend the flags to the initial value (which is initially unset by GROMACS), the value passed in from the command line is there at the end. Then, because GROMACS no longer caches the flags we generate, things can be changed later.</div>
<div><br></div><div>Note that CMake caches that command-line initial value itself, so that the next call to cmake will also result in -no-ip. Then when you want some other set of flags, without touching the cache you can do</div>
<div><br></div><div>CC=icc cmake .. -DGMXC_CFLAGS_RELEASE=&quot;&quot;</div><div><br></div><div>and this reverts to the out-of-the-box functionality (or you could try a new set of flags if you wanted).</div><div><br></div>
<div>Your original example where -m and -x conflict and lead to warnings is irritating, but not a deal-breaker. Using GMX_SKIP_DEFAULT_CFLAGS provides a two-step approach to fixing that. Obviously, make knows how to tell the compiler the right things to do (e.g. src/buildinfo.h has the full CFLAGS in it), so a *make* target that printed out the CFLAGS (whole and/or in parts) might be a useful thing.</div>
<div><br></div><div>There&#39;s currently no way to say &quot;cmake -DUSE_MY_FLAGS_ONLY_IM_SUPER_SMART=-blahblah&quot;. I&#39;m not philosophically opposed to having one, but since compilers normally act on the last of a series of inconsistent flags, the above approaches seem workable if we document them in an advanced section of the installation guide. I think there are probably more not-competent-enough users who&#39;d wrongly try to use it (or use it wrongly) and run into problems than smart-enough users/admins with a real need case.</div>
<div><br></div><div><div>Is there anything you want to be able to do that these kinds of workflows do not support?</div></div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div>In my eyes, reviewing and changing flags is much more important than the consistency of acceleration flags across cmake reruns, that&#39;s why I find it unfortunate that the build system got crippled in an attempt to fix that issue. Of course, I am biased, but putting aside the fact that I will suffer from this build system &quot;behaviour regression&quot;, I think many sysadmins and other advanced users will also be scratching their heads.<br>
</div></div></div></div></blockquote><div><br></div><div>If so, gmx-users must have some filters on it ;-)</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div class="im"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div class="gmail_extra">
<div class="gmail_quote"><div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">
<div><div>
</div>
<div>and adding or overriding should be possible through a single command-line invocation.<br>
<br>
More concretely IMO what we need is:<br>
- A summary printed or at least some read-only advanced variables so that one does not need to run e.g &quot;mdrun -version&quot; to know what flags are used;<br></div></div></div></div></div></div></blockquote></div><div>



I was (and still am) all for the summary. I really liked Teemu&#39;s start of it. But it got cut because of time. Not sure it would be a good idea to print just the flags without having a full summary. I think having read-only variables is very confusing.</div>

</div></div></div></blockquote><div><br></div></div><div>I see your point, but you have yet to reply to my criticism on the fact that <i>it is impossible to at least check what flags are being used</i> and that is a major flaw.<br>
</div></div></div></div></blockquote><div><br></div><div>CMake printing a summary seems awkward to me. If it&#39;s written as a status message, you can&#39;t see it with ccmake, and if it&#39;s written as a warning ccmake users will get in the habit of skipping real warnings. If using cmake, we&#39;d want logic to only print such summary information for the final iteration - not sure if that&#39;s possible/easy enough to do.</div>
<div><br></div><div>However, a make target to print the configuration seems to address most of the issue. It replaces some of the use cases for inspecting config.log one might have with autoconf build systems. Yes, you&#39;d have to run a normal cmake to find out the default (whether by a CMake summary or this make target I propose), then decide how to modify it, then apply it using some of the above mechanisms. If you magically know already what the defaults will be, you can skip the first stage already and jump straight to using GMX_SKIP_DEFAULT_CFLAGS. What do you think?</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div class="im"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><div dir="ltr"><div class="gmail_extra">
<div class="gmail_quote"><div><div>
- An intuitive and consistent way to add/change the flags, what the user wants is simple, but currently requires a set of strange steps: enable skipping GROMACS flags, copy the printed flags, remove cache, re-run cmake with the copied flags.<br>



</div></div></div></div></div></div></blockquote></div><div>No need to remove the cache.</div></div></div></div></blockquote><div><br></div></div><div>Fine, remove that step, but you&#39;ve to add two more instead:<br>- check default CMake flags;<br>

- re-add those when setting flags manually<br></div><div><br></div><div>Again, I would very much appreciate of you or others developers would actually comment on the issue in question: the usability concerns around this rather long, complicated, and error-prone set of steps required just to change a flag -Foo to -Bar.<br>
</div></div></div></div></blockquote><div><br></div><div>I was turned off by the tone of the original email. I imagine that has something to do with the low response rate so far. We&#39;ve all been wrong at some point. Let&#39;s start discussions by asking questions like &quot;is there supposed to be a way for a user to add/replace/find out about a compiler flag?&quot; If there isn&#39;t (or it isn&#39;t a good solution) then discussion can move forward happily to solving the problem. If there is an existing solution, people are going to be happier to mention it if they don&#39;t feel like they have to defend their previous actions, or confront the asker by telling them they were wrong :-)</div>
<div><br></div><div>Mark</div></div>