Re: [CMake] FYI - From Ninja-build mailing list - Fwd: Proposal: restat rules

2011-10-06 Thread Arnaud Gelas

Hi Bill,

Here are some timing, I made for ITK to compare ninja vs make (made  
last month). See results below


The difference is not much, especially when you realized that none of  
the data have been downloaded, and I am not sure that at the end we  
get the same binary tree...


Encouraging matter of fact, it worked on ITK...

my 2 cts,
Arnaud




Starting from scratch

$ time make -j12
real18m20.479s
user205m51.536s
sys8m21.319s

$ time ninja -j12
real18m1.246s
user205m23.438s
sys7m26.392

adding one extra space in itk::Image

$ time make -j12
real15m8.004s
user166m45.025s
sys6m13.991s

$ time ninja -j12
real14m54.776s
user166m41.377s
sys5m31.129s





--
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


Re: [CMake] FYI - From Ninja-build mailing list - Fwd: Proposal: restat rules

2011-10-06 Thread Bill Hoffman

On 10/6/2011 12:07 PM, Arnaud Gelas wrote:

Hi Bill,

Here are some timing, I made for ITK to compare ninja vs make (made last
month). See results below

The difference is not much, especially when you realized that none of
the data have been downloaded, and I am not sure that at the end we get
the same binary tree...

Encouraging matter of fact, it worked on ITK...

my 2 cts,
Arnaud


What happens if you just do a build where nothing builds?


-Bill
--
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


Re: [CMake] FYI - From Ninja-build mailing list - Fwd: Proposal: restat rules

2011-10-06 Thread Peter Kümmel


OK, so I think this project is way too small for this test.  There is
some fixed overhead in the process here, and we are seeing it.  We are
talking about .5 seconds difference to check a whole build system.  If
you want to do tests like this, you need a much bigger project.  I am
sure that CMake will not be 50% slower for a larger project where we are
not comparing .5 seconds to 1.1 seconds or .1 seconds.



I don't know a bigger project which supports qmake and cmake,
but I tried VTK:

Time to check when nothing to build:

 ninja(ms)   make(ms)
-j1   ~2503600
-j2   ~2502100
-j4   ~2501700

Peter
--
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


Re: [CMake] FYI - From Ninja-build mailing list - Fwd: Proposal: restat rules

2011-10-06 Thread Peter Kümmel

On 06.10.2011 21:14, Peter Kümmel wrote:


OK, so I think this project is way too small for this test.  There is
some fixed overhead in the process here, and we are seeing it.  We are
talking about .5 seconds difference to check a whole build system.  If
you want to do tests like this, you need a much bigger project.  I am
sure that CMake will not be 50% slower for a larger project where we are
not comparing .5 seconds to 1.1 seconds or .1 seconds.



I don't know a bigger project which supports qmake and cmake,


Another idea is to down-cock the system: My  system runs in a VirtualBox,
and I simply don't allow 100% CPU usage:

KST:
 qmake   cmake   ninja
-j1   14s 45s 3s
-j2   14s 27s 3s


VTK:

 qmake   cmake   ninja
-j1   130s8s
-j4   30s 8s

Peter
--
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


Re: [CMake] FYI - From Ninja-build mailing list - Fwd: Proposal: restat rules

2011-10-05 Thread Peter Kümmel

And here some numbers to compare it with Qt's qmake.
I've used this project: http://kst-plot.kde.org/
which supports qmake and cmake.

Running make/ninja on a fresh compiled project
with warm caches (in seconds):

qmake  cmake Ninja
  Makefiles  makefiles

-j10.5-0.8   1.6-1.9   0.11-0.14
-j20.6-0.8   1.3-1.4   0.11-0.13
-j40.6-0.7   1.1-1.4   0.10-0.13


Summary:
- Ninja is the fastest
- cmake Makefiles are really slow
- parallel jobs doesn't help much in this special case

Peter
--
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


Re: [CMake] FYI - From Ninja-build mailing list - Fwd: Proposal: restat rules

2011-10-05 Thread Alexander Neundorf
On Wednesday 05 October 2011, Peter Kümmel wrote:
 And here some numbers to compare it with Qt's qmake.
 I've used this project: http://kst-plot.kde.org/
 which supports qmake and cmake.
 
 Running make/ninja on a fresh compiled project
 with warm caches (in seconds):
 
  qmake  cmake Ninja
Makefiles  makefiles
 
 -j10.5-0.8   1.6-1.9   0.11-0.14
 -j20.6-0.8   1.3-1.4   0.11-0.13
 -j40.6-0.7   1.1-1.4   0.10-0.13
 
 
 Summary:
  - Ninja is the fastest
  - cmake Makefiles are really slow
  - parallel jobs doesn't help much in this special case


and:
- qmake makefiles don't have complete dependencies

Seriously, if cmakes Makefiles are slower, I am very sure this is because they 
have complete dependencies.

Alex
--
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


Re: [CMake] FYI - From Ninja-build mailing list - Fwd: Proposal: restat rules

2011-10-05 Thread Peter Kümmel

On 05.10.2011 20:38, Alexander Neundorf wrote:

On Wednesday 05 October 2011, Peter Kümmel wrote:

And here some numbers to compare it with Qt's qmake.
I've used this project: http://kst-plot.kde.org/
which supports qmake and cmake.

Running make/ninja on a fresh compiled project
with warm caches (in seconds):

  qmake  cmake Ninja
Makefiles  makefiles

-j10.5-0.8   1.6-1.9   0.11-0.14
-j20.6-0.8   1.3-1.4   0.11-0.13
-j40.6-0.7   1.1-1.4   0.10-0.13


Summary:
  - Ninja is the fastest
  - cmake Makefiles are really slow
  - parallel jobs doesn't help much in this special case



and:
- qmake makefiles don't have complete dependencies



