>Have you looked at tinycc?  <br>Yes, but theres not much development going on there and theres a lack of support on the mailing lists.<br><br>As I said, I managed to build it around 35MB (is fine for me) and the basic "hello world" works on the device.<br>

I also patched in code for android that I need (like system_properties.c) (and it works)<br><br>The only error I'm getting now is -><br><br>/data/local/tmp/narm/bin/../include/linux/netlink.h:40: error: expected specifier-qualifier-list before 'sa_family_t'<br>

gb.c: In function 'last_try':<br>gb.c:310: error: 'struct sockaddr_nl' has no member named 'nl_family'<br>gb.c:314: error: 'struct sockaddr_nl' has no member named 'nl_pid'<br>gb.c: In function 'do_fault':<br>

gb.c:347: error: 'struct sockaddr_nl' has no member named 'nl_family'<br>gb.c:351: error: 'struct sockaddr_nl' has no member named 'nl_pid'<br><br><br>I suspect this is not android specific. Can you help me out here?<br>

<br>-Earlence<br><br><br><br><div class="gmail_quote">On Sat, Jul 16, 2011 at 6:08 PM, Rob Landley <span dir="ltr"><<a href="mailto:rob@landley.net">rob@landley.net</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">

<div class="im">On 07/15/2011 03:30 PM, Earlence Fernandes wrote:<br>
> Hello,<br>
><br>
> I plan on using aboriginal linux scripts to build a C compiler thats<br>
> customized for Android.<br>
<br>
</div>Android is generally armv5l or similar, it just uses a different C<br>
library (bionic instead of uClibc).  I note that uClibc works just fine<br>
on android (if you either statically link or install the shared<br>
libraries), but if you want to build everything with bionic that's fine too.<br>
<br>
The question for a self-hosting system is do the other six packages<br>
build with bionic?  (gcc, binutils, busybox, make, bash.  The linux<br>
kernel won't care.)<br>
<br>
If you're not doing a self-hosting system, it shouldn't matter much what<br>
libc you use as long as the compiler can find it.<br>
<br>
I gave up trying to fix the path logic in gcc years ago, instead I use a<br>
wrapper (sources/toys/ccwrap.c) which parses the incoming gcc command<br>
line and rewrites it to start with --nostdinc --nostdlib and then adds<br>
in the explicit header and library paths it should search.  When it's<br>
not a -c, -E, or -S build it explicitly adds in the libraries and .o<br>
files necessary for linking executables.<br>
<br>
That expects the compiler binary to be in "bin" and looks for ../include<br>
and ../cc/include for headers, and ../lib and ../cc/lib for libraries.<br>
In the case of linking in libc, it looks for the name "libc.so" which<br>
should be symlinked to the C library you want to use.<br>
<div class="im"><br>
> Therefore, I think these steps would be needed:<br>
><br>
> 1. download.sh to get GCC sources.<br>
<br>
</div>You can just populate the packages directory yourself and skip<br>
download.sh if you like.  But sure, modifying that would work.<br>
<div class="im"><br>
> 2. patch them with android specific headers and implementation<br>
<br>
</div>I note that sources/patches exists to apply patches to upstream<br>
tarballs.  The extract logic will automatically apply patches with the<br>
right names ("packagename-*.patch", the required dash is so uClibc<br>
doesn't get uClibc++ patches applied to it).<br>
<div class="im"><br>
> 3. native-build.sh for ARM<br>
<br>
</div>In theory that code is completely target-agnostic.  (And the actual<br>
individual package builds are in sources/sections so they can be re-used<br>
by the various stages as necessary.)<br>
<br>
In practice it's not necessarily _version_ agnostic: gcc 4.2 was just<br>
two packages, gcc 4.3 got split into four packages, and gcc 4.5 is<br>
written in C++ so requires a different host compiler setup.<br>
<br>
(The people who wrote gcc are completely insane, I'm really looking<br>
forward to llvm or pcc or something becoming usable to build Linux<br>
systems with.)<br>
<div class="im"><br>
> Next, I need to optimized for space, I need it as small as possible.<br>
> Therefore, disable CPP (with the given option),<br>
<br>
</div>Actually cpp is the C preprocessor (I.E. what gcc -E calls out to), you<br>
want to disable c++.<br>
<div class="im"><br>
> remove pthreads, binutils etc etc -> but how do I config this?<br>
<br>
</div>You can't remove binutils, it's the linker and the assembler.  (No, I<br>
don't know why the gcc developers split the linker and assembler out<br>
into a separate package.  I don't know why the split out GMP and MPFR in<br>
4.3 either, but since it's GPLv3 I'm not comfortable shipping binaries<br>
built from it so it hasn't come up.  I note that Linux From Scratch has<br>
instructions for building those...)<br>
<div class="im"><br>
> I basically need to be really lean and mean. C compiler, libc, libm,<br>
> linux headers. thats it.<br>
<br>
</div>Have you looked at tinycc?  It's a working C compiler (including linker<br>
and assembler all in one binary, busybox-style) in 100k.  Last I checked<br>
they claimed to have basic arm support working.  (Arm on an arm host<br>
didn't work for me, but that was 3 years ago...)<br>
<font color="#888888"><br>
Rob<br>
</font></blockquote></div><br>