Size of crosscompiled exectuable

2013-01-25 Thread Nathan Hüsken
Hey,

A simple hello world application has 1Mb in by 64 bit ubunut machine.
When I stript it, is has about 750kb.

When I build a cross compiler for android (arm), the executable has a
asize of about 10MB, stripped about 5MB.

That is huge, five times the size on my linux sysem.
Why is this?
Can I do something about it?

Thanks!
Nathan

___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


Re: Size of crosscompiled exectuable

2013-01-25 Thread Simon Marlow

On 25/01/13 13:58, Nathan Hüsken wrote:

A simple hello world application has 1Mb in by 64 bit ubunut machine.
When I stript it, is has about 750kb.


GHC statically links all its libraries by default.  If you want a 
dynamically linked executable, use -dynamic (ensure you have the dynamic 
libraries built and/or installed though).



When I build a cross compiler for android (arm), the executable has a
asize of about 10MB, stripped about 5MB.

That is huge, five times the size on my linux sysem.


Not sure what you mean by "five times the size on my linux system". 
What is 5 times larger than what?


Static linking is useful when cross compiling, because it means you can 
just copy the binary over to the target system and run it.


Cheers,
Simon


___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


Re: Size of crosscompiled exectuable

2013-01-25 Thread Brandon Allbery
On Fri, Jan 25, 2013 at 8:58 AM, Nathan Hüsken wrote:

> A simple hello world application has 1Mb in by 64 bit ubunut machine.
> When I stript it, is has about 750kb.
>
> When I build a cross compiler for android (arm), the executable has a
> asize of about 10MB, stripped about 5MB.
>

If I had to guess, libc is linked dynamically on Ubuntu (Linux really wants
this) but statically when cross-compiled.

-- 
brandon s allbery kf8nh   sine nomine associates
allber...@gmail.com  ballb...@sinenomine.net
unix, openafs, kerberos, infrastructure, xmonadhttp://sinenomine.net
___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


Re: Size of crosscompiled exectuable

2013-01-25 Thread Stephen Paul Weber

Somebody claiming to be Simon Marlow wrote:

On 25/01/13 13:58, Nathan Hüsken wrote:

A simple hello world application has 1Mb in by 64 bit ubunut machine.
When I stript it, is has about 750kb.
When I build a cross compiler for android (arm), the executable has a
asize of about 10MB, stripped about 5MB.

That is huge, five times the size on my linux sysem.


Not sure what you mean by "five times the size on my linux system". 
What is 5 times larger than what?


He's saying that the size of the android executable (made by his cross 
compiler) is five time the sive of the equivalent Ubuntu executable (made 
by, I assume, his system's GHC).


The problem is not the size, but the size ratio.

--
Stephen Paul Weber, @singpolyma
See  for how I prefer to be contacted
edition right joseph


signature.asc
Description: Digital signature
___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


Re: Size of crosscompiled exectuable

2013-01-25 Thread Simon Marlow

On 25/01/13 15:51, Stephen Paul Weber wrote:

Somebody claiming to be Simon Marlow wrote:

On 25/01/13 13:58, Nathan Hüsken wrote:

A simple hello world application has 1Mb in by 64 bit ubunut machine.
When I stript it, is has about 750kb.
When I build a cross compiler for android (arm), the executable has a
asize of about 10MB, stripped about 5MB.

That is huge, five times the size on my linux sysem.


Not sure what you mean by "five times the size on my linux system".
What is 5 times larger than what?


He's saying that the size of the android executable (made by his cross
compiler) is five time the sive of the equivalent Ubuntu executable
(made by, I assume, his system's GHC).

The problem is not the size, but the size ratio.


Ah, I see.  Yes, my executables are a similar size.  I'm not sure why, 
I'll try to look into it.


Cheers,
Simon



___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


Re: Size of crosscompiled exectuable

2013-01-25 Thread Simon Marlow

On 25/01/13 16:35, Simon Marlow wrote:

On 25/01/13 15:51, Stephen Paul Weber wrote:

Somebody claiming to be Simon Marlow wrote:

On 25/01/13 13:58, Nathan Hüsken wrote:

A simple hello world application has 1Mb in by 64 bit ubunut machine.
When I stript it, is has about 750kb.
When I build a cross compiler for android (arm), the executable has a
asize of about 10MB, stripped about 5MB.

That is huge, five times the size on my linux sysem.


Not sure what you mean by "five times the size on my linux system".
What is 5 times larger than what?


He's saying that the size of the android executable (made by his cross
compiler) is five time the sive of the equivalent Ubuntu executable
(made by, I assume, his system's GHC).

The problem is not the size, but the size ratio.


Ah, I see.  Yes, my executables are a similar size.  I'm not sure why,
I'll try to look into it.


It's just the lack of SPLIT_OBJS.  Also, unregisterised accounts for a 
factor of 1.5 or so.


Incidentally, I now have a registerised cross-compiler for Raspberry Pi 
compiling a working hello world :)  (LLVM 3.0, GHC HEAD)


