Brian Keller (XNA | 1 Jan 2006 19:31
Picon
Favicon

Build pipeline tools

I’m wondering what commercial tools (if any) game studios are using to manage and orchestrate their builds (e.g. FinalBuilder, Visual Build Pro, BuildForge). I’m looking for some opinions about those types of products and how well suited they might be for the games industry. And of course for those of you who aren’t using such a product, I’d love to hear your thoughts on why these products don’t fit your needs (assuming youve looked at them).

Thanks, and happy New Year –

Brian Keller

Microsoft XNA

_______________________________________________
sweng-gamedev mailing list
sweng-gamedev <at> lists.midnightryder.com
http://lists.midnightryder.com/listinfo.cgi/sweng-gamedev-midnightryder.com
Jon Watte | 2 Jan 2006 18:10

Re: Build pipeline tools


We use DistCC, and it works well. Doesn't help with our Windows builds, 
but the Linux builds run right fast. And it's free :-)

Cheers,

			/ h+

Brian Keller (XNA) wrote:
> I’m wondering what commercial tools (if any) game studios are using to 
> manage and orchestrate their builds (e.g. FinalBuilder, Visual Build 
> Pro, BuildForge). I’m looking for some opinions about those types of 

--

-- 
-- The early bird gets the worm, but the second mouse gets the cheese.
_______________________________________________
sweng-gamedev mailing list
sweng-gamedev <at> lists.midnightryder.com
http://lists.midnightryder.com/listinfo.cgi/sweng-gamedev-midnightryder.com

Charles Nicholson | 2 Jan 2006 18:31
Picon

Re: Build pipeline tools

One of our clever Python guys wrote a program that reads in a flat text file of source files and generates vcproj files for win32 & x360 as well as makefiles for ps3.  We also have a VS.NET plugin that catches file adds and removes and appropriately edits this source file, so we can still use VS.NET in the intended way.

Our continuous integration server uses nant to kick off the builds (devenv.com for win32/x360) whenever a change is checked in.

We're not using any distributed build stuff (we used incredibuild on our last project) but we're paying much closer attention to physical layout & dependencies.  That combined with judicious use of precompiled headers has kept the build times tolerable for us so far.  Spiffy new VS.NET is cool enough to automatically split builds up across multiple processors/cores, so i imagine we'll see a nice speedup there too when we upgrade (we're still on 2k3).

On an unrelated note (you do have XNA after your name so i figured... :) ), we're very much hoping that MSBuild will work better than Nant for asset building.  Nant has a few big problems that keep it from being idea for asset building, most notably crummy dependency support and silent failure when a file in a fileset doesn't exist.

chas

Brian Keller (XNA) wrote:
> I'm wondering what commercial tools (if any) game studios are using to
> manage and orchestrate their builds (e.g. FinalBuilder, Visual Build
> Pro, BuildForge). I'm looking for some opinions about those types of


--
-- The early bird gets the worm, but the second mouse gets the cheese.
_______________________________________________
sweng-gamedev mailing list
sweng-gamedev <at> lists.midnightryder.com
http://lists.midnightryder.com/listinfo.cgi/sweng-gamedev-midnightryder.com

_______________________________________________
sweng-gamedev mailing list
sweng-gamedev <at> lists.midnightryder.com
http://lists.midnightryder.com/listinfo.cgi/sweng-gamedev-midnightryder.com
Jon Watte | 2 Jan 2006 22:06

Re: Build pipeline tools


Charles Nicholson wrote:
> One of our clever Python guys wrote a program that reads in a flat text 
> file of source files and generates vcproj files for win32 & x360 as well 
> as makefiles for ps3.  We also have a VS.NET <http://VS.NET> plugin that 
> catches file adds and removes and appropriately edits this source file, 
> so we can still use VS.NET <http://VS.NET> in the intended way.

Do you keep a lot of source files around that aren't intended to be part 
of the build? We have an open source tool (oconfig) which generates VS 
projects as well as make files etc, but it uses globbing to find source 
files -- all .cpp files in the src directory get included; all .cpp 
files in the win32 directory get included on Win32 platforms, ...

It would seem that keeping that text file in line with the source would 
be a little bit of a bother (VS plugin or no)?

Cheers,

			/ h+

--

