View mode: basic / threaded / horizontal-split · Log in · Help
August 21, 2012
Re: D on the Raspberry Pi
I finally found some time to look install raspbian and have another
look at this issue. Turns out --with-float=hard and --with-fpu=vfp are
actually supported since gcc 4.5, even without patches. But theses
switches require that the gnueabi (or armeabi) is used. Now debian
uses "--target=arm-linux-gnueabihf" and although gnueabihf is just
another name used by debian for gnueabi, gcc fails to recognize this.

Debian distributes a patch with their sources to fix this. It's the
armhf-triplet.diff patch. This is actually the last patch which is
applied, so I guess some earlier patch failed and armhf-triplet.diff
was not applied.

I actually had this issue: The debian package generates the
list of used patches automatically and it seems to produce a wrong list
if the 'lsb-release' package is not installed. But I'm not sure, it
could also be necessary to install the 'debhelper' package and use
debian/build clean before patching. 

So this is what fixed it for me:
---------------------------------------------
sudo apt-get install lsb-release debhelper
apt-get source gcc-4.7
cd gcc-4.7-4.7.1

edit debian/rules.patch: comment this line:
 debian_patches += gcc-d-lang
so it should become
#  debian_patches += gcc-d-lang

debian/rules clean
debian/rules patch

#clone gdc, checkout 4.7 branch
edit gcc/d/setup-gcc.sh: Edit this
-----
elif grep -q '^4\.7\.' gcc/BASE-VER; then
   gcc_ver=4.7
-----
so it becomes:
-----
elif grep -q -E '^4\.7([^0-9]|$)' gcc/BASE-VER; then
   gcc_ver=4.7
-----
(This should be fixed in the GDC repository, I'll open a pull request
soon)

Then use
./update-gcc.sh --setup /home/pi/gcc-4.7-4.7.1/src

And configure & compile gcc as usual

BTW: I think you shouldn't use --enable-multiarch when
running ../configure. It seems to cause errors in the build process and
as the system gcc didn't use it it's probably not necessary.
August 22, 2012
Re: D on the Raspberry Pi
On Tuesday, 21 August 2012 at 10:16:35 UTC, Johannes Pfau wrote:
> I finally found some time to look install raspbian and have 
> another
> look at this issue. Turns out --with-float=hard and 
> --with-fpu=vfp are
> actually supported since gcc 4.5, even without patches. But 
> theses
> switches require that the gnueabi (or armeabi) is used. Now 
> debian
> uses "--target=arm-linux-gnueabihf" and although gnueabihf is 
> just
> another name used by debian for gnueabi, gcc fails to recognize 
> this.
>
> Debian distributes a patch with their sources to fix this. It's 
> the
> armhf-triplet.diff patch. This is actually the last patch which 
> is
> applied, so I guess some earlier patch failed and 
> armhf-triplet.diff
> was not applied.
>
> I actually had this issue: The debian package generates the
> list of used patches automatically and it seems to produce a 
> wrong list
> if the 'lsb-release' package is not installed. But I'm not 
> sure, it
> could also be necessary to install the 'debhelper' package and 
> use
> debian/build clean before patching.
>
> So this is what fixed it for me:
> ---------------------------------------------
> sudo apt-get install lsb-release debhelper
> apt-get source gcc-4.7
> cd gcc-4.7-4.7.1
>
> edit debian/rules.patch: comment this line:
>   debian_patches += gcc-d-lang
> so it should become
> #  debian_patches += gcc-d-lang
>
> debian/rules clean
> debian/rules patch
>
> #clone gdc, checkout 4.7 branch
> edit gcc/d/setup-gcc.sh: Edit this
> -----
> elif grep -q '^4\.7\.' gcc/BASE-VER; then
>     gcc_ver=4.7
> -----
> so it becomes:
> -----
> elif grep -q -E '^4\.7([^0-9]|$)' gcc/BASE-VER; then
>     gcc_ver=4.7
> -----
> (This should be fixed in the GDC repository, I'll open a pull 
> request
> soon)
>
> Then use
> ./update-gcc.sh --setup /home/pi/gcc-4.7-4.7.1/src
>
> And configure & compile gcc as usual
>
> BTW: I think you shouldn't use --enable-multiarch when
> running ../configure. It seems to cause errors in the build 
> process and
> as the system gcc didn't use it it's probably not necessary.

Yes, that seems to have solved it for me as well! It's nice to 
wake up to a non-broken build for a change :-D

As I've been messing around a fair bit with my current image (not 
just D-related) I think will try to install a fresh one tonight. 
Do you think it would be useful for me to try and compile without 
the debhelper package installed, as you seem to be not completely 
sure it's needed?

Cheers,

