<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: Bad News for Scons Fans</title>
	<atom:link href="http://gamesfromwithin.com/bad-news-for-scons-fans/feed" rel="self" type="application/rss+xml" />
	<link>http://gamesfromwithin.com/bad-news-for-scons-fans</link>
	<description>Indie iPhone game development</description>
	<lastBuildDate>Thu, 04 Mar 2010 04:13:35 -0800</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Michael Chiu</title>
		<link>http://gamesfromwithin.com/bad-news-for-scons-fans/comment-page-1#comment-2533</link>
		<dc:creator>Michael Chiu</dc:creator>
		<pubDate>Mon, 03 Aug 2009 07:42:31 +0000</pubDate>
		<guid isPermaLink="false">http://www.gamesfromwithin.dreamhosters.com/?p=463#comment-2533</guid>
		<description>Is kjam still alive ? I have sent mail to him but no response.</description>
		<content:encoded><![CDATA[<p>Is kjam still alive ? I have sent mail to him but no response.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Chris Williams</title>
		<link>http://gamesfromwithin.com/bad-news-for-scons-fans/comment-page-1#comment-691</link>
		<dc:creator>Chris Williams</dc:creator>
		<pubDate>Wed, 24 Dec 2008 05:31:13 +0000</pubDate>
		<guid isPermaLink="false">http://www.gamesfromwithin.dreamhosters.com/?p=463#comment-691</guid>
		<description>My team recently migrated from the Autotools suite (*that&#039;s* pain) to SCons. Our codebase isn&#039;t that large (~175 files code, more for other stuff (Doxygen etc.)), but we found Scons was, while slower than &#039;make&#039;, easily fast enough for the ease of use difference.

I just has a quick look at your test script, and I notice it&#039;s not using any of SCons&#039; speed features. Reading your problem domain, one in particular might be useful. SCons uses objects called &#039;Deciders&#039; to figure out if a file/dependency has changed. The default Decider uses MD5 sums of the file contents, which adds a *lot* of time overhead. The reason this is the default behaviour is explained here: http://www.scons.org/doc/production/HTML/scons-user.html#AEN815, but the important point is that it can be easily changed (using one of several built-ins or writing your own). There&#039;s one that will use the later-than-mtime instead, like make, (flaw: doesn&#039;t catch introduction of older files into the file tree), and another that&#039;ll use mtime-exact (any different mtime causes a rebuild), and several more. There are trade-offs involved with these, but we found that mtime-exact took 66% of the time of md5s, which is not as fast as others but takes a lot of the sting out.</description>
		<content:encoded><![CDATA[<p>My team recently migrated from the Autotools suite (*that&#8217;s* pain) to SCons. Our codebase isn&#8217;t that large (~175 files code, more for other stuff (Doxygen etc.)), but we found Scons was, while slower than &#8216;make&#8217;, easily fast enough for the ease of use difference.</p>
<p>I just has a quick look at your test script, and I notice it&#8217;s not using any of SCons&#8217; speed features. Reading your problem domain, one in particular might be useful. SCons uses objects called &#8216;Deciders&#8217; to figure out if a file/dependency has changed. The default Decider uses MD5 sums of the file contents, which adds a *lot* of time overhead. The reason this is the default behaviour is explained here: <a href="http://www.scons.org/doc/production/HTML/scons-user.html#AEN815" rel="nofollow">http://www.scons.org/doc/production/HTML/scons-user.html#AEN815</a>, but the important point is that it can be easily changed (using one of several built-ins or writing your own). There&#8217;s one that will use the later-than-mtime instead, like make, (flaw: doesn&#8217;t catch introduction of older files into the file tree), and another that&#8217;ll use mtime-exact (any different mtime causes a rebuild), and several more. There are trade-offs involved with these, but we found that mtime-exact took 66% of the time of md5s, which is not as fast as others but takes a lot of the sting out.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: ^_^</title>
		<link>http://gamesfromwithin.com/bad-news-for-scons-fans/comment-page-1#comment-624</link>
		<dc:creator>^_^</dc:creator>
		<pubDate>Thu, 04 Dec 2008 15:17:57 +0000</pubDate>
		<guid isPermaLink="false">http://www.gamesfromwithin.dreamhosters.com/?p=463#comment-624</guid>
		<description>Waf.

It has evolved from Scons years ago to address several flexibility concerns and performance issues. Have a look:

http://code.google.com/p/waf
http://freehackers.org/~tnagy/testdoc/index.html</description>
		<content:encoded><![CDATA[<p>Waf.</p>
<p>It has evolved from Scons years ago to address several flexibility concerns and performance issues. Have a look:</p>
<p><a href="http://code.google.com/p/waf" rel="nofollow">http://code.google.com/p/waf</a><br />
<a href="http://freehackers.org/~tnagy/testdoc/index.html" rel="nofollow">http://freehackers.org/~tnagy/testdoc/index.html</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: greggman</title>
		<link>http://gamesfromwithin.com/bad-news-for-scons-fans/comment-page-1#comment-524</link>
		<dc:creator>greggman</dc:creator>
		<pubDate>Sat, 01 Nov 2008 19:03:00 +0000</pubDate>
		<guid isPermaLink="false">http://www.gamesfromwithin.dreamhosters.com/?p=463#comment-524</guid>
		<description>I *HATE* (capital H) scons.

My current project and my last project used it. The #1 issue I have with it is no one seems to actually understand it and so because it&#039;s just a python library and you have all of python with which to hang yourself every sub project ends up being some personal hack of the guy who setup the build for that sub project.  Back in make days, editing or adding something to a makefile was always relatively easy. Writing my own build system in perl or python has been relatively easy but everytime I see someone go try to add something to scons it&#039;s 4-8 hours of pain.

One thing that many build systems seem to have problems with is dependencies that can&#039;t be known before the build starts. An example is you don&#039;t know what textures need to be processed until you build the maya/max file.  So what you really want is

.mb-&gt;.middleformat-&gt;.texturelist-&gt;[texture1, texture2, ...]

When .texturelist already exists and is up to date (ie, newer than both .middleformat and .mb) it&#039;s easy for some build system to follow the rules and build the textures but most build systems I&#039;ve used don&#039;t like it when that list doesn&#039;t exist yet and therefore has to be added after the build has started. Or to put it another way, most build systems start with only some programming language in mind and make the assumuption they can scan the text quickly to figure out implicit dependencies. That assumption is not true for assets.</description>
		<content:encoded><![CDATA[<p>I *HATE* (capital H) scons.</p>
<p>My current project and my last project used it. The #1 issue I have with it is no one seems to actually understand it and so because it&#8217;s just a python library and you have all of python with which to hang yourself every sub project ends up being some personal hack of the guy who setup the build for that sub project.  Back in make days, editing or adding something to a makefile was always relatively easy. Writing my own build system in perl or python has been relatively easy but everytime I see someone go try to add something to scons it&#8217;s 4-8 hours of pain.</p>
<p>One thing that many build systems seem to have problems with is dependencies that can&#8217;t be known before the build starts. An example is you don&#8217;t know what textures need to be processed until you build the maya/max file.  So what you really want is</p>
<p>.mb-&gt;.middleformat-&gt;.texturelist-&gt;[texture1, texture2, ...]</p>
<p>When .texturelist already exists and is up to date (ie, newer than both .middleformat and .mb) it&#8217;s easy for some build system to follow the rules and build the textures but most build systems I&#8217;ve used don&#8217;t like it when that list doesn&#8217;t exist yet and therefore has to be added after the build has started. Or to put it another way, most build systems start with only some programming language in mind and make the assumuption they can scan the text quickly to figure out implicit dependencies. That assumption is not true for assets.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Matt Doar</title>
		<link>http://gamesfromwithin.com/bad-news-for-scons-fans/comment-page-1#comment-523</link>
		<dc:creator>Matt Doar</dc:creator>
		<pubDate>Fri, 31 Oct 2008 22:24:18 +0000</pubDate>
		<guid isPermaLink="false">http://www.gamesfromwithin.dreamhosters.com/?p=463#comment-523</guid>
		<description>Ping?</description>
		<content:encoded><![CDATA[<p>Ping?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Matt Doar</title>
		<link>http://gamesfromwithin.com/bad-news-for-scons-fans/comment-page-1#comment-518</link>
		<dc:creator>Matt Doar</dc:creator>
		<pubDate>Tue, 28 Oct 2008 21:14:17 +0000</pubDate>
		<guid isPermaLink="false">http://www.gamesfromwithin.dreamhosters.com/?p=463#comment-518</guid>
		<description>Could you make the generator for your test code available, or email it to me? I&#039;m guessing it&#039;s C or C++, so the number of preprocessor defines is important too.

&quot;50 libraries, 100 classes each, 15 internal includes, 5 external includes). I built everything once, then ran it again and it took 49 seconds.&quot;

I&#039;ve done a fair amount of work recently analyzing no-change (aka null, do nothing etc) build times with SCons.</description>
		<content:encoded><![CDATA[<p>Could you make the generator for your test code available, or email it to me? I&#8217;m guessing it&#8217;s C or C++, so the number of preprocessor defines is important too.</p>
<p>&#8220;50 libraries, 100 classes each, 15 internal includes, 5 external includes). I built everything once, then ran it again and it took 49 seconds.&#8221;</p>
<p>I&#8217;ve done a fair amount of work recently analyzing no-change (aka null, do nothing etc) build times with SCons.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: noel</title>
		<link>http://gamesfromwithin.com/bad-news-for-scons-fans/comment-page-1#comment-495</link>
		<dc:creator>noel</dc:creator>
		<pubDate>Tue, 30 Nov 1999 00:00:00 +0000</pubDate>
		<guid isPermaLink="false">http://www.gamesfromwithin.dreamhosters.com/?p=463#comment-495</guid>
		<description>&lt;p&gt;Frankly, I had never really considered test-driven builds. We&#039;re definitely test-driving our data conversion tools (take this model from the intermediate format to the final one).&lt;/p&gt;
&lt;p&gt;The main problems I see with a test-driven tool is that the high-level build process is a well-understood, generic process. It&#039;s also a process that is highly performance sensitive and it&#039;s going to be stressed with Gigabytes of data, so you want to parallelize it as much as possible. So given that, it seems that trying to adopt someone else&#039;s solution is the way to go. Yes, there&#039;s still no perfect build system out there, but they&#039;re probably better than what a single person can do in a month or so.&lt;/p&gt;
&lt;p&gt;On the other hand, if your game doesn&#039;t have too much data, then you can just grab any of them (make, Scons, MSBuild) and be happy with it and you can spend your efforts in the things that really matter (the game). In general I&#039;m not a fan of writing build systems from scratch as a set of custom scripts though.&lt;/p&gt;
&lt;p&gt;&#160;&lt;/p&gt;</description>
		<content:encoded><![CDATA[<div style="">
<p>Frankly, I had never really considered test-driven builds. We&#8217;re definitely test-driving our data conversion tools (take this model from the intermediate format to the final one).</p>
<p>The main problems I see with a test-driven tool is that the high-level build process is a well-understood, generic process. It&#8217;s also a process that is highly performance sensitive and it&#8217;s going to be stressed with Gigabytes of data, so you want to parallelize it as much as possible. So given that, it seems that trying to adopt someone else&#8217;s solution is the way to go. Yes, there&#8217;s still no perfect build system out there, but they&#8217;re probably better than what a single person can do in a month or so.</p>
<p>On the other hand, if your game doesn&#8217;t have too much data, then you can just grab any of them (make, Scons, MSBuild) and be happy with it and you can spend your efforts in the things that really matter (the game). In general I&#8217;m not a fan of writing build systems from scratch as a set of custom scripts though.</p>
<p>&nbsp;</p>
</div>
]]></content:encoded>
	</item>
	<item>
		<title>By: filter</title>
		<link>http://gamesfromwithin.com/bad-news-for-scons-fans/comment-page-1#comment-496</link>
		<dc:creator>filter</dc:creator>
		<pubDate>Tue, 30 Nov 1999 00:00:00 +0000</pubDate>
		<guid isPermaLink="false">http://www.gamesfromwithin.dreamhosters.com/?p=463#comment-496</guid>
		<description>Incredibuild XGE seems pretty good to me:

http://www.xoreax.com/technology_xge.htm</description>
		<content:encoded><![CDATA[<p>Incredibuild XGE seems pretty good to me:</p>
<p><a href="http://www.xoreax.com/technology_xge.htm" rel="nofollow">http://www.xoreax.com/technology_xge.htm</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Edd</title>
		<link>http://gamesfromwithin.com/bad-news-for-scons-fans/comment-page-1#comment-497</link>
		<dc:creator>Edd</dc:creator>
		<pubDate>Tue, 30 Nov 1999 00:00:00 +0000</pubDate>
		<guid isPermaLink="false">http://www.gamesfromwithin.dreamhosters.com/?p=463#comment-497</guid>
		<description>I haven&#039;t got around to playing with these tools yet, but perhaps you might find some time if your get desperate enough?!

http://sham.sourceforge.net/
http://www.cs.berkeley.edu/~billm/memoize.html

They basically work off of the same idea: run the commands to do the build, monitoring the inputs and outputs with kernel hooks to generate dependencies information. No need to specify or calculate the dependencies explicitly via some heuristic hack.

I imagine it would be pretty easy to implement a parallel build system on top of these. You could simply write your build instructions sequentially in a list with certain barrier points. All commands between barrier N and N+1 could be run in parallel. e.g.

compile blah/foo.cpp blah/out/foo.obj
compile blah/bar.cpp blah/out/bar.obj
compile blah/baz.cpp blah/out/baz.obj
compile guff/foo.cpp guff/out/foo.obj
compile guff/bar.cpp guff/out/bar.obj
compile guff/baz.cpp guff/out/baz.obj
------------------------------------------- # barrier
make-library guff/out/*.obj libs/guff.lib
make-library blah/out/*.obj libs/blah.lib
------------------------------------------- # barrier
# etc ...</description>
		<content:encoded><![CDATA[<p>I haven&#8217;t got around to playing with these tools yet, but perhaps you might find some time if your get desperate enough?!</p>
<p><a href="http://sham.sourceforge.net/" rel="nofollow">http://sham.sourceforge.net/</a><br />
<a href="http://www.cs.berkeley.edu/~billm/memoize.html" rel="nofollow">http://www.cs.berkeley.edu/~billm/memoize.html</a></p>
<p>They basically work off of the same idea: run the commands to do the build, monitoring the inputs and outputs with kernel hooks to generate dependencies information. No need to specify or calculate the dependencies explicitly via some heuristic hack.</p>
<p>I imagine it would be pretty easy to implement a parallel build system on top of these. You could simply write your build instructions sequentially in a list with certain barrier points. All commands between barrier N and N+1 could be run in parallel. e.g.</p>
<p>compile blah/foo.cpp blah/out/foo.obj<br />
compile blah/bar.cpp blah/out/bar.obj<br />
compile blah/baz.cpp blah/out/baz.obj<br />
compile guff/foo.cpp guff/out/foo.obj<br />
compile guff/bar.cpp guff/out/bar.obj<br />
compile guff/baz.cpp guff/out/baz.obj<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- # barrier<br />
make-library guff/out/*.obj libs/guff.lib<br />
make-library blah/out/*.obj libs/blah.lib<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- # barrier<br />
# etc &#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Tom Johnstone</title>
		<link>http://gamesfromwithin.com/bad-news-for-scons-fans/comment-page-1#comment-498</link>
		<dc:creator>Tom Johnstone</dc:creator>
		<pubDate>Tue, 30 Nov 1999 00:00:00 +0000</pubDate>
		<guid isPermaLink="false">http://www.gamesfromwithin.dreamhosters.com/?p=463#comment-498</guid>
		<description>Can anyone tell me what kind of license/cost KJam is?</description>
		<content:encoded><![CDATA[<p>Can anyone tell me what kind of license/cost KJam is?</p>
]]></content:encoded>
	</item>
</channel>
</rss>
