Building a PHP-lite like Axis

I am trying to build a small "PHP-lite" similar to what Axis has done for their video servers and network cameras. They have managed to create a PHP3 executable that is less than 400k.

I don't need it to be that small, but I would like to get it substantially under the 2 meg or so that I get when I compile it using the "configure" script included with PHP3, with everything disabled.

What I am observing is that, even though I have, for example, disabled MySQL support, the mysql.c file is still compiled into mysql.o, and it is still linked into the php executable. This seems to indicate that in order to substantially reduce the size of the executable, some serious hacking will be required.

If anyone has done this, please advise!

Thank you.

Reply to
tomviolin
Loading thread data ...

I've not looked into the PHP build scripts, but which version are you trying to build? ISTR that PHP 4 built up to about 800K out of the box once you eliminate all of the fluff, while PHP 5 built to something like

2.5 MB...

Typically most of the 'hacking' needed is in the build scripts...

--
  o__
  ,>/'_          o__
  (_)\(_)        ,>/'_        o__
Yan Seiner, PE  (_)\(_)       ,>/'_     o__
Certified Personal Trainer   (_)\(_)    ,>/'_        o__
Licensed Professional Engineer         (_)\(_)       ,>/'_
Who says engineers have to be pencil necked geeks?  (_)\(_)
Reply to
Captain Dondo

I have found, so far, that to begin to reduce the executable size, it is necessary to go into the Makefile and eliminate references to specific .c files. However, some files, such as functions/info.c, which provides the phpinfo() function, contain functions that are used elsewhere, and require modifications to other files. I've spent several hours and only got the executable down to around 1.6 meg.

There doesn't seem to be a "magic" way to do this, one apparently just has to dig in.

I wonder if later releases of PHP might have been written in a more modular fashion, and thus be easier to reduce. If I can get a version of PHP, that at least has some basic functionality, with an exectuable under 1 MB, I'll be happy.

Reply to
tomviolin

gcc has the (non-default) ability to compile each function and data declaration into a separate section. Combining that with linking that removes unreferenced sections can reduce your workload. I doesn't matter if the code is in the same file - if it isn't referenced then it doesn't get pulled in, and if it doesn't get pulled in it does pull other stuff in. This has worked well for me on a few embedded projects.

Look up -ffunction-sections -fdata-sections for compiling and

-Wl,--gc-sections for linking.

Peter

Reply to
Peter Dickerson

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.