Stefan
August 22, 2012
Re: D on the Raspberry Pi
Am Wed, 22 Aug 2012 08:51:08 +0200
schrieb "Stefan Frijters" <sfrijters@gmail.com>:

> As I've been messing around a fair bit with my current image (not 
> just D-related) I think will try to install a fresh one tonight. 
> Do you think it would be useful for me to try and compile without 
> the debhelper package installed, as you seem to be not completely 
> sure it's needed?

Well it's not that important, in the end it's just one package more or
less to install ;-) But if you want to try building it without the
debhelper package, the "debian/rules clean" step needs debhelper, so
you should skip that step as well (It shouldn't be necessary anyway -
I'd expect the packages to be shipped in a clean state)
August 30, 2012
Re: D on the Raspberry Pi
On Monday, 13 August 2012 at 09:27:40 UTC, Stefan Frijters wrote:
> On Sunday, 12 August 2012 at 12:31:04 UTC, Stefan Frijters 
> wrote:
>> Ugh, I was in a hurry yesterday and while cleaning up some 
>> stuff (8GB SD card fills up mighty quickly when doing these 
>> compilations) I accidentally rm -rf'ed the wrong copy of the 
>> build, including the logs. So then I set it to compile again 
>> (still rushed) and now I found it's giving completely 
>> different errors. Moral of the story: I shouldn't try to do 
>> this sort of thing without ample time to check what I'm doing. 
>> As I managed to break some packages along the way as well 
>> while installing the dependencies of gcc I will now just take 
>> a step back, flash a fresh copy of raspbian and do the whole 
>> thing from scratch, based on the Debian gcc sources (4.7.1) 
>> and the gdc-4.7 branch of GDC.
>
> Ok, went through the cycle again and found another failed build 
> in the morning. But at least I'm back to the same error as 
> before I blew things up. Steps taken:
>
> apt-get install gcc-4.7-source lsb-release autogen
> cd /usr/src/gcc-4.7
> debian/rules patch | tee patch.log
> cp -r src/ /home/pi/gcc-4.7.1-debian/
> swapon /dev/sda2
> cd /home/pi
> git clone https://github.com/D-Programming-GDC/GDC.git
> cd GDC
> git checkout gdc-4.7
> ./update-gcc.sh /home/pi/gcc-4.7.1-debian/
> cd ../gcc-4.7.1-debian
> cat configure | grep libphobos # Patch indeed missing
> patch -p1 -i ../GDC/gcc/d/patches/patch-toplev-4.7.x
> cat configure | grep libphobos
> mkdir objdir
> cd objdir
>
> gcc -v # To check for the current flags
>
> Using built-in specs.
> COLLECT_GCC=gcc
> COLLECT_LTO_WRAPPER=/usr/lib/gcc/arm-linux-gnueabihf/4.6/lto-wrapper
> Target: arm-linux-gnueabihf
> Configured with: ../src/configure -v --with-pkgversion='Debian 
> 4.6.3-8+rpi1' 
> --with-bugurl=file:///usr/share/doc/gcc-4.6/README.Bugs 
> --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr 
> --program-suffix=-4.6 --enable-shared --enable-linker-build-id 
> --with-system-zlib --libexecdir=/usr/lib 
> --without-included-gettext --enable-threads=posix 
> --with-gxx-include-dir=/usr/include/c++/4.6 --libdir=/usr/lib 
> --enable-nls --with-sysroot=/ --enable-clocale=gnu 
> --enable-libstdcxx-debug --enable-libstdcxx-time=yes 
> --enable-gnu-unique-object --enable-plugin --enable-objc-gc 
> --disable-sjlj-exceptions --with-arch=armv6 --with-fpu=vfp 
> --with-float=hard --enable-checking=release 
> --build=arm-linux-gnueabihf --host=arm-linux-gnueabihf 
> --target=arm-linux-gnueabihf
> Thread model: posix
> gcc version 4.6.3 (Debian 4.6.3-8+rpi1)
>
> Here, I matched some flags to go with this gcc and went on to 
> configure:
>
> ../configure --enable-languages=d --disable-bootstrap 
> --disable-shared --disable-nls --prefix=/opt/gdc 
> --with-bugurl="https://bitbucket.org/goshawk/gdc/issues" 
> --disable-libgomp --disable-libmudflap --enable-multiarch 
> --enable-linker-build-id --with-system-zlib 
> --without-included-gettext --enable-threads=posix 
> --enable-clocale=gnu --build=arm-linux-gnueabihf 
> --host=arm-linux-gnueabihf --target=arm-linux-gnueabihf 
> --with-arch=armv6 --with-fpu=vfp --with-float=hard 
> --enable-checking=yes 2>&1 | tee configure.txt
>
> Result of configure: http://pastebin.com/nznkk91w
>
> DFLAGS="-fno-section-anchors" make 2>&1 | tee build.log
>
> Result of make: http://pastebin.com/fW983aJ8
>
> So now that I know where to look, the config.log of libgcc: 
> http://pastebin.com/1dg8HkA1
>
> The relevant errors seem to be
>
> conftest.c:1:0: sorry, unimplemented: -mfloat-abi=hard and VFP
>
> This is something that is explicitly set in the configure 
> command above to match what I saw in gcc -v. If I remove this, 
> will this remove the advantage of having the hard floats 
> available at all in Raspbian (unlike Squeeze)? Or will this be 
> implicit anyway (and thus cause compilation to fail again) 
> through the way the base gcc is compiled?
>
> Cheers,
>
> Stefan

Don't use the bitbucket issue page to file bugs. This will be 
turned off soon. ;-)