OK, qmake Makefiles are not complete.


Seriously, if cmakes Makefiles are slower, I am very sure this is because they
have complete dependencies.



Is there a way to run cmake's Makefiles in the (faster) qmake-mode ?

Peter


Alex
--
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


--
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


Re: [CMake] FYI - From Ninja-build mailing list - Fwd: Proposal: restat rules

2011-10-05 Thread Peter Kümmel

On 05.10.2011 21:45, Bill Hoffman wrote:



I just tried this on a machine here.

svn co svn://anonsvn.kde.org/home/kde/branches/work/kst/portto4/kst

CMake build:
make -j8

real3m19.131s
user16m31.866s
sys 3m25.289s

Qmake build:
real2m55.761s
user15m15.585s
sys 1m58.203s
mp/../viewitem.h:92: warning: unused parameter 'f'
tmp/../viewitem.h:92: warning: unused parameter 'c'
rm -f libkst2app.so.1.0.0 libkst2app.so libkst2app.so.1 libkst2app.so.1.0
linking ../../build/lib/libkst2app.so.1.0.0
/usr/bin/ld: cannot find -lGL
collect2: ld returned 1 exit status
make[1]: *** [../../build/lib/libkst2app.so.1.0.0] Error 1
make[1]: Leaving directory `/home/hoffman/kst-qmake/src/libkstapp'
make: *** [sub-src-libkstapp-make_default-ordered] Error 2


So, for me the qmake build had a total failure after almost taking as
long to build.  So, CMake wins because the qmake build never actually
finishes... :)

BTW, This is an 8 core machine.  What are you building on to get .5
minute builds?  Something is odd here...



4 real cores and hyper threading with Ubuntu 11.10 and GCC 4.6: 1m15.467s
But the build times aren't that interesting.

The .5 you mentioned where .5 seconds which it takes to run make on an
already build project:

$ time make
[ 19%] Built target kst2core
[ 33%] Built target kst2math
[ 43%] Built target kst2widgets
[ 90%] Built target kst2app
[ 90%] Built target kst2_filters_differentiation
[ 92%] Built target kst2_datasource_ascii
[ 92%] Built target kst2_datasource_qimagesource
[ 93%] Built target kst2_datasource_sampledatasource
[ 93%] Built target kst2_dataobject_bin
[ 94%] Built target kst2_dataobject_linefit
[ 95%] Built target kst2_dataobject_chop
[ 96%] Built target kst2_dataobject_phase
[ 96%] Built target kst2_dataobject_lockin
[ 97%] Built target kst2_dataobject_statistics
[ 97%] Built target kst2_dataobject_shift
[ 97%] Built target kst2_dataobject_syncbin
[ 98%] Built target kst2_dataobject_differentiation
[ 98%] Built target kst2_dataobject_crossspectrum
[ 98%] Built target kst2_dataobject_effectivebandwidth
[ 99%] Built target kst2_dataobject_genericfilter
[ 99%] Built target kst2_filters_cumulativesum
[100%] Built target kst2_filters_despike
[100%] Built target kst2

real0m1.772s
user0m1.116s
sys 0m0.372s
$

How is this called 'clean run'?
I hope this measures best the pure make-system speed.

Peter


-Bill




--
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


--
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


Re: [CMake] FYI - From Ninja-build mailing list - Fwd: Proposal: restat rules

2011-10-01 Thread Peter Kümmel

On 30.09.2011 19:16, Eric Noulard wrote:

2011/9/30 Alexander Neundorfa.neundorf-w...@gmx.net:

Summary:

  builddryrebuild
ninja   1m15.8   0m0.10m07.3
make1m19.4   0m1.40m07.9
auto3m19.9   0m2.10m13.0

So only the dry run shows a huge speedup (10-20 times faster)


Not to question your numbers, but shouldn't the difference of the dryrun
(1.3s) also be present in the rebuild ?


'rebuild' is the time after a 'touch':

   touch ../trunk/src/LyX.cpp
   time ninja

means compiling one file plus the time for linking.
Yes, makes not much sense to measure this time here because
compiling and linking is independent of the ninja/make.



I mean, this should be the time ninja is faster in checking whether any file
changed, and in the rebuild case it has to do that too, and additionally build
one file ?

How often did you measure this, just once or multiple times ?




Cache was warm and the time was a typical one of multiple runs.


I was about to comment about this too.
If you do test ninja first on a pristine source tree and then
make then make will certainly take advantage of the VFS caching almost
all source file access.

May be it would necessary to untar the source (in different temp dir )
before each test sets.
but may you already did this.



I did the opposite, measured with a 'warm' cache.

Peter


Or may be I should just try myself :-]



--
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


Re: [CMake] FYI - From Ninja-build mailing list - Fwd: Proposal: restat rules

2011-09-30 Thread Alexander Neundorf
On Friday 30 September 2011, Peter Kuemmel wrote:
  Tested cmake/ninja with Blender's cmake files, works well, and fast!
  Single file rebuild is 0.97 sec, same on makefiles was 3.7sec.
 
 I also have some numbers:
 
 
 Building LyX (lyx.org, 676 files):
 
 LyX has autotools and cmake as build system.
 
 
 
 * cmake generated ninja files:
 
 1. build
 cmake -G Ninja
 time ninja
 real 1m15.862s
 
 2. dry run
 ninja
 real 0m0.113s
 
 3. rebuild one file
 touch ../trunk/src/LyX.cpp
 time ninja
 real 0m7.340s
 
 
 
 * cmake generated Makefiles:
 
 1. build
 cmake ../trunk
 time make -j9
 real 1m19.471s
 
 2. dry run
 time make -j9
 real 0m1.457s
 
 3. rebuild one file
 touch ../trunk/src/LyX.cpp
 time make -j9
 real 0m7.952s
 
 
 
 * autotools:
 
 1. build
 ./configure --enable-build-type=dev (maybe different to cmake
 configuration) time make -j9
 real 3m19.988s
 
 2. dry run
 time make -j9
 real 0m2.165s
 
 3. rebuild one file
 touch ../trunk/src/LyX.cpp
 time make -j9
 real 0m13.087s
 
 
 
 
 Summary:
 
  builddryrebuild
 ninja   1m15.8   0m0.10m07.3
 make1m19.4   0m1.40m07.9
 auto3m19.9   0m2.10m13.0
 
 So only the dry run shows a huge speedup (10-20 times faster)

Not to question your numbers, but shouldn't the difference of the dryrun 
(1.3s) also be present in the rebuild ?
I mean, this should be the time ninja is faster in checking whether any file 
changed, and in the rebuild case it has to do that too, and additionally build 
one file ?

How often did you measure this, just once or multiple times ?

Alex
--

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


Re: [CMake] FYI - From Ninja-build mailing list - Fwd: Proposal: restat rules

2011-09-30 Thread Eric Noulard
2011/9/30 Alexander Neundorf a.neundorf-w...@gmx.net:
 Summary:

          build    dry    rebuild
 ninja   1m15.8   0m0.1    0m07.3
 make    1m19.4   0m1.4    0m07.9
 auto    3m19.9   0m2.1    0m13.0

 So only the dry run shows a huge speedup (10-20 times faster)

 Not to question your numbers, but shouldn't the difference of the dryrun
 (1.3s) also be present in the rebuild ?
 I mean, this should be the time ninja is faster in checking whether any file
 changed, and in the rebuild case it has to do that too, and additionally build
 one file ?

 How often did you measure this, just once or multiple times ?

I was about to comment about this too.
If you do test ninja first on a pristine source tree and then
make then make will certainly take advantage of the VFS caching almost
all source file access.

May be it would necessary to untar the source (in different temp dir )
before each test sets.
but may you already did this.

Or may be I should just try myself :-]


-- 
Erk
Membre de l'April - « promouvoir et défendre le logiciel libre » -
http://www.april.org
--
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


Re: [CMake] FYI - From Ninja-build mailing list - Fwd: Proposal: restat rules

2011-09-29 Thread Peter Kuemmel


 Tested cmake/ninja with Blender's cmake files, works well, and fast!
 Single file rebuild is 0.97 sec, same on makefiles was 3.7sec.
 

I also have some numbers:


Building LyX (lyx.org, 676 files):

LyX has autotools and cmake as build system.



* cmake generated ninja files:

1. build
cmake -G Ninja
time ninja
real 1m15.862s

2. dry run
ninja
real 0m0.113s

3. rebuild one file
touch ../trunk/src/LyX.cpp 
time ninja
real 0m7.340s



* cmake generated Makefiles:

1. build
cmake ../trunk
time make -j9
real 1m19.471s

2. dry run
time make -j9
real 0m1.457s

3. rebuild one file
touch ../trunk/src/LyX.cpp 
time make -j9
real 0m7.952s



* autotools:

1. build 
./configure --enable-build-type=dev (maybe different to cmake configuration)
time make -j9
real 3m19.988s

2. dry run
time make -j9
real 0m2.165s

3. rebuild one file
touch ../trunk/src/LyX.cpp 
time make -j9
real 0m13.087s




Summary:

 builddryrebuild
ninja   1m15.8   0m0.10m07.3
make1m19.4   0m1.40m07.9
auto3m19.9   0m2.10m13.0

So only the dry run shows a huge speedup (10-20 times faster)




---
And with a bigger project (clang, 1703 files):

builddry   
ninja  8m29.7   0m0.16
make   7m52.9   0m1.42

Also here the dry run is much faster.



Used sources:
cmake: git://github.com/pcc/CMake/tree/ninja-generator
ninja: git://github.com/pcc/ninja.git/tree/outputs-ready

-- 
NEU: FreePhone - 0ct/min Handyspartarif mit Geld-zurück-Garantie!   
Jetzt informieren: http://www.gmx.net/de/go/freephone
--

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

Re: [CMake] FYI - From Ninja-build mailing list - Fwd: Proposal: restat rules

2011-09-15 Thread Bill Hoffman

On 9/14/2011 5:37 AM, Clifford Yapp wrote:

Looks like that's working.  Running ninja again, I'm seeing another issue:

BRL-CAD uses dependency assignment to make sure our build time delta
calculator is the last target to be built (and hence actually times the
build).  With ninja, it doesn't seem to be respecting this, but instead
tries to run the delta target immediately.  Do custom targets respect
dependency information?



I would think the best think to do would be to focus on the CMake tests. 
 If these are not all passing, then there is a good chance any large 
project will fail at some point.  If all the tests are passing, I would 
think most anything could be built.



-Bill
___
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


Re: [CMake] FYI - From Ninja-build mailing list - Fwd: Proposal: restat rules

2011-09-15 Thread Andreas Mohr
Hi,

On Wed, Sep 14, 2011 at 12:00:05PM -0400, cmake-requ...@cmake.org wrote:
 Date: Wed, 14 Sep 2011 05:37:20 -0400
 From: Clifford Yapp cliffy...@gmail.com
 
 Looks like that's working.  Running ninja again, I'm seeing another issue:
 
 BRL-CAD uses dependency assignment to make sure our build time delta
 calculator is the last target to be built (and hence actually times the
 build).  With ninja, it doesn't seem to be respecting this, but instead
 tries to run the delta target immediately.  Do custom targets respect
 dependency information?

I'm seeing the same thing here, and I think I semi-nailed it.

I've got:

function(scm_sos_pull_db_tree _pull_target _scm_dir)
  if(NOT TARGET scm_sos_pull_db_tree)
# this crap does not work the way it should...
#set(scm_spec ${scm_repo_prefix}/${_scm_dir})
set(scm_spec ${scm_repo_prefix})

#set(stamp_file_tree 
${sos_wrapper_stamps_dir}/scm_sos_pull_db_tree_${_pull_target}.stamp)
set(stamp_file_tree ${sos_wrapper_stamps_dir}/scm_sos_pull_db_tree.stamp)
set(db_tree_output ${sos_wrapper_db_file_pathname})
add_custom_command(OUTPUT ${db_tree_output}
  COMMAND ${sos_wrapper_cmdline_constant_part} -project ${scm_spec} 
-command GetProjectTree
  COMMAND ${CMAKE_COMMAND} -E touch ${stamp_file_tree}
  # Cannot specify the full ${scm_sos_dependencies} list here
  # (we're creating the very database file that it lists).
  # And we should avoid adding ${sos_wrapper_script} as a dependency
  # here, since a simple update of that script most certainly doesn't
  # justify doing the _AWFULLY_ lengthy operation of pulling
  # the entire database anew. All other SCM targets _should_ properly 
depend on
  # SosWrap.bash, however, since they're much cheaper...
  DEPENDS ${MASTER_SCM_HAS_BEEN_UPDATED}
  COMMENT fetching SOS SCM database tree for ${scm_spec}
  VERBATIM
)
add_custom_target(scm_sos_pull_db_tree VERBATIM DEPENDS ${db_tree_output})
add_dependencies(scm_sos_pull_db_tree scm_sos_setup)
  endif(NOT TARGET scm_sos_pull_db_tree)
  # add a dependency to make sure that before pulling a file/project we fetch 
its project tree
  add_dependencies(${_pull_target} scm_sos_pull_db_tree)
endfunction(scm_sos_pull_db_tree _pull_target _scm_dir)


So you can see that I'm clearly adding a dependency of target 
scm_sos_pull_db_tree on the
target scm_sos_setup (which is the one to make sure that the SosWrap.bash script
is properly prepared before continuing).


However, what I'm ending up with is:



# Phony custom command for CMakeFiles/scm_sos_pull_db_tree
build CMakeFiles/scm_sos_pull_db_tree: phony 
_SCM/sos/database/servers/SERVER/DATABASE.sos
# Utility command for scm_sos_pull_db_tree
build scm_sos_pull_db_tree: phony CMakeFiles/scm_sos_pull_db_tree 
_SCM/sos/database/servers/SERVER/DATABASE.sos scm_sos_setup
# Phony custom command for CMakeFiles/scm_sos_setup
build CMakeFiles/scm_sos_setup: phony _SCM/sos/stamps/sos_setup.stamp
# Custom command for _SCM/sos/stamps/sos_setup.stamp
build _SCM/sos/stamps/sos_setup.stamp: CUSTOM_COMMAND
  COMMAND = cd [[CMAKE_BINARY_DIR]]  /usr/local/bin/cmake -E make_directory 
[[CMAKE_BINARY_DIR]]/_SCM/sos/stamps  /usr/local/bin/cmake -E touch 
[[CMAKE_BINARY_DIR]]/_SCM/sos/stamps/sos_setup.stamp
  DESC = Generating _SCM/sos/stamps/sos_setup.stamp
# Utility command for scm_sos_setup
build scm_sos_setup: phony CMakeFiles/scm_sos_setup 
_SCM/sos/stamps/sos_setup.stamp 
copy_prep_file__[[CMAKE_BINARY_DIR]]_SosWrap.bash


IOW, from what I'm gathering here, it seems as if   scm_sos_pull_db_tree   
lists   its _internal_
target/rule/whatever CMakeFiles/scm_sos_pull_db_tree with same-hierarchy 
priority as scm_sos_setup.
And that internal target/rule/whatever then gets executed in advance, despite 
scm_sos_setup not having been executed (prepared) yet.

And this is most likely because add_custom_command() in Ninja generator
actually gets realised as an inner target of its corresponding CMake 
add_custom_target(),
and we then have a logical disconnect since it's the _outer_, CMake-_public_ 
target
which gets configured a constraint (scm_sos_setup needs to run first).


IOW, it's a MISTAKE to implement (emulate) add_custom_command() via inner 
targets in Ninja build config,
since those inner targets don't inherit those dependency constraints 
(ordering)
which have been explicitly imposed on their outer targets.

So:
- either keep custom commands implemented via inner targets - and then make sure
  that those inner (internal!) targets do have _all_ dependencies of the outer,
  CMake-public target specified
- or don't implement custom commands via internal, logically disconnected 
targets  [better?]


Or am I missing something?
(I believe my CMake construct is correct - but who knows...)

OK, I should perhaps add a file dependency (DEPENDS) within 
add_custom_command() on the
SosWrap.bash script (but that was done _very_ deliberately - see comment in 
that function() above,
and 

Re: [CMake] FYI - From Ninja-build mailing list - Fwd: Proposal: restat rules

2011-09-15 Thread Peter Collingbourne
On Thu, Sep 15, 2011 at 03:28:42PM +0200, Andreas Mohr wrote:
 Hi,
 
 On Wed, Sep 14, 2011 at 12:00:05PM -0400, cmake-requ...@cmake.org wrote:
  Date: Wed, 14 Sep 2011 05:37:20 -0400
  From: Clifford Yapp cliffy...@gmail.com
  
  Looks like that's working.  Running ninja again, I'm seeing another issue:
  
  BRL-CAD uses dependency assignment to make sure our build time delta
  calculator is the last target to be built (and hence actually times the
  build).  With ninja, it doesn't seem to be respecting this, but instead
  tries to run the delta target immediately.  Do custom targets respect
  dependency information?

Yes, but the dependencies are currently only attached to the target,
not to any of its custom commands.  This behaviour is correct for
CMake's built-in targets, such as 'install' and 'test', for which the
commands are attached directly to the target, but add_custom_target
is actually implemented internally using custom commands (the command
given to add_custom_target is stored as a custom command attached to
a dummy source file), so the target dependencies are not currently
attached in the correct place for add_custom_target.

 IOW, from what I'm gathering here, it seems as if   scm_sos_pull_db_tree   
 lists   its _internal_
 target/rule/whatever CMakeFiles/scm_sos_pull_db_tree with same-hierarchy 
 priority as scm_sos_setup.
 And that internal target/rule/whatever then gets executed in advance, despite 
 scm_sos_setup not having been executed (prepared) yet.

This is a symptom of the behaviour described above.

 IOW, it's a MISTAKE to implement (emulate) add_custom_command() via inner 
 targets in Ninja build config,
 since those inner targets don't inherit those dependency constraints 
 (ordering)
 which have been explicitly imposed on their outer targets.
 
 So:
 - either keep custom commands implemented via inner targets - and then make 
 sure
   that those inner (internal!) targets do have _all_ dependencies of the 
 outer,
   CMake-public target specified
 - or don't implement custom commands via internal, logically disconnected 
 targets  [better?]

The former is the correct solution.  The Ninja generator already
does this for object files to ensure that target dependencies are
built before any object file in the target (one of the build systems
I tested with uses a target dependency to generate a header file used
by some of the target's source files).  I now realise this also needs
to happen for custom commands.

Thanks,
-- 
Peter
___
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


Re: [CMake] FYI - From Ninja-build mailing list - Fwd: Proposal: restat rules

2011-09-14 Thread Clifford Yapp
Looks like that's working.  Running ninja again, I'm seeing another issue:

BRL-CAD uses dependency assignment to make sure our build time delta
calculator is the last target to be built (and hence actually times the
build).  With ninja, it doesn't seem to be respecting this, but instead
tries to run the delta target immediately.  Do custom targets respect
dependency information?

Cheers,
CY


On Tue, Sep 13, 2011 at 9:33 AM, Peter Collingbourne pe...@pcc.me.ukwrote:


 Try using this branch of Ninja:

 https://github.com/pcc/Ninja/tree/restat

 The 'restat' branch is still under development, so this requirement
 will go away once 'restat' is merged into the main branch of Ninja.

 Thanks,
 --
 Peter

___
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

Re: [CMake] FYI - From Ninja-build mailing list - Fwd: Proposal: restat rules

2011-09-13 Thread Clifford Yapp
On Sun, Sep 11, 2011 at 11:01 PM, Peter Collingbourne pe...@pcc.me.ukwrote:


  It looks like various custom commands aren't running (some tcl related
  stuff, docbook documentation generation) - are custom commands currently
  supported?

 Yes, custom commands and targets are supported.  There was a bug (which
 is now fixed) that caused custom commands not be built by default.  Now
 all targets except those marked EXCLUDE_FROM_ALL are built by default.


With latest pull from this weekend, I'm currently getting:

ninja cmTryCompileExec

  ninja: error: loading 'build.ninja': line 21, col 9: in 'rules.ninja':
line
  38, col 3: unexpected variable 'restat'

Cheers,
CY
___
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

Re: [CMake] FYI - From Ninja-build mailing list - Fwd: Proposal: restat rules

2011-09-13 Thread Peter Collingbourne
On Tue, Sep 13, 2011 at 08:40:32AM -0400, Clifford Yapp wrote:
 On Sun, Sep 11, 2011 at 11:01 PM, Peter Collingbourne pe...@pcc.me.ukwrote:
 
 
   It looks like various custom commands aren't running (some tcl related
   stuff, docbook documentation generation) - are custom commands currently
   supported?
 
  Yes, custom commands and targets are supported.  There was a bug (which
  is now fixed) that caused custom commands not be built by default.  Now
  all targets except those marked EXCLUDE_FROM_ALL are built by default.
 
 
 With latest pull from this weekend, I'm currently getting:
 
 ninja cmTryCompileExec
 
   ninja: error: loading 'build.ninja': line 21, col 9: in 'rules.ninja':
 line
   38, col 3: unexpected variable 'restat'

Try using this branch of Ninja:

https://github.com/pcc/Ninja/tree/restat

The 'restat' branch is still under development, so this requirement
will go away once 'restat' is merged into the main branch of Ninja.

Thanks,
-- 
Peter
___
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


Re: [CMake] FYI - From Ninja-build mailing list - Fwd: Proposal: restat rules

2011-09-11 Thread Peter Collingbourne
On Fri, Sep 09, 2011 at 10:42:13AM -0400, Bill Hoffman wrote:
 This is very cool work Peter.  How well is this generator doing with the  
 CMake tests?

These are the current test results:

89% tests passed, 22 tests failed out of 203

Label Time Summary:
Label1=   0.03 sec
Label2=   0.03 sec

Total Test time (real) = 491.33 sec

The following tests FAILED:
 12 - kwsys.testDynamicLoader (Failed)
 40 - ExternalOBJ (Failed)
 41 - LoadCommand (Failed)
 52 - ExportImport (Failed)
 55 - EmptyLibrary (OTHER_FAULT)
 57 - BundleUtilities (Failed)
 64 - LinkFlags-lib_config (Failed)
 65 - LinkFlags-dll_config (Failed)
 66 - LinkFlags-exe_config (Failed)
 68 - SubProject-Stage2 (Failed)
 74 - CustomCommand (Failed)
 76 - OutOfSource (Failed)
 77 - BuildDepends (Failed)
 78 - SimpleInstall (Failed)
 79 - SimpleInstall-Stage2 (Failed)
 98 - LoadedCommandOneConfig (Failed)
100 - complexOneConfig (Failed)
 99 - complex (Failed)
103 - ExternalProject (Failed)
120 - Plugin (Failed)
125 - SubDir (Failed)
203 - CMake.CheckSourceTree (Failed)

... which seems to be actually quite good, considering I haven't made
any special effort to try to pass the tests.

  Is there a nija for windows?  I would be interested in  
 testing that.

Yes, the current version of Ninja supports Windows, but the generator
would certainly need to be adapted.  

Thanks,
-- 
Peter
___
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


Re: [CMake] FYI - From Ninja-build mailing list - Fwd: Proposal: restat rules

2011-09-11 Thread Peter Collingbourne
On Fri, Sep 09, 2011 at 02:55:00PM +, Malfettone, Kris wrote:
 Peter,
 I am very interested in the ninja generator and gave it a try for one of my 
 very large projects.  Unfortunately, I have approximately 100 targets all 
 with the same output name(simple) but in CMake I give them all unique target 
 names(dot separated name built from their place in the directory tree).  This 
 works fine for Makefiles however the ninja generator seems to be adding:
 # Shortcut target for the output name.
 build simple: phony MD/MDF/Parsers/BX/BLS/v1_1/utils/simple/simple
 # Shortcut target for the target name.
 build BX.BLS.v1_1.simple: phony simple
 Which then causes the following from ninja:
 ninja: WARNING: multiple rules generate simple. build will not be 
 correct; continuing anyway
 
 Is there a way to disable these shortcut targets?  Even changing my target 
 names to a different format is a possibility if that is necessary.

Not currently.  There are a few other projects I am aware of that
do something similar.  I will probably modify the generator to not
output shortcut targets for a given basename if more than one target
has that basename.

Thanks,
-- 
Peter
___
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


Re: [CMake] FYI - From Ninja-build mailing list - Fwd: Proposal: restat rules

2011-09-11 Thread Peter Collingbourne
On Fri, Sep 09, 2011 at 11:52:23AM -0400, Clifford Yapp wrote:
 On Thu, Sep 8, 2011 at 2:54 PM, Peter Collingbourne pe...@pcc.me.uk wrote:
 
 
  Anyone who is interested in trying the Ninja generator with
  their own projects is welcome to clone my repository at:
 
  https://github.com/pcc/CMake/tree/ninja-generator
 
  and to report any issues encountered.  Note that the generator is
  currently only known to work on Linux.  To select the Ninja generator
  you can pass the option -G Ninja on the cmake command line.
 
 
 Gave it a whirl with BRL-CAD.  You caught me out fair and square on one
 unspecified dependency that no other build system has caught, which is kinda
 cool.
 
 It seems to mostly build, but it's not recognizing that it's done (if I
 re-run ninja, it redoes most of the build).  This could be something I'm not
 doing right or expected ninja behavior at this stage, but I thought I'd
 mention it.

Hopefully this is a known issue, which I'm currently working on.

 It looks like various custom commands aren't running (some tcl related
 stuff, docbook documentation generation) - are custom commands currently
 supported?

Yes, custom commands and targets are supported.  There was a bug (which
is now fixed) that caused custom commands not be built by default.  Now
all targets except those marked EXCLUDE_FROM_ALL are built by default.

 For the core program building though, looks like it succeeded quite handily
 - very nice!  Unfortunately, my time delta calculation was one of the
 targets not built (or at least I don't see its output) so I'm not sure what
 the time difference is yet ;-).

You could always use the time command...

Thanks,
-- 
Peter
___
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


Re: [CMake] FYI - From Ninja-build mailing list - Fwd: Proposal: restat rules

2011-09-09 Thread Rolf Eike Beer
Am Donnerstag, 8. September 2011, 19:54:46 schrieb Peter Collingbourne:
 On Wed, Sep 07, 2011 at 11:04:42PM -0400, Jean-Christophe Fillion-Robin 
wrote:
  -- Forwarded message --
  From: Peter Collingbourne pe...@pcc.me.uk
  Date: Wed, Sep 7, 2011 at 9:17 PM
  Subject: Proposal: restat rules
  To: ninja-bu...@googlegroups.com
 
 FWIW, the Ninja generator I have been working on is based on work by
 Nicolas Despres, and has been successfully used to compile a number
 of large open source projects, including CMake itself, LLVM/Clang,
 OpenCV and Bullet Physics.

If you want something big try to build KDE stuff with it. There is a script 
called kdesrc-build that can be used to automate the building, I'm rather sure 
this can easily be changed to call Ninja instead of make.

Eike

signature.asc
Description: This is a digitally signed message part.
___
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

Re: [CMake] FYI - From Ninja-build mailing list - Fwd: Proposal: restat rules

2011-09-09 Thread Bill Hoffman
This is very cool work Peter.  How well is this generator doing with the 
CMake tests?  Is there a nija for windows?  I would be interested in 
testing that.


-Bill
___
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


Re: [CMake] FYI - From Ninja-build mailing list - Fwd: Proposal: restat rules

2011-09-09 Thread Malfettone, Kris
Peter,
I am very interested in the ninja generator and gave it a try for one of my 
very large projects.  Unfortunately, I have approximately 100 targets all with 
the same output name(simple) but in CMake I give them all unique target 
names(dot separated name built from their place in the directory tree).  This 
works fine for Makefiles however the ninja generator seems to be adding:
# Shortcut target for the output name.
build simple: phony MD/MDF/Parsers/BX/BLS/v1_1/utils/simple/simple
# Shortcut target for the target name.
build BX.BLS.v1_1.simple: phony simple
Which then causes the following from ninja:
ninja: WARNING: multiple rules generate simple. build will not be 
correct; continuing anyway

Is there a way to disable these shortcut targets?  Even changing my target 
names to a different format is a possibility if that is necessary.

-Kris




-Original Message-
From: cmake-boun...@cmake.org [mailto:cmake-boun...@cmake.org] On Behalf Of 
Peter Collingbourne
Sent: Thursday, September 08, 2011 2:55 PM
To: Jean-Christophe Fillion-Robin
Cc: CMake ML
Subject: Re: [CMake] FYI - From Ninja-build mailing list - Fwd: Proposal: 
restat rules

On Wed, Sep 07, 2011 at 11:04:42PM -0400, Jean-Christophe Fillion-Robin wrote:
 -- Forwarded message --
 From: Peter Collingbourne pe...@pcc.me.uk
 Date: Wed, Sep 7, 2011 at 9:17 PM
 Subject: Proposal: restat rules
 To: ninja-bu...@googlegroups.com

FWIW, the Ninja generator I have been working on is based on work by Nicolas 
Despres, and has been successfully used to compile a number of large open 
source projects, including CMake itself, LLVM/Clang, OpenCV and Bullet Physics.

I am planning to submit the Ninja generator as a patch to CMake upstream once 
it has been put through more exhaustive testing and certain known issues have 
been resolved (my post to ninja-build being one of them).

Anyone who is interested in trying the Ninja generator with their own projects 
is welcome to clone my repository at:

https://github.com/pcc/CMake/tree/ninja-generator

and to report any issues encountered.  Note that the generator is currently 
only known to work on Linux.  To select the Ninja generator you can pass the 
option -G Ninja on the cmake command line.

Thanks,
--
Peter
___
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



IMPORTANT: The information contained in this email and/or its attachments is 
confidential. If you are not the intended recipient, please notify the sender 
immediately by reply and immediately delete this message and all its 
attachments. Any review, use, reproduction, disclosure or dissemination of this 
message or any attachment by an unintended recipient is strictly prohibited. 
Neither this message nor any attachment is intended as or should be construed 
as an offer, solicitation or recommendation to buy or sell any security or 
other financial instrument. Neither the sender, his or her employer nor any of 
their respective affiliates makes any warranties as to the completeness or 
accuracy of any of the information contained herein or that this message or any 
of its attachments is free of viruses.
___
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


Re: [CMake] FYI - From Ninja-build mailing list - Fwd: Proposal: restat rules

2011-09-09 Thread Clifford Yapp
On Thu, Sep 8, 2011 at 2:54 PM, Peter Collingbourne pe...@pcc.me.uk wrote:


 Anyone who is interested in trying the Ninja generator with
 their own projects is welcome to clone my repository at:

 https://github.com/pcc/CMake/tree/ninja-generator

 and to report any issues encountered.  Note that the generator is
 currently only known to work on Linux.  To select the Ninja generator
 you can pass the option -G Ninja on the cmake command line.


Gave it a whirl with BRL-CAD.  You caught me out fair and square on one
unspecified dependency that no other build system has caught, which is kinda
cool.

It seems to mostly build, but it's not recognizing that it's done (if I
re-run ninja, it redoes most of the build).  This could be something I'm not
doing right or expected ninja behavior at this stage, but I thought I'd
mention it.

It looks like various custom commands aren't running (some tcl related
stuff, docbook documentation generation) - are custom commands currently
supported?

For the core program building though, looks like it succeeded quite handily
- very nice!  Unfortunately, my time delta calculation was one of the
targets not built (or at least I don't see its output) so I'm not sure what
the time difference is yet ;-).

Cheers, and nice work!

CY
___
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

Re: [CMake] FYI - From Ninja-build mailing list - Fwd: Proposal: restat rules

2011-09-08 Thread Peter Collingbourne
On Wed, Sep 07, 2011 at 11:04:42PM -0400, Jean-Christophe Fillion-Robin wrote:
 -- Forwarded message --
 From: Peter Collingbourne pe...@pcc.me.uk
 Date: Wed, Sep 7, 2011 at 9:17 PM
 Subject: Proposal: restat rules
 To: ninja-bu...@googlegroups.com

FWIW, the Ninja generator I have been working on is based on work by
Nicolas Despres, and has been successfully used to compile a number
of large open source projects, including CMake itself, LLVM/Clang,
OpenCV and Bullet Physics.

I am planning to submit the Ninja generator as a patch to CMake
upstream once it has been put through more exhaustive testing and
certain known issues have been resolved (my post to ninja-build being
one of them).

Anyone who is interested in trying the Ninja generator with
their own projects is welcome to clone my repository at:

https://github.com/pcc/CMake/tree/ninja-generator

and to report any issues encountered.  Note that the generator is
currently only known to work on Linux.  To select the Ninja generator
you can pass the option -G Ninja on the cmake command line.

Thanks,
-- 
Peter
___
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


Re: [CMake] FYI - From Ninja-build mailing list - Fwd: Proposal: restat rules

2011-09-08 Thread Clifford Yapp
On Thu, Sep 8, 2011 at 2:54 PM, Peter Collingbourne pe...@pcc.me.uk wrote:


 I am planning to submit the Ninja generator as a patch to CMake
 upstream once it has been put through more exhaustive testing and
 certain known issues have been resolved (my post to ninja-build being
 one of them).


Very cool!  What differences (if any) have you seen incompilation speed?

Cheers,
CY
___
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

Re: [CMake] FYI - From Ninja-build mailing list - Fwd: Proposal: restat rules

2011-09-08 Thread Campbell Barton
Tested cmake/ninja with Blender's cmake files, works well, and fast!
Single file rebuild is 0.97 sec, same on makefiles was 3.7sec.

btw, we do something similar to LLVM with generating source, only
updating if it changes, however only for C files not headers, ninja
handles this ok for my quick tests editing files and rebuilding.

Looking forward to having this in stable cmake!

On Fri, Sep 9, 2011 at 4:54 AM, Peter Collingbourne pe...@pcc.me.uk wrote:
 On Wed, Sep 07, 2011 at 11:04:42PM -0400, Jean-Christophe Fillion-Robin wrote:
 -- Forwarded message --
 From: Peter Collingbourne pe...@pcc.me.uk
 Date: Wed, Sep 7, 2011 at 9:17 PM
 Subject: Proposal: restat rules
 To: ninja-bu...@googlegroups.com

 FWIW, the Ninja generator I have been working on is based on work by
 Nicolas Despres, and has been successfully used to compile a number
 of large open source projects, including CMake itself, LLVM/Clang,
 OpenCV and Bullet Physics.

 I am planning to submit the Ninja generator as a patch to CMake
 upstream once it has been put through more exhaustive testing and
 certain known issues have been resolved (my post to ninja-build being
 one of them).

 Anyone who is interested in trying the Ninja generator with
 their own projects is welcome to clone my repository at:

 https://github.com/pcc/CMake/tree/ninja-generator

 and to report any issues encountered.  Note that the generator is
 currently only known to work on Linux.  To select the Ninja generator
 you can pass the option -G Ninja on the cmake command line.

 Thanks,
 --
 Peter
 ___
 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




-- 
- Campbell
___
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


[CMake] FYI - From Ninja-build mailing list - Fwd: Proposal: restat rules

2011-09-07 Thread Jean-Christophe Fillion-Robin
-- Forwarded message --
From: Peter Collingbourne pe...@pcc.me.uk
Date: Wed, Sep 7, 2011 at 9:17 PM
Subject: Proposal: restat rules
To: ninja-bu...@googlegroups.com


Hi,

In this email I'll try to explain one of the oddities of make (which
some CMake-based build systems rely on), and why we can't currently
express this in Ninja.  I'll also propose how we could extend Ninja
to support this behaviour.

(Warning, long essay ahead.)

In the LLVM project we maintain a code generator called tblgen,
the purpose of which is to generate a number of header files
containing various metadata.  From time to time, tblgen and its
dependent libraries will be modified, causing a rebuild of tblgen.
Strictly speaking, we should now rebuild the header files, and all of
their reverse dependencies, even if the generated file did not change.
This is suboptimal, because the reverse dependencies constitute
every object file built from a source file that transitively includes
one of the tblgen generated files (which is 50% of object files in
the build).

To avoid this problem, we cause tblgen to write its output to a
temporary file, and use a utility to copy the temporary file over the
target file only if the temporary file is different from the target.
In makefile terms, it looks something like this:

-
all: outputuser.o

tblgen: tblgen.cpp
   touch tblgen

output.inc.tmp: tblgen
   touch output.inc.tmp

output.inc: output.inc.tmp
   if cmp output.inc.tmp output.inc ; then : ; else cp output.inc.tmp
output.inc ; fi

outputuser.o: outputuser.cpp output.inc
   touch outputuser.o
-

Note what happens during an incremental build where tblgen is the
only dirty file, but its output file output.inc.tmp does not change
relative to output.inc.  make initially schedules a rebuild of tblgen,
output.inc.tmp, output.inc and outputuser.o.  After output.inc has
been rebuilt, its timestamp remains the same as before the build.
Before make begins to rebuild outputuser.o, it will re-evaluate the
dirty state of outputuser.o based on the timestamps of its inputs
(i.e. it will stat them again).  Because outputuser.cpp and output.inc
are both older than outputuser.o, make doesn't rebuild it after all,
despite it being initially scheduled for a build.

The behaviour is different in Ninja, which operates in two phases:
the scheduling of the build and the build itself.  Like make, Ninja
will schedule a rebuild of tblgen, output.inc.tmp, output.inc and
outputuser.o.  Unlike make, it will rebuild targetuser.o, because
it does not re-stat inputs during the build.  The key observation
here is that unlike make, Ninja currently provides no mechanism for
pruning the scheduled build graph during a build using a build rule.

What I propose for Ninja is that we implement this pruning behaviour
in a similar way to make, but only for specific rules with a special
variable set on the rule.  We can call this variable restat
(suggestions for better names are welcome).  If this variable is
present on a rule, Ninja will, after executing the rule command,
re-stat each output file to obtain its modification time.  If the
modification time is unchanged from when Ninja initially stat'ed the
file before starting the build, Ninja will mark that output file as
clean, and recursively for each reverse dependency of the output file,
recompute its dirty status.

As an improvement over what make does, Ninja then stores the current
timestamp in the build log entry associated with the output file.
This timestamp will be treated by future invocations of Ninja as the
output file's modification time instead of the output file's actual
modification time for the purpose of deciding whether it is dirty
(but not whether its reverse dependencies are dirty).

To give an example of how this would look, here is the above makefile
translated to Ninja:

-
rule touch
 command = touch $out

rule cpifdiff
 command = if cmp $in $out ; then : ; else cp $in $out ; fi
 restat = true

build tblgen: touch tblgen.cpp
build output.inc.tmp: touch tblgen
build output.inc: cpifdiff output.inc.tmp
build outputuser.o: touch outputuser.cpp output.inc

default outputuser.o
-

Now consider what happens when Ninja is asked at timestamp 3 to rebuild
the default target (outputuser.o) where tblgen.cpp has timestamp 2 and
all other files have timestamp 1.  Ninja will schedule a rebuild of
tblgen, output.inc.tmp, output.inc and outputuser.o.  Again, suppose
that the contents of output.inc.tmp are equal to output.inc when built.
So after output.inc has been rebuilt, it still has a timestamp 1.
Ninja will notice that the timestamp is the same as at the start of
the build, and will mark output.inc as clean.  This is propagated
through to outputuser.o, which is also marked clean.  So no further
rebuilding is needed.  Ninja will also associate the timestamp 3 with
output.inc in the build log.

Suppose that Ninja is invoked again immediately afterwards.  The build
planner