-- 
-- The early bird gets the worm, but the second mouse gets the cheese.
_______________________________________________
sweng-gamedev mailing list
sweng-gamedev <at> lists.midnightryder.com
http://lists.midnightryder.com/listinfo.cgi/sweng-gamedev-midnightryder.com

J. Perkins | 3 Jan 2006 15:23
Picon

Re: Build pipeline tools

On 1/2/06, Jon Watte <hplus <at> mindcontrol.org> wrote:
> Do you keep a lot of source files around that aren't intended to be part
> of the build? We have an open source tool (oconfig) which generates VS
> projects as well as make files etc, but it uses globbing to find source
> files -- all .cpp files in the src directory get included; all .cpp
> files in the win32 directory get included on Win32 platforms, ...

Do you have a link for oconfig? Google can't seem to find it. How does
it compare to something like Premake
(http://premake.sourceforge.net/)?

Thanks,
Jason
_______________________________________________
sweng-gamedev mailing list
sweng-gamedev <at> lists.midnightryder.com
http://lists.midnightryder.com/listinfo.cgi/sweng-gamedev-midnightryder.com

Charles Nicholson | 3 Jan 2006 18:02
Picon

Re: Build pipeline tools

> One of our clever Python guys wrote a program that reads in a flat text
> file of source files and generates vcproj files for win32 & x360 as well
> as makefiles for ps3.  We also have a VS.NET <http://VS.NET> plugin that
> catches file adds and removes and appropriately edits this source file,
> so we can still use VS.NET <http://VS.NET> in the intended way.

It would seem that keeping that text file in line with the source would
be a little bit of a bother (VS plugin or no)?

(apologies for the nonsense hyperlinks above, gmail is zealous)

Actually, the VS plugin is the lynchpin- keeping the text file in line with the source is fully automated and at this point almost 100% opaque.  We simply work as if there were no sln/proj generation going on and add/remove files via the solution explorer.  It does get a little tricky sometimes like when we're adding platform-specific files but i believe (and hope someone will chime in if i'm wrong) that we parse the path and if it ends in 'Win32', 'Xenon', etc... then we add it to the Sourcefiles file in that appropriate subdirectory.

At any rate, the hurt of developing VS plugins was worth the benefit, at least in our setup.

-chas
_______________________________________________
sweng-gamedev mailing list
sweng-gamedev <at> lists.midnightryder.com
http://lists.midnightryder.com/listinfo.cgi/sweng-gamedev-midnightryder.com
Jon Watte | 3 Jan 2006 18:46

Re: Build pipeline tools


"oconfig" is part of the Panda scene graph download; one of our 
engineers is one of the original Panda authors. We have customized it a 
bit for modern versions of visual studio (I think the distribution only 
supports vs6).