Other than that I seem to be hitting the same error doing a 
cross-compiler on the first attempt, so I guess we could figure 
something out.
August 30, 2012
Re: D on the Raspberry Pi
On Thursday, 30 August 2012 at 08:02:36 UTC, Iain Buclaw wrote:
> Don't use the bitbucket issue page to file bugs. This will be 
> turned off soon. ;-)
>
> Other than that I seem to be hitting the same error doing a 
> cross-compiler on the first attempt, so I guess we could figure 
> something out.

Well, for me the problems have now been solved with Johannes 
Pfau's instructions on the gdcproject.org wiki (which, 
incidentally, sets --with-bugurl="http://gdcproject.org/bugzilla" 
too).

A question though: will the gdc-4.7 branch be updated to the 
2.060 frontend at any point? I don't suppose I can just 
cherry-pick the single "Update D Frontend to 2.060" commit from 
master :-D

Cheers,

Stefan
August 30, 2012
Re: D on the Raspberry Pi
On 30 August 2012 10:40, Stefan Frijters <sfrijters@gmail.com> wrote:
> On Thursday, 30 August 2012 at 08:02:36 UTC, Iain Buclaw wrote:
>>
>> Don't use the bitbucket issue page to file bugs. This will be turned off
>> soon. ;-)
>>
>> Other than that I seem to be hitting the same error doing a cross-compiler
>> on the first attempt, so I guess we could figure something out.
>
>
> Well, for me the problems have now been solved with Johannes Pfau's
> instructions on the gdcproject.org wiki (which, incidentally, sets
> --with-bugurl="http://gdcproject.org/bugzilla" too).
>
> A question though: will the gdc-4.7 branch be updated to the 2.060 frontend
> at any point? I don't suppose I can just cherry-pick the single "Update D
> Frontend to 2.060" commit from master :-D
>
> Cheers,
>
> Stefan

4.8 is currently what I'm testing...

The multiarch-trunk patch applies cleanly to gcc-4.8, just building
with that at the moment.


Regards
-- 
Iain Buclaw

*(p < e ? p++ : p) = (c & 0x0f) + '0';
August 30, 2012
Re: D on the Raspberry Pi
Am Thu, 30 Aug 2012 11:12:25 +0100
schrieb Iain Buclaw <ibuclaw@ubuntu.com>:

> 4.8 is currently what I'm testing...
> 
> The multiarch-trunk patch applies cleanly to gcc-4.8, just building
> with that at the moment.

You also need the armhf-triplet.diff patch to fix the "conftest.c:1:0:
sorry, unimplemented: -mfloat-abi=hard and VFP" error.

Or you could just build with --target=arm-linux-gnueabi instead of
arm-linux-gnueabihf, according to some old discussion there's no real
difference between those two (the relevant options are --with-fpu and
--with-float)
August 30, 2012
Re: D on the Raspberry Pi
On 30 August 2012 11:25, Johannes Pfau <nospam@example.com> wrote:
> Am Thu, 30 Aug 2012 11:12:25 +0100
> schrieb Iain Buclaw <ibuclaw@ubuntu.com>:
>
>> 4.8 is currently what I'm testing...
>>
>> The multiarch-trunk patch applies cleanly to gcc-4.8, just building
>> with that at the moment.
>
> You also need the armhf-triplet.diff patch to fix the "conftest.c:1:0:
> sorry, unimplemented: -mfloat-abi=hard and VFP" error.
>
> Or you could just build with --target=arm-linux-gnueabi instead of
> arm-linux-gnueabihf, according to some old discussion there's no real
> difference between those two (the relevant options are --with-fpu and
> --with-float)
>

Ah, cool. Well that's me finishing building it.  I'll push porting
patches into the repo.  It works in my head, could you give it a test?

-- 
Iain Buclaw