GhcStage2HcOpts= -O0 -fllvm -pgmlc llc-3.0 -pgmlo opt-3.0 -optlc 
-mtriple=arm-linux-gnueabihf -optlc -mattr=+vfp2 -optlc -float-abi=hard
GhcLibHcOpts   = -O -fllvm -pgmlc llc-3.0 -pgmlo opt-3.0 -optlc 
-mtriple=arm-linux-gnueabihf -optlc -mattr=+vfp2 -optlc -float-abi=hard
GhcRtsHcOpts  += -fllvm -pgmlc llc-3.0 -pgmlo opt-3.0 -optlc 
-mtriple=arm-linux-gnueabihf -optlc -mattr=+vfp2 -optlc -float-abi=hard


Nice work everyone.

Cheers,
Simon


___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


Re: Size of crosscompiled exectuable

2013-01-26 Thread Nathan Hüsken
On 01/25/2013 05:45 PM, Simon Marlow wrote:
> On 25/01/13 16:35, Simon Marlow wrote:
>> On 25/01/13 15:51, Stephen Paul Weber wrote:
>>> Somebody claiming to be Simon Marlow wrote:
 On 25/01/13 13:58, Nathan Hüsken wrote:
> A simple hello world application has 1Mb in by 64 bit ubunut machine.
> When I stript it, is has about 750kb.
> When I build a cross compiler for android (arm), the executable has a
> asize of about 10MB, stripped about 5MB.
>
> That is huge, five times the size on my linux sysem.

 Not sure what you mean by "five times the size on my linux system".
 What is 5 times larger than what?
>>>
>>> He's saying that the size of the android executable (made by his cross
>>> compiler) is five time the sive of the equivalent Ubuntu executable
>>> (made by, I assume, his system's GHC).

Yes, exactly. Sorry for my bad phrasing.

>>> The problem is not the size, but the size ratio.
>>
>> Ah, I see.  Yes, my executables are a similar size.  I'm not sure why,
>> I'll try to look into it.
> 
> It's just the lack of SPLIT_OBJS.  Also, unregisterised accounts for a
> factor of 1.5 or so.

What exactly does SPLIT_OBJS do? Is there a chance to get it working for
cross platform?
There must be a lot of unused code in the exectuable. Is there no way to
remove it?
5 Mb is rather large for an android app.

> Incidentally, I now have a registerised cross-compiler for Raspberry Pi
> compiling a working hello world :)  (LLVM 3.0, GHC HEAD)
> 
> GhcStage2HcOpts= -O0 -fllvm -pgmlc llc-3.0 -pgmlo opt-3.0 -optlc
> -mtriple=arm-linux-gnueabihf -optlc -mattr=+vfp2 -optlc -float-abi=hard
> GhcLibHcOpts   = -O -fllvm -pgmlc llc-3.0 -pgmlo opt-3.0 -optlc
> -mtriple=arm-linux-gnueabihf -optlc -mattr=+vfp2 -optlc -float-abi=hard
> GhcRtsHcOpts  += -fllvm -pgmlc llc-3.0 -pgmlo opt-3.0 -optlc
> -mtriple=arm-linux-gnueabihf -optlc -mattr=+vfp2 -optlc -float-abi=hard
> 
> Nice work everyone.

Nice!


___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


Re: Size of crosscompiled exectuable

2013-01-26 Thread Nathan Hüsken
On 01/26/2013 09:24 AM, Nathan Hüsken wrote:
> On 01/25/2013 05:45 PM, Simon Marlow wrote:
>> On 25/01/13 16:35, Simon Marlow wrote:
>>> On 25/01/13 15:51, Stephen Paul Weber wrote:
 Somebody claiming to be Simon Marlow wrote:
