digitalmars.D.learn - Starting D with a project in mind.
- Andrew (22/22) Oct 10 2013 Hi All,
- Adam D. Ruppe (15/18) Oct 10 2013 I haven't done a serious program on the Pi, but I was able to get
- qznc (7/27) Oct 10 2013 As Adam already said D on Pi is adventurous.
- Andrew (12/18) Oct 11 2013 Thanks both. Well after several hours of hacking I have
- Stefan Frijters (15/37) Oct 11 2013 Hi, I don't know which instructions you followed, but building
- Andrew (7/7) Oct 14 2013 Thanks Stefan, those were the instructions that I tried.
- Stefan Frijters (30/38) Oct 14 2013 Hi, I actually managed to build GDC over the weekend, directly on
- Andrew (15/15) Oct 14 2013 Hallelujah - it's built ! Thanks Stefan for the link to the ARM
- Adam D. Ruppe (16/20) Oct 14 2013 gdc makes kinda large executables... but with my gdc cross
- Andrew (26/26) Oct 15 2013 I've successfully built Pegged and I'm now trying to build vibe.d
- Dicebot (6/8) Oct 15 2013 What is your GDC version? Looks like one with pre-2.063 front-end
- Andrew (12/17) Oct 15 2013 I think it's the latest version of GDC :-
- Dicebot (25/33) Oct 15 2013 Ugh, don't know about ARM build but GDC itself currently supports
- Stefan Frijters (5/9) Oct 15 2013 Looking at https://github.com/jpf91/GDC/commits/arm , 2.063.2
- Andrew (4/8) Oct 15 2013 2.062 was mentioned on the GDC website as the latest supported
- Dicebot (5/13) Oct 15 2013 Can you check the output for this micro-program on your GDC?
- Andrew (1/3) Oct 15 2013 2060L - seems I'm further advanced than everybody else :-)
- Andrew (2/3) Oct 15 2013 Sorry, I thought it was 2.052, but now I see it's well behind
- Stefan Frijters (8/11) Oct 15 2013 Aha, oops, I have the same 2060L, but that is presumably because
- Andrew (14/21) Oct 15 2013 My build, from GDC master, went really well until it got to
- Dicebot (12/20) Oct 15 2013 Those .d files are essentially just that - ported C headers so
- Andrew (8/15) Oct 15 2013 I was hoping to actually learn D before I had to maintain it :-)
- Dicebot (9/10) Oct 16 2013 You are welcome. D development is pure open-source movement with
- Brad Roberts (5/9) Oct 15 2013 I think you mean catch-22 rather than dead-end. There's not more people...
- Dicebot (4/9) Oct 16 2013 In my opinion "catch-22" is partial case of a dead-end -
- Dicebot (4/4) Oct 15 2013 P.S. I'd recommend to try to contact Johannes Pfau and ask if he
- Andrew (16/16) Oct 15 2013 After roughly hacking all of the 'static assert "unimplemented"'
- Andrew (9/18) Oct 16 2013 Giving up on dub, I tried niaively to build one of the vibe.d
- Stefan Frijters (10/31) Oct 16 2013 As far as I know deimos is a set of official (?) bindings for
- Andrew (6/15) Oct 16 2013 I've been using a Cubieboard A20, it's much better than a RPi as
- Stefan Frijters (17/32) Oct 16 2013 Ok, I logged onto my Pi during lunch break, and actually the
- Andrew (37/37) Oct 16 2013 I'm a very happy man ! Everything is built and working including
- Stefan Frijters (7/44) Oct 16 2013 Cool. I was posting in the D.GNU newsgroup about this when I
- simendsjo (3/40) Oct 16 2013 This is very cool. You should add it to the wiki so it doesn't
- Andrew (25/25) Oct 17 2013 Does anybody know if this is now fixed ? :-
- Dicebot (16/18) Oct 16 2013 This is something I have used with vibe.d in absence of dub
- Dicebot (8/17) Oct 16 2013 Here the problem is that your install script has provided only
- H. S. Teoh (8/13) Oct 15 2013 Wow that's pretty old. The current language version supported by GDC is
Hi All, I've been writing a MUD for a little while, initially using Haskell but now using C. I develop on MacOS X but deploy to a Raspberry Pi. I loved using Haskell especially using the Parsec parser but unfortunately I couldn't build on the Pi because the resource requirements were just too heavy. Now I develop in C and the same Makefile builds on Mac and Debian equally well and of course I can use the lovely Xcode environment. However, as I start to add more advanced features it's getting rather tedious. The MUD has an embedded web server which supports web sockets for real time play and the back end is a Mongo DB. The C code to access DB is very repetitive and is slowing me down because of the lack of higher level constructs. Similarly the parser is very basic and ropey which needs attention. Hence my interest in D. I've spent a few hours trying to get GDC working on my Pi which is proving to be a bitch but I'm hoping that it will be worth it. Before I get too far down this path, would you recommend D for this task and will porting from Mac to Pi be seamless ? Thanks Andrew
Oct 10 2013
On Thursday, 10 October 2013 at 19:49:15 UTC, Andrew wrote:Hence my interest in D. I've spent a few hours trying to get GDC working on my Pi which is proving to be a bitch but I'm hoping that it will be worth it.I haven't done a serious program on the Pi, but I was able to get gdc and some test programs to compile and run successfully for it. Took me a couple hours too, the way I did it was with a crosstool-ng thingy: http://gdcproject.org/wiki/Cross%20Compiler/crosstool-NG so I can compile it on my Linux desktop for the pi. I did hit one druntime bug in the process, but I believe it has already been fixed so you hopefully won't have to deal with that. The biggest problem I had was at first I didn't use the gnu-eabi option. I think that was in compiling druntime, not sure though, my memory is failing as this was several months ago when I played with it. Bottom line though is I know it is possible, but I don't know how seamless it will be with a larger program.
Oct 10 2013
On Thursday, 10 October 2013 at 19:49:15 UTC, Andrew wrote:Hi All, I've been writing a MUD for a little while, initially using Haskell but now using C. I develop on MacOS X but deploy to a Raspberry Pi. I loved using Haskell especially using the Parsec parser but unfortunately I couldn't build on the Pi because the resource requirements were just too heavy. Now I develop in C and the same Makefile builds on Mac and Debian equally well and of course I can use the lovely Xcode environment. However, as I start to add more advanced features it's getting rather tedious. The MUD has an embedded web server which supports web sockets for real time play and the back end is a Mongo DB. The C code to access DB is very repetitive and is slowing me down because of the lack of higher level constructs. Similarly the parser is very basic and ropey which needs attention. Hence my interest in D. I've spent a few hours trying to get GDC working on my Pi which is proving to be a bitch but I'm hoping that it will be worth it. Before I get too far down this path, would you recommend D for this task and will porting from Mac to Pi be seamless ?As Adam already said D on Pi is adventurous. For MongoDB and web stuff, you should look into Vibe.d [0]. For parsing I would suggest Pegged [1]. Welcome to D and Happy Hacking! :) [0] http://vibed.org/ [1] https://github.com/PhilippeSigaud/Pegged
Oct 10 2013
As Adam already said D on Pi is adventurous. For MongoDB and web stuff, you should look into Vibe.d [0]. For parsing I would suggest Pegged [1]. Welcome to D and Happy Hacking! :) [0] http://vibed.org/ [1] https://github.com/PhilippeSigaud/PeggedThanks both. Well after several hours of hacking I have spectacularly failed to build GDC on any arm based debian environment - tried both my RPi and Cubieboard. In both cases it fails with a pile of compilation errors. I'm guessing that D just isn't mainstream enough at the moment to be properly supported on Debian and yet it's too big and complicated to build easily yourself and so it's probably a non-starter for me at the moment. There is a pre-built package on debian gdc-4.4 but it's too old to build vibe or dub from my experimentation. I guess I'll go back to plain old C. Thanks anyway - I'll check back in a few years.
Oct 11 2013
On Friday, 11 October 2013 at 07:09:17 UTC, Andrew wrote:Hi, I don't know which instructions you followed, but building GDC for the Pi was slow (overnight job) but in the end relatively pain free for me using these instructions: http://gdcproject.org/wiki/Raspberry%20Pi/build/Raspbian%28Har float%29/GCC-Devel. This was some time ago however (more than a year by now, wow), so I don't know if some change has broken the process since. I don't think I have the SD card with GDC installed anymore so I don't know for sure which version I built at the time. I think it was based on 2.0.59 still. See also http://forum.dlang.org/thread/kpdcgoynlofeosxajwgc forum.dlang.org. When I have some free time I will fire up one of my Pis and give it a try again and report back. Cheers, StefanAs Adam already said D on Pi is adventurous. For MongoDB and web stuff, you should look into Vibe.d [0]. For parsing I would suggest Pegged [1]. Welcome to D and Happy Hacking! :) [0] http://vibed.org/ [1] https://github.com/PhilippeSigaud/PeggedThanks both. Well after several hours of hacking I have spectacularly failed to build GDC on any arm based debian environment - tried both my RPi and Cubieboard. In both cases it fails with a pile of compilation errors. I'm guessing that D just isn't mainstream enough at the moment to be properly supported on Debian and yet it's too big and complicated to build easily yourself and so it's probably a non-starter for me at the moment. There is a pre-built package on debian gdc-4.4 but it's too old to build vibe or dub from my experimentation. I guess I'll go back to plain old C. Thanks anyway - I'll check back in a few years.
Oct 11 2013
Thanks Stefan, those were the instructions that I tried. With GDC, is it possible to generate portable intermediate C code so that I can compile D sources on the Mac and then just copy the resultant C code to an ARM debian machine and build that there ? That would allow me to work around the problem of not being able to build D directly on the target system. Thanks
Oct 14 2013
On Monday, 14 October 2013 at 07:36:03 UTC, Andrew wrote:Thanks Stefan, those were the instructions that I tried. With GDC, is it possible to generate portable intermediate C code so that I can compile D sources on the Mac and then just copy the resultant C code to an ARM debian machine and build that there ? That would allow me to work around the problem of not being able to build D directly on the target system. ThanksHi, I actually managed to build GDC over the weekend, directly on the RPi. It required some small changes to the process as compared to [1]: - Fresh raspbian install (same). - Installed the packages (same). - Set up swap USB HD (same). - I got gcc-4.8.1 release sources, didn't apply the patches (seems they are already in place now), nor did I rerun the autoconf. I then proceeded to clone GDC, run the scripts and build, however I ran into a set of bugs[2]. I tried to get around those with my limited knowledge but got stuck. Luckily Johannes Pfau has been doing some great work as usual and already fixed these problems (mostly) in his fork / ARM branch [3]. So I redid this part of the process, with a fresh GCC source directory, using a clone of his fork, and the compilation ran to completion. A small test program also worked, but Johannes warned that there is some codegen issue in his fork, which is why he hasn't opened a pull request to merge into GDC proper yet[2]. I don't know the details of that but this might be good enough for now for your purposes. I assume that by the time 2.064 comes around and GDC's frontend is update one can go back to the main GDC master branch, as most fixes are already in druntime as well. Cheers, Stefan [1] http://gdcproject.org/wiki/Raspberry%20Pi/build/Raspbian%28Hardfloat%29/GCC-Devel [2] http://bugzilla.gdcproject.org/show_bug.cgi?id=80 [3] https://github.com/jpf91/GDC/tree/arm
Oct 14 2013
Hallelujah - it's built ! Thanks Stefan for the link to the ARM fork, that and a pile of messing about with float ABI types and I managed to get it built and installed on my Cubieboard A20 (ARM7 debian distro). So now I compile Hello World and I get a 2MB executable ! This compares with 8kb for the same in C. Have I done something wrong ? I can understand that it has GC and UTF8 with bounds checking so I was expecting maybe 100kb. Does it need to be stripped or optimised in some way ? Surely only the used functions get linked in. My current C code has an embedded web server, json libraries and mongodb client and it's 80kb - what can I expect for the same thing in D ? Thanks Andrew
Oct 14 2013
On Monday, 14 October 2013 at 20:59:25 UTC, Andrew wrote:So now I compile Hello World and I get a 2MB executable !gdc makes kinda large executables... but with my gdc cross compiler for arm, the hello world is 360 KB after stripping, but I used printf instead of writefln. phobos is pretty bad about its dependencies - use writef() and it pulls 20 modules. But even so 2MB is 5x bigger than it should be...My current C code has an embedded web server, json libraries and mongodb client and it's 80kb - what can I expect for the same thing in D ?D's size cost is mostly up-front - hello world bears the brunt of the size and increases after that are small (since the hello world already includes most that functionality due to the web of dependencies!). I'd estimate your size to be between 500 KB and 2.5 MB once you get all your functionality in. You *can* go much smaller if you don't touch phobos at all, writing your D with just C libraries. Then it'll be probably around 400 KB like my hello world test - still the size of grabbing druntime, but you don't get the phobos functions.
Oct 14 2013
I've successfully built Pegged and I'm now trying to build vibe.d which requires dub so ... andrew islay:~$ cd dub-0.9.18/ andrew islay:~/dub-0.9.18$ ls bin build-files.txt CHANGELOG.md examples LICENSE_DE.txt package.json source build.cmd build.sh curl.lib installer LICENSE.txt README.md andrew islay:~/dub-0.9.18$ ./build.sh Generating version file... fatal: Not a git repository (or any parent up to mount point /data) Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set). Running gdmd... source/dub/internal/std/processcompat.d:301: Error: no identifier for declarator args2 source/dub/internal/std/processcompat.d:301: Error: alias cannot have initializer source/dub/internal/std/processcompat.d:315: Error: no identifier for declarator args2 source/dub/internal/std/processcompat.d:315: Error: alias cannot have initializer andrew islay:~/dub-0.9.18$ Any ideas what I'm doing wrong ? Thanks for all of the hand-holding BTW.
Oct 15 2013
On Tuesday, 15 October 2013 at 12:31:49 UTC, Andrew wrote:Any ideas what I'm doing wrong ? Thanks for all of the hand-holding BTW.What is your GDC version? Looks like one with pre-2.063 front-end as it does not support `alias X = ...` syntax. vibe.d developers do try to support latest two released front-end versions but it is not as easy as it sounds (I hope situation will improve a lot once CI is finally up and running for vibe,d)
Oct 15 2013
What is your GDC version? Looks like one with pre-2.063 front-end as it does not support `alias X = ...` syntax. vibe.d developers do try to support latest two released front-end versions but it is not as easy as it sounds (I hope situation will improve a lot once CI is finally up and running for vibe,d)I think it's the latest version of GDC :- https://github.com/jpf91/GDC/tree/arm which apparently supports 2.062. In the D community, is there not the concept of stable releases that all tools and libraries support or is it a free for all i.e. nothing works together ? Can I get an earlier version of vibe.d that is compatible with GDC ? I notice that dub must be using a different version of phobos also :- andrew islay:~/dub/source$ gdmd app.d dub/packagemanager.d:21: Error: module sha is in file 'std/digest/sha.d' which cannot be read Is this something I can update easily ?
Oct 15 2013
On Tuesday, 15 October 2013 at 14:38:32 UTC, Andrew wrote:I think it's the latest version of GDC :- https://github.com/jpf91/GDC/tree/arm which apparently supports 2.062.Ugh, don't know about ARM build but GDC itself currently supports 2.063.2 version for both 4.8 and 4.9 branch.In the D community, is there not the concept of stable releases that all tools and libraries support or is it a free for all i.e. nothing works together ? Can I get an earlier version of vibe.d that is compatible with GDC ?Generally, only latest DMD release + latest library release are guaranteed to work. It is a big and complicated problem to get this right. First, all 3 major compilers have incompatible ABI so they need whole own library stack built starting with druntime / phobos. Second, bigger cross-platform programs like vibe.d have lot of version definitions that change behavior considerably (for example, various event drivers for vibe.d), on top of usual OS / processor versioning. Combined together that creates an exponential configuration count that is almost impossible to test manually. Sonke (vibe.d author) has recently recognized what a disaster this creates and right now adding Continuous Integration testing is high priority target - but this is still work-in-progress. As a result, with every small step from configuration common among library/program developers (usually it is latest DMD + x64_86 + Linux/Windows) probability of something breaking bad is damn high. Actually, I don't know if vibe.d has ever been tested with GDC at all.Is this something I can update easily ?If rebuilding GDC from sources so that it will catch 2.063.2 frontend version is an option - it may help.
Oct 15 2013
On Tuesday, 15 October 2013 at 14:56:06 UTC, Dicebot wrote:On Tuesday, 15 October 2013 at 14:38:32 UTC, Andrew wrote:Looking at https://github.com/jpf91/GDC/commits/arm , 2.063.2 support is also included in the ARM branch, cf. commit 1aa5755 from June 30, so you should have it already I think. Where did you get the 2.062 info from?Is this something I can update easily ?If rebuilding GDC from sources so that it will catch 2.063.2 frontend version is an option - it may help.
Oct 15 2013
Looking at https://github.com/jpf91/GDC/commits/arm , 2.063.2 support is also included in the ARM branch, cf. commit 1aa5755 from June 30, so you should have it already I think. Where did you get the 2.062 info from?2.062 was mentioned on the GDC website as the latest supported D2. So I'm thoroughly confused then, why won't dub build as it looks as though it didn't support aliases and the phobos library looks as though it has sha1 missing ?
Oct 15 2013
On Tuesday, 15 October 2013 at 18:41:50 UTC, Andrew wrote:Can you check the output for this micro-program on your GDC? ``` pragma(msg, __VERSION__); ```Looking at https://github.com/jpf91/GDC/commits/arm , 2.063.2 support is also included in the ARM branch, cf. commit 1aa5755 from June 30, so you should have it already I think. Where did you get the 2.062 info from?2.062 was mentioned on the GDC website as the latest supported D2. So I'm thoroughly confused then, why won't dub build as it looks as though it didn't support aliases and the phobos library looks as though it has sha1 missing ?
Oct 15 2013
pragma(msg, __VERSION__); ```2060L - seems I'm further advanced than everybody else :-)
Oct 15 2013
2060L - seems I'm further advanced than everybody else :-)Sorry, I thought it was 2.052, but now I see it's well behind since it should be 2.063. I'm rebuilding again from the master.
Oct 15 2013
On Tuesday, 15 October 2013 at 19:23:13 UTC, Andrew wrote:Aha, oops, I have the same 2060L, but that is presumably because I forgot to 'git checkout arm', and the master branch on Johannes' fork is not up-to-date. The reason why this works while normal GDC doesn't is that this is so old it doesn't include some explicit architecture static ifs that were added later (and for which ARM was not available for some time). I'm going to let this stuff rebuild overnight...2060L - seems I'm further advanced than everybody else :-)Sorry, I thought it was 2.052, but now I see it's well behind since it should be 2.063. I'm rebuilding again from the master.
Oct 15 2013
Aha, oops, I have the same 2060L, but that is presumably because I forgot to 'git checkout arm', and the master branch on Johannes' fork is not up-to-date. The reason why this works while normal GDC doesn't is that this is so old it doesn't include some explicit architecture static ifs that were added later (and for which ARM was not available for some time). I'm going to let this stuff rebuild overnight...My build, from GDC master, went really well until it got to libphobos and then there were many architecture specific bits of code that just didn't include any ARM directives so it's probably currently impossible to build the latest libphobos on ARM. I tried comparing the ARM fork but it was massively different and it looks like libphobos has been mostly rewritten since then. I don't really understand why there are so many .d files that just seem to wrap standard os stuff - why not just use the standard installed C headers and avoid all of this overhead that needs maintaining ? Interestingly the gcc Go compiler that is also included with gcc 4.8 built and installed first time so I'm rather tempted to just to give up with D as this point after a valiant battle for the last few days.
Oct 15 2013
On Tuesday, 15 October 2013 at 22:28:59 UTC, Andrew wrote:I don't really understand why there are so many .d files that just seem to wrap standard os stuff - why not just use the standard installed C headers and avoid all of this overhead that needs maintaining ?Those .d files are essentially just that - ported C headers so that you don't need to declared these functions manually. You can easily re-generated those from actual system C headers using tool like https://github.com/jacob-carlborg/dstepInterestingly the gcc Go compiler that is also included with gcc 4.8 built and installed first time so I'm rather tempted to just to give up with D as this point after a valiant battle for the last few days.Unfortunately, this is an area where difference in developer count is really notable. It is a dead end - support for more exotic platforms like ARM is lacking because there too few people who need it and new bypassers are scared from further investigation because of lacking support. There is hardly anything we can do until some volunteer will appear who is willing to champion this.
Oct 15 2013
Unfortunately, this is an area where difference in developer count is really notable. It is a dead end - support for more exotic platforms like ARM is lacking because there too few people who need it and new bypassers are scared from further investigation because of lacking support. There is hardly anything we can do until some volunteer will appear who is willing to champion this.I was hoping to actually learn D before I had to maintain it :-) ARM is hardly exotic, it's the best selling CPU by a large margin. I bet even Microsoft ships more ARM Windows licences than it does Intel now. I'll have a look at that dstep util and see if I can contribute some patches back in order to save some other hapless fool like myself from suffering the same pain. Thanks for your patience supporting me BTW.
Oct 15 2013
On Tuesday, 15 October 2013 at 23:03:15 UTC, Andrew wrote:Thanks for your patience supporting me BTW.You are welcome. D development is pure open-source movement with all its pros and cons - almost anyone here will gladly help you not only because we care about a good public image but because it gives a chance that you may investigate and improve situation in currently under-explored domain, to the greater community benefit. It is very important to have someone with personal interest in such development areas, helping with few cheap advises is the very least we can do :)
Oct 16 2013
On 10/15/13 3:38 PM, Dicebot wrote:Unfortunately, this is an area where difference in developer count is really notable. It is a dead end - support for more exotic platforms like ARM is lacking because there too few people who need it and new bypassers are scared from further investigation because of lacking support. There is hardly anything we can do until some volunteer will appear who is willing to champion this.I think you mean catch-22 rather than dead-end. There's not more people helping support ARM due to ARM not yet working well, so there's no developers. ARM's not exotic, it's just not on as many people's desktops. Thats been changing rapidly over the last several years.
Oct 15 2013
On Tuesday, 15 October 2013 at 23:16:07 UTC, Brad Roberts wrote:I think you mean catch-22 rather than dead-end. There's not more people helping support ARM due to ARM not yet working well, so there's no developers. ARM's not exotic, it's just not on as many people's desktops. Thats been changing rapidly over the last several years.In my opinion "catch-22" is partial case of a dead-end - something that blocks your effective forward movement :) ARM support is rather exotic among projects of current D users.
Oct 16 2013
P.S. I'd recommend to try to contact Johannes Pfau and ask if he has any plans for updating his ARM Phobos fork to recent version. Such changes should be probably integrated Phobos upstream eventually.
Oct 15 2013
After roughly hacking all of the 'static assert "unimplemented"' lines in libphobos to just do whatever X86 does, I got it to build and install. Now I'm on 2063L and now hello world builds to 8MB instead of 2MB (although it strips to 760k - twice the previous version). So now I resume my quest to build vibe.d by first trying to build dub and I get :- andrew islay:~/dub$ ./build.sh Generating version file... Running gdmd... /usr/local/gdc/include/d/4.8.2/armv7l-unknown-linux-gnueabihf/core/time.di:224: error: this cannot be interpreted at compile time, because it has no available source code /usr/local/gdc/include/d/4.8.2/std/net/curl.d:195: note: called from here: dur(2L) line 224 is trying to instantiate a Duration object. Any ideas ?
Oct 15 2013
andrew islay:~/dub$ ./build.sh Generating version file... Running gdmd... /usr/local/gdc/include/d/4.8.2/armv7l-unknown-linux-gnueabi f/core/time.di:224: error: this cannot be interpreted at compile time, because it has no available source code /usr/local/gdc/include/d/4.8.2/std/net/curl.d:195: note: called from here: dur(2L) line 224 is trying to instantiate a Duration object. Any ideas ?Giving up on dub, I tried niaively to build one of the vibe.d samples directly :- andrew islay:~/vibe.d/examples/http_server/source$ gdmd -I~/vibe.d/source app.d /data/home/andrew/vibe.d/source/vibe/stream/ssl.d:43: error: module bio is in file 'deimos/openssl/bio.d' which cannot be read Looks like I'm missing some openssl dependencies, where do these come from as they don't appear to be part of phobos ? Thanks
Oct 16 2013
On Wednesday, 16 October 2013 at 07:52:44 UTC, Andrew wrote:As far as I know deimos is a set of official (?) bindings for common C libraries. I don't know dub's build process but I assume that if the build script would have worked for you it would have attempted to clone this repo https://github.com/D-Programming-Deimos/openssl (you can find more bindings if you go up one level). My gdc build hadn't finished yet when I had to leave for work this morning, but I'll try to build dub tonight, to see if I run into the same problems...andrew islay:~/dub$ ./build.sh Generating version file... Running gdmd... /usr/local/gdc/include/d/4.8.2/armv7l-unknown-linux-gnueabi f/core/time.di:224: error: this cannot be interpreted at compile time, because it has no available source code /usr/local/gdc/include/d/4.8.2/std/net/curl.d:195: note: called from here: dur(2L) line 224 is trying to instantiate a Duration object. Any ideas ?Giving up on dub, I tried niaively to build one of the vibe.d samples directly :- andrew islay:~/vibe.d/examples/http_server/source$ gdmd -I~/vibe.d/source app.d /data/home/andrew/vibe.d/source/vibe/stream/ssl.d:43: error: module bio is in file 'deimos/openssl/bio.d' which cannot be read Looks like I'm missing some openssl dependencies, where do these come from as they don't appear to be part of phobos ? Thanks
Oct 16 2013
As far as I know deimos is a set of official (?) bindings for common C libraries. I don't know dub's build process but I assume that if the build script would have worked for you it would have attempted to clone this repo https://github.com/D-Programming-Deimos/openssl (you can find more bindings if you go up one level). My gdc build hadn't finished yet when I had to leave for work this morning, but I'll try to build dub tonight, to see if I run into the same problems...I've been using a Cubieboard A20, it's much better than a RPi as it has 1GB RAM, dual core armv7 and much better IO including on-board SATA for $50. The gcc /gdc build takes around 2 - 3 hours on that. You'll probably run into the same libphobos issues that I had, since there are many places where there are no ARM headers.
Oct 16 2013
On Wednesday, 16 October 2013 at 09:11:16 UTC, Andrew wrote:Ok, I logged onto my Pi during lunch break, and actually the compilation process went fine, and pragma(msg, __VERSION__); now correctly has 2063L as output. So in my recent experience: - GDC master branch doesn't compile properly, because it's missing the ARM-specific code. - GDC-jp91 master branch compiles, but is based on 2.060 and is too old to be useful. - GDC-jp91 arm branch seems to work, although Johannes has warned that there is some codegen bug when compiling with -O2. This is all now a bit confusing, but I expect GDC master branch to compile again for ARM when either frontend version 2.064 is released and merged into GDC (in a few weeks hopefully?), or Johannes' arm fork is merged into GDC (whenever he has time to find and fix his codegen bug). Then everything would be (relatively) easy again... Looking into dub / vibe.d is out of my lunch scope :-PAs far as I know deimos is a set of official (?) bindings for common C libraries. I don't know dub's build process but I assume that if the build script would have worked for you it would have attempted to clone this repo https://github.com/D-Programming-Deimos/openssl (you can find more bindings if you go up one level). My gdc build hadn't finished yet when I had to leave for work this morning, but I'll try to build dub tonight, to see if I run into the same problems...I've been using a Cubieboard A20, it's much better than a RPi as it has 1GB RAM, dual core armv7 and much better IO including on-board SATA for $50. The gcc /gdc build takes around 2 - 3 hours on that. You'll probably run into the same libphobos issues that I had, since there are many places where there are no ARM headers.
Oct 16 2013
I'm a very happy man ! Everything is built and working including dub and the http_server example from vibe.d. It's slow to build, but it executes quickly and strips down to about 3MB which is heavy but tolerable. Thanks to everybody for the help, now I can start learning D, exploring vibe.d and Pegged and hopefully make some good progress on my MUD. So to recap, to help anybody else building on ARM these are the steps I took :- mkdir gdc cd gdc wget http://gcc.igor.onlinedirect.bg/snapshots/LATEST-4.8/gcc-4.8-20131010.tar.bz2 tar xvf gcc-4.8-20131010.tar.bz2 git clone https://github.com/jpf91/GDC.git arm_gdc cd arm_gdc git checkout arm ./setup-gcc.sh ../gcc-4.8-20131010 cd ../ mkdir build cd build export C_INCLUDE_PATH=/usr/include/$(gcc -print-multiarch) export EXTRA_CONF="-mfloat-abi=hard --with-float=hard" ../gcc-4.8-20131010/configure --enable-languages=d --disable-bootstrap --prefix=/usr/local/gdc --disable-multilib --disable-softfloat --with-float=hard make -j2 sudo make install sudo cp ../arm_gdc/libphobos/libdruntime/core/time.d /usr/local/gdc/include/d/4.8.2/armv7l-unknown-linux-gnueabihf/core sudo mv /usr/local/gdc/include/d/4.8.2/armv7l-unknown-linux-gnueabihf/core/time.di /usr/local/gdc/include/d/4.8.2/armv7l-unknown-linux-gnueabihf/core/time.di.old I don't know why that last step was necessary but dub and a few other things didn't build without it. After that dub built fine once I'd hacked the build file to use gdc.
Oct 16 2013
On Wednesday, 16 October 2013 at 19:18:53 UTC, Andrew wrote:I'm a very happy man ! Everything is built and working including dub and the http_server example from vibe.d. It's slow to build, but it executes quickly and strips down to about 3MB which is heavy but tolerable. Thanks to everybody for the help, now I can start learning D, exploring vibe.d and Pegged and hopefully make some good progress on my MUD. So to recap, to help anybody else building on ARM these are the steps I took :- mkdir gdc cd gdc wget http://gcc.igor.onlinedirect.bg/snapshots/LATEST-4.8/gcc-4.8-20131010.tar.bz2 tar xvf gcc-4.8-20131010.tar.bz2 git clone https://github.com/jpf91/GDC.git arm_gdc cd arm_gdc git checkout arm ./setup-gcc.sh ../gcc-4.8-20131010 cd ../ mkdir build cd build export C_INCLUDE_PATH=/usr/include/$(gcc -print-multiarch) export EXTRA_CONF="-mfloat-abi=hard --with-float=hard" ../gcc-4.8-20131010/configure --enable-languages=d --disable-bootstrap --prefix=/usr/local/gdc --disable-multilib --disable-softfloat --with-float=hard make -j2 sudo make install sudo cp ../arm_gdc/libphobos/libdruntime/core/time.d /usr/local/gdc/include/d/4.8.2/armv7l-unknown-linux-gnueabihf/core sudo mv /usr/local/gdc/include/d/4.8.2/armv7l-unknown-linux-gnueabihf/core/time.di /usr/local/gdc/include/d/4.8.2/armv7l-unknown-linux-gnueabihf/core/time.di.old I don't know why that last step was necessary but dub and a few other things didn't build without it. After that dub built fine once I'd hacked the build file to use gdc.Cool. I was posting in the D.GNU newsgroup about this when I noticed your update, so I included a link to this work around in my post [1]. Maybe Iain or any of the other gurus know of a better way, because the last part looks awfully dirty :-D [1] http://forum.dlang.org/post/wshaxsawkvkwfaefpirj forum.dlang.org
Oct 16 2013
On Wednesday, 16 October 2013 at 19:18:53 UTC, Andrew wrote:I'm a very happy man ! Everything is built and working including dub and the http_server example from vibe.d. It's slow to build, but it executes quickly and strips down to about 3MB which is heavy but tolerable. Thanks to everybody for the help, now I can start learning D, exploring vibe.d and Pegged and hopefully make some good progress on my MUD. So to recap, to help anybody else building on ARM these are the steps I took :- mkdir gdc cd gdc wget http://gcc.igor.onlinedirect.bg/snapshots/LATEST-4.8/gcc-4.8-20131010.tar.bz2 tar xvf gcc-4.8-20131010.tar.bz2 git clone https://github.com/jpf91/GDC.git arm_gdc cd arm_gdc git checkout arm ./setup-gcc.sh ../gcc-4.8-20131010 cd ../ mkdir build cd build export C_INCLUDE_PATH=/usr/include/$(gcc -print-multiarch) export EXTRA_CONF="-mfloat-abi=hard --with-float=hard" ../gcc-4.8-20131010/configure --enable-languages=d --disable-bootstrap --prefix=/usr/local/gdc --disable-multilib --disable-softfloat --with-float=hard make -j2 sudo make install sudo cp ../arm_gdc/libphobos/libdruntime/core/time.d /usr/local/gdc/include/d/4.8.2/armv7l-unknown-linux-gnueabihf/core sudo mv /usr/local/gdc/include/d/4.8.2/armv7l-unknown-linux-gnueabihf/core/time.di /usr/local/gdc/include/d/4.8.2/armv7l-unknown-linux-gnueabihf/core/time.di.old I don't know why that last step was necessary but dub and a few other things didn't build without it. After that dub built fine once I'd hacked the build file to use gdc.This is very cool. You should add it to the wiki so it doesn't get lost: http://wiki.dlang.org
Oct 16 2013
Does anybody know if this is now fixed ? :- https://bitbucket.org/goshawk/gdc/issue/120/fsection-anchors-broken-on-arm I might be wrong but I could be facing this bug when trying to run any of the vibe.d samples, here's an example :- (gdb) cont Continuing. Program received signal SIGSEGV, Segmentation fault. 0x00000000 in ?? () (gdb) bt ../../../../gcc-4.8-20131010/libphobos/libdruntime/gc/gc.d:293 vibe.utils.memory.T19FreeListObjectAllocTS4vibe4core7drivers13libevent2_tcp10TCPContextVb0Vb1Z.T5allocTC4vibe4core6driver10DriverCoreTPS6deimos6event212eventstruct10eventbaseTiTPS6deimos6event211bufferevent11buffereventTS4vibe4core3net14NetworkAddressTS4vibe4core3net14Net orkAddressZ.alloc() () ../../../../gcc-4.8-20131010/libphobos/libdruntime/core/thread.d:3800 /lib/arm-linux-gnueabihf/libc.so.6 /lib/arm-linux-gnueabihf/libc.so.6 Backtrace stopped: previous frame identical to this frame (corrupt stack?)
Oct 17 2013
On Wednesday, 16 October 2013 at 07:52:44 UTC, Andrew wrote:Giving up on dub, I tried niaively to build one of the vibe.d samples directlyThis is something I have used with vibe.d in absence of dub (untested, from my memory): git clone https://github.com/D-Programming-Deimos/openssl git clone https://github.com/D-Programming-Deimos/libevent git clone https://github.com/rejectedsoftware/vibe.d cd myvibeapp rdmd --compiler=gdmd2 -I../openssl/ -I../libevent -I../vibe.d/source -J./views/ -version=VibeLibeventDriver --build-only source/app.d Usage of `rdmd` is crucial here as you need something to take care of compiling all imported modules. dmd/gdc/ldc don't do it on their own and you really don't want to track that module list manually ;) rdmd sources are here (it is a small trivial D app): https://github.com/D-Programming-Language/tools
Oct 16 2013
On Tuesday, 15 October 2013 at 22:52:42 UTC, Andrew wrote:andrew islay:~/dub$ ./build.sh Generating version file... Running gdmd... /usr/local/gdc/include/d/4.8.2/armv7l-unknown-linux-gnueabi f/core/time.di:224: error: this cannot be interpreted at compile time, because it has no available source code /usr/local/gdc/include/d/4.8.2/std/net/curl.d:195: note: called from here: dur(2L) line 224 is trying to instantiate a Duration object. Any ideas ?Here the problem is that your install script has provided only *.di files as bindings to druntime and `dub` tries to use some of those function for compile-time constfolding (CTFE) which requires having full function source. *.di are supposed to be bindings to library blobs for cases when you want to hide implementation from end user, no idea why those are used here. Normal DMD install puts those as plain *.d modules.
Oct 16 2013
On Tue, Oct 15, 2013 at 09:19:56PM +0200, Andrew wrote:Wow that's pretty old. The current language version supported by GDC is 2063L. You should probably consider upgrading GDC to at least 2.0.62 (but preferably 2.0.63). Lots of bugs and issues have been fixed since 2.0.60. :) T -- The volume of a pizza of thickness a and radius z can be described by the following formula: pi zz a. -- Wouter Verhelstpragma(msg, __VERSION__); ```2060L - seems I'm further advanced than everybody else :-)
Oct 15 2013