*(p < e ? p++ : p) = (c & 0x0f) + '0';
August 30, 2012
Re: D on the Raspberry Pi
On 30 August 2012 13:12, Iain Buclaw <ibuclaw@ubuntu.com> wrote:
> On 30 August 2012 11:25, Johannes Pfau <nospam@example.com> wrote:
>> Am Thu, 30 Aug 2012 11:12:25 +0100
>> schrieb Iain Buclaw <ibuclaw@ubuntu.com>:
>>
>>> 4.8 is currently what I'm testing...
>>>
>>> The multiarch-trunk patch applies cleanly to gcc-4.8, just building
>>> with that at the moment.
>>
>> You also need the armhf-triplet.diff patch to fix the "conftest.c:1:0:
>> sorry, unimplemented: -mfloat-abi=hard and VFP" error.
>>
>> Or you could just build with --target=arm-linux-gnueabi instead of
>> arm-linux-gnueabihf, according to some old discussion there's no real
>> difference between those two (the relevant options are --with-fpu and
>> --with-float)
>>
>
> Ah, cool. Well that's me finishing building it.  I'll push porting
> patches into the repo.  It works in my head, could you give it a test?
>
> --
> Iain Buclaw
>
> *(p < e ? p++ : p) = (c & 0x0f) + '0';


https://github.com/D-Programming-GDC/GDC/commit/03e34f8124eb1c607ffee11630c8ec6809b8f52c

Built with the following patches:
http://anonscm.debian.org/viewvc/gcccvs/branches/sid/gcc-4.7/debian/patches/armhf-triplet.diff
http://anonscm.debian.org/viewvc/gcccvs/branches/sid/gcc-4.7/debian/patches/gcc-multiarch-trunk.diff

There will be a failed patch in libgcc, don't worry about it, as it's
already been applied to gcc-4.8.

You'll need to run 'autoconf2.64' in the gcc and libjava directories
after applying to update the configure scripts.


Regards
-- 
Iain Buclaw

*(p < e ? p++ : p) = (c & 0x0f) + '0';
August 30, 2012
Re: D on the Raspberry Pi
On 30 August 2012 13:20, Iain Buclaw <ibuclaw@ubuntu.com> wrote:
> On 30 August 2012 13:12, Iain Buclaw <ibuclaw@ubuntu.com> wrote:
>> On 30 August 2012 11:25, Johannes Pfau <nospam@example.com> wrote:
>>> Am Thu, 30 Aug 2012 11:12:25 +0100
>>> schrieb Iain Buclaw <ibuclaw@ubuntu.com>:
>>>
>>>> 4.8 is currently what I'm testing...
>>>>
>>>> The multiarch-trunk patch applies cleanly to gcc-4.8, just building
>>>> with that at the moment.
>>>
>>> You also need the armhf-triplet.diff patch to fix the "conftest.c:1:0:
>>> sorry, unimplemented: -mfloat-abi=hard and VFP" error.
>>>
>>> Or you could just build with --target=arm-linux-gnueabi instead of
>>> arm-linux-gnueabihf, according to some old discussion there's no real
>>> difference between those two (the relevant options are --with-fpu and
>>> --with-float)
>>>
>>
>> Ah, cool. Well that's me finishing building it.  I'll push porting
>> patches into the repo.  It works in my head, could you give it a test?
>>
>> --
>> Iain Buclaw
>>
>> *(p < e ? p++ : p) = (c & 0x0f) + '0';
>
>
> https://github.com/D-Programming-GDC/GDC/commit/03e34f8124eb1c607ffee11630c8ec6809b8f52c
>
> Built with the following patches:
> http://anonscm.debian.org/viewvc/gcccvs/branches/sid/gcc-4.7/debian/patches/armhf-triplet.diff
> http://anonscm.debian.org/viewvc/gcccvs/branches/sid/gcc-4.7/debian/patches/gcc-multiarch-trunk.diff
>
> There will be a failed patch in libgcc, don't worry about it, as it's
> already been applied to gcc-4.8.
>
> You'll need to run 'autoconf2.64' in the gcc and libjava directories
> after applying to update the configure scripts.
>

Built with:

../gcc-4.8/configure --prefix=/usr --enable-languages=d --disable-nls
--disable-shared --disable-libgomp --disable-libmudflap
--disable-bootstrap --with-arch=armv6 --with-fpu=vfp --with-float=hard
--enable-checking=yes --build=x86_64-linux-gnu --host=x86_64-linux-gnu
--target=arm-linux-gnueabihf


-- 
Iain Buclaw

*(p < e ? p++ : p) = (c & 0x0f) + '0';
1 2 3 4
Top | Discussion index | About this forum | D home