I haven't used Premake myself, so I can't compare it; oconfig uses its 
own language that's reminiscent of GNU make, although it has primitives 
for outputting file contents and directories, and a built-in scope 
operator (where you'd make each project a "scope").

Cheers,

			/ h+

J. Perkins wrote:

> Do you have a link for oconfig? Google can't seem to find it. How does
> it compare to something like Premake
> (http://premake.sourceforge.net/)?
> 
> Thanks,
> Jason

--

-- 
-- The early bird gets the worm, but the second mouse gets the cheese.
_______________________________________________
sweng-gamedev mailing list
sweng-gamedev <at> lists.midnightryder.com
http://lists.midnightryder.com/listinfo.cgi/sweng-gamedev-midnightryder.com

igrok | 5 Jan 2006 02:48
Picon

reflection and functions

I've been experimenting with setting up a system of reflection in C++,
but have found that doing reflection on class functions is messy to 
implement.
Currently I'm using some defines that create a new class per function,
and 
after grabbing the relevant property class, you call:

CFunctionMethod* property = object->FindFunction( "DoSomething" );
property->CallMethod( object, params );

One thing that is very messy about this is that the params need to be
known 
in advance. Take this example:

switch( property->GetParamsType() )
{
case PARAMS_1Int:
	((CFunctionMethod_1Int*)property)->CallMethod( object, i );
	break;
case PARAMS_2Int:
	((CFunctionMethod_2Int*)property)->CallMethod( object, i, j );
	break;
}

Obviously this will get difficult to maintain as the permutations of 
ParamsType grows, and I feel sure there must be a better way.

I've been reading the article in Games Programming Gems 5, called 'Using

Templates for Reflection in C++' which implements a nice neat way of
doing 
reflectance of data members. 
This is relatively simple as there is a limited number of data types 
(int,float,pointer,etc) and the Get() and Set() functions need none or
one 
parameter only.
Templates are used in this system, but not defines.

The article claims that it is easy to expand their system to support 
exposure of class functions as well, but obviously I'm a bit stupid and 
can't see how this can be done. The main obsticle is the varying number
and 
types of parameters that a function will require.

Can anyone point me in a better direction?
Thanks

_______________________________________________
sweng-gamedev mailing list
sweng-gamedev <at> lists.midnightryder.com
http://lists.midnightryder.com/listinfo.cgi/sweng-gamedev-midnightryder.com

Jason Citron | 5 Jan 2006 03:05
Picon

Re: reflection and functions

I've successfully used DLL export tables as a relatively simple way to do automated reflection of C++ objects. I've only tried doing it on Windows, but I imagine it should work on any platform that supports dynamic libraries. I think I originally read about the idea in one of the early Game Programming Gems books. The article had something to do with automatically exposing functions for scripting languages and remote procedure calls.

Exposing objects w/ the .NET compiler like this requires one additional keyword in the signature. The system that actually reads the export table and creates function signature information is non-trivial, but you only have to do the hard work once, in one spot.

Hope that helps.

On 1/4/06, igrok <igrok <at> orangutan.eclipse.co.uk> wrote:
I've been experimenting with setting up a system of reflection in C++,
but have found that doing reflection on class functions is messy to
implement.
Currently I'm using some defines that create a new class per function,
and
after grabbing the relevant property class, you call:

CFunctionMethod* property = object->FindFunction( "DoSomething" );
property->CallMethod( object, params );

One thing that is very messy about this is that the params need to be
known
in advance. Take this example:

switch( property->GetParamsType() )
{
case PARAMS_1Int:
        ((CFunctionMethod_1Int*)property)->CallMethod( object, i );
        break;
case PARAMS_2Int:
        ((CFunctionMethod_2Int*)property)->CallMethod( object, i, j );
        break;
}

Obviously this will get difficult to maintain as the permutations of
ParamsType grows, and I feel sure there must be a better way.

I've been reading the article in Games Programming Gems 5, called 'Using

Templates for Reflection in C++' which implements a nice neat way of
doing
reflectance of data members.
This is relatively simple as there is a limited number of data types
(int,float,pointer,etc) and the Get() and Set() functions need none or
one
parameter only.
Templates are used in this system, but not defines.

The article claims that it is easy to expand their system to support
exposure of class functions as well, but obviously I'm a bit stupid and
can't see how this can be done. The main obsticle is the varying number
and
types of parameters that a function will require.

Can anyone point me in a better direction?
Thanks


_______________________________________________
sweng-gamedev mailing list
sweng-gamedev <at> lists.midnightryder.com
http://lists.midnightryder.com/listinfo.cgi/sweng-gamedev-midnightryder.com

_______________________________________________
sweng-gamedev mailing list
sweng-gamedev <at> lists.midnightryder.com
http://lists.midnightryder.com/listinfo.cgi/sweng-gamedev-midnightryder.com
Keith Bauer | 5 Jan 2006 03:07
Picon
Favicon

Re: reflection and functions

> I've been experimenting with setting up a system of reflection in C++,
> but have found that doing reflection on class functions is messy to
> implement.

First question, why on earth are you trying to do this in C++?  There  
are plenty of good languages out there which already provide this  
functionality, with elegant syntax.

> One thing that is very messy about this is that the params need to be
> known in advance.

[snip]

> Can anyone point me in a better direction?

If you don't mind being limited to passing certain primitive types*,  
you can type your function pointer as taking (...) for arguments...  
that might be enough for your needs.  If you need something more  
sophisticated, you're looking at something like libffi:

http://gcc.gnu.org/viewcvs/trunk/libffi/README?view=markup&rev=HEAD

-Keith

* int, long, long long, double and void*, I believe are the only  
options.

_______________________________________________
sweng-gamedev mailing list
sweng-gamedev <at> lists.midnightryder.com
http://lists.midnightryder.com/listinfo.cgi/sweng-gamedev-midnightryder.com


Gmane