> On 25/01/13 13:58, Nathan Hüsken wrote:
>> A simple hello world application has 1Mb in by 64 bit ubunut machine.
>> When I stript it, is has about 750kb.
>> When I build a cross compiler for android (arm), the executable has a
>> asize of about 10MB, stripped about 5MB.
>>
>> That is huge, five times the size on my linux sysem.
>
> Not sure what you mean by "five times the size on my linux system".
> What is 5 times larger than what?

 He's saying that the size of the android executable (made by his cross
 compiler) is five time the sive of the equivalent Ubuntu executable
 (made by, I assume, his system's GHC).
> 
> Yes, exactly. Sorry for my bad phrasing.
> 
 The problem is not the size, but the size ratio.
>>>
>>> Ah, I see.  Yes, my executables are a similar size.  I'm not sure why,
>>> I'll try to look into it.
>>
>> It's just the lack of SPLIT_OBJS.  Also, unregisterised accounts for a
>> factor of 1.5 or so.
> 
> What exactly does SPLIT_OBJS do? Is there a chance to get it working for
> cross platform?
> There must be a lot of unused code in the exectuable. Is there no way to
> remove it?
> 5 Mb is rather large for an android app.
> 

Maybe it would help to pass parameters like "-adce" or "-globaldce" to
opt (from llvm).
But I can not figure out how I can tell ghc to pass these parameters.
Someone knows?

Regards,
Nathan


___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


Re: Size of crosscompiled exectuable

2013-01-26 Thread David Terei
To pass to opt use '-optlo', e.g.,

$ ghc -fllvm -optlo-adce ...

Its documented in the GHC userguide.

Cheers,
David

On 26 January 2013 02:07, Nathan Hüsken  wrote:
> On 01/26/2013 09:24 AM, Nathan Hüsken wrote:
>> On 01/25/2013 05:45 PM, Simon Marlow wrote:
>>> On 25/01/13 16:35, Simon Marlow wrote:
 On 25/01/13 15:51, Stephen Paul Weber wrote:
> Somebody claiming to be Simon Marlow wrote:
>> On 25/01/13 13:58, Nathan Hüsken wrote:
>>> A simple hello world application has 1Mb in by 64 bit ubunut machine.
>>> When I stript it, is has about 750kb.
>>> When I build a cross compiler for android (arm), the executable has a
>>> asize of about 10MB, stripped about 5MB.
>>>
>>> That is huge, five times the size on my linux sysem.
>>
>> Not sure what you mean by "five times the size on my linux system".
>> What is 5 times larger than what?
>
> He's saying that the size of the android executable (made by his cross
> compiler) is five time the sive of the equivalent Ubuntu executable
> (made by, I assume, his system's GHC).
>>
>> Yes, exactly. Sorry for my bad phrasing.
>>
> The problem is not the size, but the size ratio.

 Ah, I see.  Yes, my executables are a similar size.  I'm not sure why,
 I'll try to look into it.
>>>
>>> It's just the lack of SPLIT_OBJS.  Also, unregisterised accounts for a
>>> factor of 1.5 or so.
>>
>> What exactly does SPLIT_OBJS do? Is there a chance to get it working for
>> cross platform?
>> There must be a lot of unused code in the exectuable. Is there no way to
>> remove it?
>> 5 Mb is rather large for an android app.
>>
>
> Maybe it would help to pass parameters like "-adce" or "-globaldce" to
> opt (from llvm).
> But I can not figure out how I can tell ghc to pass these parameters.
> Someone knows?
>
> Regards,
> Nathan
>
>
> ___
> Glasgow-haskell-users mailing list
> Glasgow-haskell-users@haskell.org
> http://www.haskell.org/mailman/listinfo/glasgow-haskell-users

___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


Re: Size of crosscompiled exectuable

2013-01-28 Thread Simon Marlow

On 26/01/13 08:24, Nathan Hüsken wrote:

On 01/25/2013 05:45 PM, Simon Marlow wrote:

On 25/01/13 16:35, Simon Marlow wrote:

On 25/01/13 15:51, Stephen Paul Weber wrote:

Somebody claiming to be Simon Marlow wrote:

On 25/01/13 13:58, Nathan Hüsken wrote:

A simple hello world application has 1Mb in by 64 bit ubunut machine.
When I stript it, is has about 750kb.
When I build a cross compiler for android (arm), the executable has a
asize of about 10MB, stripped about 5MB.

That is huge, five times the size on my linux sysem.


Not sure what you mean by "five times the size on my linux system".
What is 5 times larger than what?


He's saying that the size of the android executable (made by his cross
compiler) is five time the sive of the equivalent Ubuntu executable
(made by, I assume, his system's GHC).


Yes, exactly. Sorry for my bad phrasing.


The problem is not the size, but the size ratio.


Ah, I see.  Yes, my executables are a similar size.  I'm not sure why,
I'll try to look into it.


It's just the lack of SPLIT_OBJS.  Also, unregisterised accounts for a
factor of 1.5 or so.


What exactly does SPLIT_OBJS do? Is there a chance to get it working for
cross platform?


SPLIT_OBJS turns on the -split-objs flag to GHC when building libraries, 
which makes it generate lots of little object files rather than one big 
object file for each module.  This means that when linking with a static 
library, we only link in the necessary functions, not the whole module tree.


I haven't tried it, but as far as I know SPLIT_OBJS should work when 
cross-compiling. There was a commit adding support for -split-objs with 
LLVM: 1f9ca81cff59ed6c0078437a992f40c13d2667c7


Cheers,
Simon


___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users