| Thread overview | |||||
|---|---|---|---|---|---|
|
May 14, 2011 Re: Best build tool for D projects | ||||
|---|---|---|---|---|
| ||||
Thanks for recommending Waf, I'll have a look at it.
On 14/05/11 08:54, Russel Winder wrote:
> Chris,
>
> On Fri, 2011-05-13 at 18:38 +0100, Chris Molozian wrote:
> [ . . . ]
>> * Jam (ftjam), cross-platform and platform independent build
>> language. Lots of variants with the same name, therefore
>> finding it hard to find good tutorials and documentation.
> Everyone I know who has used this either loves it (very few people) or
> hates it (almost everyone). The claim is the notation is poor, and you
> have to do lots of tweaking even of stuff that should be "out of the
> box".
>
>> * Boost.Build (bjam), not sure how it differs to ftjam.
> See above. From what I can tell an increasing number of Boost projects
> are moving away from this build framework.
>
> Based on the above I have never used it myself.
>
>> * Cook, can't find whether it can be built for use on Windows.
>> No pre-built Windows binary. Very extensive documentation,
>> although I think the default build file name is silly
>> "Howto.cook" :-) .
> I've not come across this one.
>
>> After all this preamble I guess what I'm asking is... what (if any)
>> cross-platform build tools does everyone use with their D projects?
>> Any feedback on experiences with any of the build tools I've mentioned
>> is also greatly appreciated. If you can suggest any alternatives,
>> please do.
>>
>> If you've read this far, thanks for taking the time to read it :-)
>> and sorry for the long message.
> No problem.
>
>> PS: I've seen the CMakeD module, I know a lot of people recommend
>> CMake for cross-platform builds and that the KDE guys use it. I have
>> tried to like it... but settled on hating it. The procedural language
>> is daft and ugly and I loathe the CMakeLists.txt file that goes in
>> each directory. I've already ruled it out.
> I can't say I blame you, I think there language is outrageously
> horrible.
>
> I am sure others will highlight a few other choices but the mainstream
> ones remain:
>
> Make
> Autotools
> CMake
> SCons
> Waf
>
> Personally I have abandoned Make and Autotools as being out of date and
> too crufty. Historically they are massively important systems, and so
> deserve praise and honour. But time has moved on and new lessons
> learned.
>
> CMake is out already.
>
> SCons is a Python-based, internal DSL system. I know the D support
> reasonably well as at some point 18 months ago I found myself deemed the
> official support for the D tool. SCons is truly great in some build
> situation -- it's really a Make replacement with some very interesting
> bells and whistles, and of course all the power of a dynamic language --
> but for other situations it can be slow and a bit clunky. My main use
> is its sweet spot, so I use it a lot.
>
> Waf was a system built on SCons, then it was a SCons fork, now it has
> evolved to be something different in its own right. It is Python based
> and is intended to be an Autotools replacement. Its real sweet spot is
> "whole-project, ship source, and build locally" or some subset thereof.
> I like Waf.
>
| ||||
May 18, 2011 Re: Best build tool for D projects | ||||
|---|---|---|---|---|
| ||||
Attachments:
| Thanks to everyone for the help and advice on choosing a build tool for my D+LLVM project. I settled on Jam (ftjam) in the end, the major factor being cross-platform support and prebuilt binaries for a variety of operating systems. The documentation for Jam I've found is very lacking but have struggled to put together a working build script. My Jamfile looks like this so far: ------------------------------------------------------------------------ /CC = dmd ; CCFLAGS = -fPIC -O -inline -release -w ; DFILES = src/main.d ; # should be scanned from src dir LINK = $(CC) ; LINKFLAGS = -L-lstdc++ -L-ldl ; C++ = g++ ; C++FLAGS = -I/usr/include -DNDEBUG -D_GNU_SOURCE -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -O3 -fomit-frame-pointer -fno-exceptions -fPIC -Woverloaded-virtual -Wcast-qual ; # should be generated from `llvm-config --cxxflags` # override the Link action to correct for the dmd compiler -o flag actions Link bind NEEDLIBS { $(LINK) $(LINKFLAGS) -of$(<) $(UNDEFS) $(>) $(NEEDLIBS) $(LINKLIBS) } Objects $(DFILES) ; MainFromObjects puckc : $(DFILES:S=.o) ; LinkLibraries puckc : libllvmd ; Library libllvmd : libs/llvm-2.9/Ext.cpp libs/llvm-2.9/Target.cpp ;/ ------------------------------------------------------------------------ I'm not very experienced dealing with linker errors, the build output shows these errors: ...found 152 target(s)... ...updating 5 target(s)... C++ libs/llvm-2.9/Ext.o C++ libs/llvm-2.9/Target.o Archive libllvmd.a ar: creating libllvmd.a Ranlib libllvmd.a Dc src/main.o Link puckc /usr/lib/gcc/x86_64-unknown-linux-gnu/4.6.0/../../../../lib/libphobos2.a(gcx_3d4_122.o): In function `_D2gc3gcx3Gcx4markMFPvPvZv': src/gc/gcx.d:(.text._D2gc3gcx3Gcx4markMFPvPvZv+0x165): undefined reference to `_D4core5bitop3btsFNbPmmZi' /usr/lib/gcc/x86_64-unknown-linux-gnu/4.6.0/../../../../lib/libphobos2.a(gcx_3d4_122.o): In function `_D2gc3gcx3Gcx11fullcollectMFPvZm': src/gc/gcx.d:(.text._D2gc3gcx3Gcx11fullcollectMFPvZm+0x3e4): undefined reference to `_D4core5bitop3bsfFNaNbmZi' src/gc/gcx.d:(.text._D2gc3gcx3Gcx11fullcollectMFPvZm+0x47f): undefined reference to `_D4core5bitop3bsfFNaNbmZi' src/gc/gcx.d:(.text._D2gc3gcx3Gcx11fullcollectMFPvZm+0x596): undefined reference to `_D4core5bitop3btrFNbPmmZi' src/gc/gcx.d:(.text._D2gc3gcx3Gcx11fullcollectMFPvZm+0x792): undefined reference to `_D4core5bitop3btrFNbPmmZi' /usr/lib/gcc/x86_64-unknown-linux-gnu/4.6.0/../../../../lib/libphobos2.a(lifetime_5c0_478.o): In function `_D2rt8lifetime11newCapacityFmmZm': src/rt/lifetime.d:(.text._D2rt8lifetime11newCapacityFmmZm+0x3a): undefined reference to `_D4core5bitop3bsrFNaNbmZi' /usr/lib/gcc/x86_64-unknown-linux-gnu/4.6.0/../../../../lib/libphobos2.a(gcbits_3c0_21c.o): In function `_D2gc6gcbits6GCBits9testClearMFmZm': src/gc/gcbits.d:(.text._D2gc6gcbits6GCBits9testClearMFmZm+0x18): undefined reference to `_D4core5bitop3btrFNbPmmZi' /usr/lib/gcc/x86_64-unknown-linux-gnu/4.6.0/../../../../lib/libphobos2.a(gcbits_3c0_21c.o): In function `_D2gc6gcbits6GCBits7testSetMFmZm': src/gc/gcbits.d:(.text._D2gc6gcbits6GCBits7testSetMFmZm+0x18): undefined reference to `_D4core5bitop3btsFNbPmmZi' /usr/lib/gcc/x86_64-unknown-linux-gnu/4.6.0/../../../../lib/libphobos2.a(array_13b_5f7.o): In function `_D3std5array16__T8AppenderTAaZ8Appender11newCapacityFmZm': std/array.d:(.text._D3std5array16__T8AppenderTAaZ8Appender11newCapacityFmZm+0x1a): undefined reference to `_D4core5bitop3bsrFNaNbmZi' /usr/lib/gcc/x86_64-unknown-linux-gnu/4.6.0/../../../../lib/libphobos2.a(bitmanip_18c_31e.o): In function `_D3std8bitmanip8BitArray7opIndexMxFmZb': std/bitmanip.d:(.text._D3std8bitmanip8BitArray7opIndexMxFmZb+0x15): undefined reference to `_D4core5bitop2btFNaNbxPmmZi' /usr/lib/gcc/x86_64-unknown-linux-gnu/4.6.0/../../../../lib/libphobos2.a(bitmanip_18c_31e.o): In function `_D3std8bitmanip8BitArray13opIndexAssignMFbmZb': std/bitmanip.d:(.text._D3std8bitmanip8BitArray13opIndexAssignMFbmZb+0x1f): undefined reference to `_D4core5bitop3btsFNbPmmZi' std/bitmanip.d:(.text._D3std8bitmanip8BitArray13opIndexAssignMFbmZb+0x2e): undefined reference to `_D4core5bitop3btrFNbPmmZi' /usr/lib/gcc/x86_64-unknown-linux-gnu/4.6.0/../../../../lib/libphobos2.a(array_76d_638.o): In function `_D3std5array17__T8AppenderTAyaZ8Appender11newCapacityFmZm': std/array.d:(.text._D3std5array17__T8AppenderTAyaZ8Appender11newCapacityFmZm+0x1a): undefined reference to `_D4core5bitop3bsrFNaNbmZi' /usr/lib/gcc/x86_64-unknown-linux-gnu/4.6.0/../../../../lib/libphobos2.a(numeric_86a_120.o): In function `_D3std7numeric3Fft6__ctorMFAfZC3std7numeric3Fft': std/numeric.d:(.text._D3std7numeric3Fft6__ctorMFAfZC3std7numeric3Fft+0x5f): undefined reference to `_D4core5bitop3bsfFNaNbmZi' /usr/lib/gcc/x86_64-unknown-linux-gnu/4.6.0/../../../../lib/libphobos2.a(numeric_86c_4d8.o): In function `_D3std7numeric12isPowerOfTwoFmZb': std/numeric.d:(.text._D3std7numeric12isPowerOfTwoFmZb+0xd): undefined reference to `_D4core5bitop3bsrFNaNbmZi' std/numeric.d:(.text._D3std7numeric12isPowerOfTwoFmZb+0x1b): undefined reference to `_D4core5bitop3bsfFNaNbmZi' /usr/lib/gcc/x86_64-unknown-linux-gnu/4.6.0/../../../../lib/libphobos2.a(numeric_872_5ab.o): In function `_D3std7numeric14__T6StrideTAfZ6Stride6nStepsMFNdmZm': std/numeric.d:(.text._D3std7numeric14__T6StrideTAfZ6Stride6nStepsMFNdmZm+0x2a): undefined reference to `_D4core5bitop3bsfFNaNbmZi' /usr/lib/gcc/x86_64-unknown-linux-gnu/4.6.0/../../../../lib/libphobos2.a(array_162_6f0.o): In function `_D3std5array18__T8AppenderTAAyaZ8Appender11newCapacityFmZm': std/array.d:(.text._D3std5array18__T8AppenderTAAyaZ8Appender11newCapacityFmZm+0x1e): undefined reference to `_D4core5bitop3bsrFNaNbmZi' collect2: ld returned 1 exit status --- errorlevel 1 dmd -L-lstdc++ -L-ldl -ofpuckc src/main.o libllvmd.a ...failed Link puckc ... ...failed updating 1 target(s)... ...updated 4 target(s)... Anyone got any experience using Jam or advice and help on solving the link errors. Cheers, Chris On 13/05/11 18:38, Chris Molozian wrote: > Hey All, > > This is my first post to the mailing list, I'm an avid follower of D's development and am currently using it to develop a compiler for my thesis work. One of the goals of this stage of the development work is to provide a simple build environment to compile the codebase on Linux, Windows and Mac OS X. The only complex aspects of the build process is compiling the LLVM-D bindings and linking to LLVM. > > I'm evaluating build tools for this purpose and have concluded (correct me if I'm wrong) that the D-orientated build tools: Bud <http://www.dsource.org/projects/build> and DSSS <http://www.dsource.org/projects/dsss> are abandoned. I'm not sure whether development on xfBuild <https://bitbucket.org/h3r3tic/xfbuild/overview> is still going on. > > I'd like to use a tool that is easy for testers to install on their system (preferably pre-built binaries are available) and use to compile my work. I've been looking at C/C++ build tools and have narrowed it down to these: > > * Jam (ftjam) <http://www.freetype.org/jam/index.html>, > cross-platform and platform independent build language. Lots of > variants with the same name, therefore finding it hard to find > good tutorials and documentation. > * Boost.Build (bjam) <http://www.boost.org/boost-build2/>, not > sure how it differs to ftjam. > * Cook <http://miller.emu.id.au/pmiller/software/cook/>, can't > find whether it can be built for use on Windows. No pre-built > Windows binary. Very extensive documentation, although I think > the default build file name is silly "Howto.cook" :-) . > > After all this preamble I guess what I'm asking is... what (if any) cross-platform build tools does everyone use with their D projects? Any feedback on experiences with any of the build tools I've mentioned is also greatly appreciated. If you can suggest any alternatives, please do. > > If you've read this far, thanks for taking the time to read it :-) and sorry for the long message. > > Cheers, > > Chris > > PS: I've seen the CMakeD <http://www.dsource.org/projects/cmaked> module, I know a lot of people recommend CMake for cross-platform builds and that the KDE guys use it. I have tried to like it... but settled on hating it. The procedural language is daft and ugly and I loathe the CMakeLists.txt file that goes in each directory. I've already ruled it out. > | |||
May 18, 2011 Re: Best build tool for D projects | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Chris Molozian | Can you build a simple hello world program with just: dmd hello.d The build can't find the phobos/druntime libraries for linking. Chris Molozian Wrote: [Stuff] | |||
Copyright © 1999-2021 by the D Language Foundation
Permalink
Reply