Prototype buildsystem "Drake"

Chris Molozian chris at cmoz.me
Wed Jul 13 15:15:06 PDT 2011


I'm glad the feedback helped, this may be of use to help in abstracting 
away platform specific configuration: 
http://public.perforce.com/public/jam/src/Jambase

Cheers,

Chris


On 07/13/11 19:31, Nick Sabalausky wrote:
> "Chris Molozian"<chris at cmoz.me>  wrote in message
> news:mailman.1595.1310554903.14074.digitalmars-d at puremagic.com...
>> I asked about build tools for D on the mailing list a while ago. I
>> needed a solution that allowed me to mix C++ and D builds in a
>> cross-platform way with minimum fuss. You can find the discussion about
>> it here
>> <http://www.digitalmars.com/d/archives/digitalmars/D/Best_build_tool_for_D_projects_136103.html>
>> (you were also a part of it IIRC). My biggest requirement at the time was:
>>
>>   * Keeping platform checks e.g. IF (MAC) {} ELSE IF(LINUX) {} ... etc.
>>     to an absolute minimum. What's the point in a cross-platform
>>     language if when you build projects in it you need to write a short
>>     essay for the build system...
> FWIW, my Drake system takes that as a high priority, too. For example, if
> you have project "foo", then you can get the cross-platform binary filename,
> object filename, shared lib filename, static lib filename, etc like this:
>
> "foo".exe  // "foo.exe" or "foo"
> "foo".obj  // "foo.obj" or "foo.o"
> "foo".lib  // "foo.lib" or "foo.a"
> "foo".slib  // "foo.dll" or "foo.so"
> "foo".bat  // "foo.bat" or "foo"
> "foo".sh   // "foo.bat" or "foo.sh"
>
> And new ones are easy to define:
>
>
>
> I also intend to make sure that invoking "./blah" works on Windows.
>
>>   * Pre-built binaries available to all platforms (or as many as possible).
>>
> With Drake, the only pre-built binaries that are needed are DMD. The drake
> command itself is a trivial one-line shell/batch script that invokes RDMD to
> build+run the drakefile (which imports the rest of drake).
>
> Of course, something still needs to be done to set up the DRAKE env var to
> point to the Drake directory (or at least do something to get the path to
> Drake into the -I arg sent to RDMD...) Not entirely sure how I want to do
> that, although I think I have one idea.
>
>> In the end I settled for Jam (ftjam)
>> <http://www.freetype.org/jam/index.html>, it works tremendously well.
>> It's easy to get binaries for almost any operating system (especially
>> with projects like homebrew<http://mxcl.github.com/homebrew/>  for Mac).
>> I have very few gripes with it:
>>
>>   * The build description language is very simple (once you fully grok
>>     it), but could have done with a lot more example-based documentation.
>>   * It's missing a few features like recursive-directory scanning (for
>>     source files), and the ability to pipe the output from a program
>>     into a variable in the build script (e.g. C++FLAGS = `llvm-config
>>     --cxxflags`).
>>   * A convenient way to force all generated object and library files
>>     into a dedicated build folder. It's possible but not very easy to do.
>>   * I'm a big fan of convention over configuration, I know it's a very
>>     subjective topic but I like the way Maven3 and Gradle assume a
>>     project structure (that you can deviate from if you need to). This
>>     usually requires very good supporting documentation.
>>
>> The build script I put together for my project looked like this,
>> http://mysticpaste.com/private/TCcTE6KGxn .
>>
> Interesting points to keep in mind, thanks. After recently looking at Waf, I
> do agree with you that it'd be nice to, as you say, "assume a project
> structure (that you can deviate from if you need to)". Definitely some
> benefits to be gained from that.
>
>
>


More information about the Digitalmars-d mailing list