Boost logo

Boost-Build :

From: Michael Marcin (mmarcin_at_[hidden])
Date: 2006-09-15 23:04:31


First off I'd like to compilment you all on making it very easy experiment
the build system with very little knowledge of what is actually happening
behind the scenes.
I'm trying to read through the documentation on bbv2, but there is a lot of
information to parse.
I'd appreciate if you can help me gauge how much work it would take to move
to and maintain a boost.build based build system.

I'm working on a project that is currently using Visual Studio 2005.
We have several builds and msvc is beginning to make maintence a problem.
The project must build for Windows Mobile 5, Windows 32-bit, Symbian OS 9.1
Hardware/Simulator, and BREW 3.1 Hardware/Simulator.

The WM5 build uses the msvc-8.0 compiler to build a wince exe using a
PlatformSDK.
The Win32 build uses the msvc-8.0 compiler to build a windows exe.
The Symbian build uses the with the Visual Stuido Carbide plugin to build
with:
   Simulator - gcc 3.3.2
   Device - gcc 3.4.3 (CodeSourcery ARM Q1C 2005)
The Brew Simulator build uses the msvc-8.0 compiler to build a dll.
The Brew Device build uses VS2005 .rules files and gcc 4.1.1 (WinARM Version
20060606)
Ports to linux embedded devices and MacOS are being planned.

So currently there are several compilers, several stdlibs, one build
platform (32-bit Windows) and several host platforms.

To make things more interesting several subsystems have compile-time
swappable implementations for the same target (with different performance
characteristics). This is currently handled manually in a config header but
it would be nice to be able to build all variantions of those as well.

All targets use largely the same code-base with a few target specific source
files that can simply compile into object files without any external symbols
if not for the current target or be excluded from the build.

In addition there are several deployment convenience steps that run external
tools and copy files around.

Things that weren't immediately obvious from the docs I've read so far:
Are there settings in boost.build to make msvc-8.0 generate arm/thumb code
and use the windows ce+device specific stdlib for the WM5 project?
Can you specify the linker(s) to use (a big drawback to the VS8 .rules is
that you cannot link easily).
Can you generate a vcproj from a Jamfile?
How do you specify platforms? (i.e. our MSVC solution has straight forward
Debug/Release variants for Win32 and WM5, we have to jump through a lot of
hoops to support the other targets)

It is nice to be able to batch build all variants for all targets but most
of the time we only want to build one variant for one platform at a time.
It would be nice if this was as straightforward as:

bjam --v2 variant=debug platform=win32
(compiles x86 code with msvc-8.0 using vs2005 windows stdlib+platform sdk )
or
bjam --v2 variant=debug platform=brew-3.1-simulator
(compiles armv4i code with msvc-8.0 using vs2005 windows ce + device specifc
stdlib+platform sdk )
or
bjam --v2 variant=release platform=brew-3.1-device
{compiles arm7 tdmi code with winarm-gcc-4.1.1 using stdlib3 and brew 3.1.5
platform sdk)

Is this or close to it possible?

Our subversion layout has <root>/build/<platform>/<variant>/<executable>
Is this easy to do with boost.build?

Sorry this is so long winded but I'm going to need a lot of ammunition to
push a change like this through the company.


Boost-Build list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk