incubator-pagespeed-mod icon indicating copy to clipboard operation
incubator-pagespeed-mod copied to clipboard

Compilling on SheevaPlug : ARM processor

Open GoogleCodeExporter opened this issue 9 years ago • 14 comments

I can't compile and build a deb package on my SheevaPlug.

It's a ARM processor.
I use Debian Lenny 5 with Apache2, PHP5 and MySQL.

Can you build it ?
Can you tell me for compiling and building a deb package for this architecture.

Thanks.

Original issue reported on code.google.com by colundrum on 17 Jan 2011 at 10:21

GoogleCodeExporter avatar Apr 06 '15 15:04 GoogleCodeExporter

No one on the team has tried compiling mod_pagespeed on an ARM.  What error 
message are you getting?

Original comment by [email protected] on 17 Jan 2011 at 12:31

  • Added labels: Type-Enhancement
  • Removed labels: Type-Defect

GoogleCodeExporter avatar Apr 06 '15 15:04 GoogleCodeExporter

Sorry for the delay, I reinstalled the virtual machine for cross-compilation.
I may have found the main error is in Checking out mod_pagespeed and 
dependencies.
When I execute for the either latest stable version: 
gclient config http://modpagespeed.googlecode.com/svn/tags/0.9.14.6/src : no 
error
  gclient sync --force : I obtain the error :

KeyError: 'Undefined variable deb_arch in src/build/install.gyp while loading 
dependencies of src/build/all.gyp while trying to load src/build.gyp'
Error : /usr/bin/python src/build/chromium in /root/mod_pagespeed returned 1

The uname -a return : Linux debian-armel 2.6.26-1-versatile #1 "date" armv5tejl 
GNU/Linux

It's a VM QEMU for cross-compilation : 
http://people.debian.org/~aurel32/qemu/armel/

Regards

Original comment by colundrum on 19 Jan 2011 at 3:48

GoogleCodeExporter avatar Apr 06 '15 15:04 GoogleCodeExporter

The problem here is that we have based our build system on that of Chromium.  
So if that browser is not available for a particular platform, then we don't 
have an easy path to compile for it either.

This is not, of course, a fundamental limitation of mod_pagespeed, which should 
run anywhere Apache does, but just of our build infrastructure.  Some people 
have tried generating Makefiles on a supported platform and then copying the 
directory to the target platform.  This might work if the supported platform 
and target platform have the same machine-word size.  But we have not tried it.

Original comment by [email protected] on 19 Jan 2011 at 3:55

GoogleCodeExporter avatar Apr 06 '15 15:04 GoogleCodeExporter

I just changed the condition OS in src/build.gyp by nano where OS == linux by 
OS == *
The installaton is a success : no error.

I just launch "make BUILDTYPE=Release", it's in progress.

Original comment by colundrum on 19 Jan 2011 at 4:04

GoogleCodeExporter avatar Apr 06 '15 15:04 GoogleCodeExporter

Cools!  Please keep us posted.  If you are able to build/install on ARM we'll 
post instructions to the FAQ.

Original comment by [email protected] on 19 Jan 2011 at 4:16

GoogleCodeExporter avatar Apr 06 '15 15:04 GoogleCodeExporter

Sounds like this is fixed for now.

Original comment by [email protected] on 24 Feb 2011 at 9:51

  • Changed state: Fixed

GoogleCodeExporter avatar Apr 06 '15 15:04 GoogleCodeExporter

thank to  colundrum s suggestion! My server is also ARM processor, and after I 
changed the OS parameter it works, and compile is OK too. 

But for my case, the file is  "~/mod_pagespeed/src/build/install.gyp"

     13   'conditions': [
-> 14     ['OS=="*"', {          # I changed "linux" to "*"
     15       'variables': {
     16         'version' : '<!(python <(version_py_path) -f <(version_path) -t "@MAJOR@.@MINOR@.@BUILD@.@PATCH@")',
     17         'revision' : '<!(python <(DEPTH)/build/util/lastchange.py | cut -d "=" -f 2)',
     .......

Original comment by [email protected] on 11 May 2012 at 2:26

GoogleCodeExporter avatar Apr 06 '15 15:04 GoogleCodeExporter

Hi, I'm compiling the package on a SheevaPlug too. It's taking ages obviously.

It would be nice if the project would distribute debian packages for this 
plateform. Arm architecture is getting more and more widespread, it would be 
nice to easyly install mod_pagespeed there... RaspberryPi could benefit from 
this compilation too (although it's not exactly the same architecture or flags).

Original comment by [email protected] on 25 Jan 2013 at 2:14

GoogleCodeExporter avatar Apr 06 '15 15:04 GoogleCodeExporter

I'm getting an error on make : 

arthur@plug:~/mod_pagespeed/src$ make BUILDTYPE=Release 
  ACTION Extracting last change to /home/arthur/mod_pagespeed/src/out/Release/obj/gen/build/LASTCHANGE out/Release/obj/gen/build/LASTCHANGE.always
  CXX(target) out/Release/obj.target/instaweb_util/net/instaweb/util/async_cache.o
cc1plus: warnings being treated as errors
In file included from ./net/instaweb/util/public/queued_worker_pool.h:34,
                 from ./net/instaweb/util/public/async_cache.h:26,
                 from net/instaweb/util/async_cache.cc:19:
./net/instaweb/util/public/function.h: In member function ‘void 
net_instaweb::MemberFunction0<C>::Cancel() [with C = 
net_instaweb::CacheInterface]’:
net/instaweb/util/async_cache.cc:178:   instantiated from here
./net/instaweb/util/public/function.h:145: error: NULL used in arithmetic
./net/instaweb/util/public/function.h: In member function ‘void 
net_instaweb::MemberFunction1<C, T1>::Cancel() [with C = 
net_instaweb::AsyncCache, T1 = GoogleString*]’:
net/instaweb/util/async_cache.cc:178:   instantiated from here
./net/instaweb/util/public/function.h:173: error: NULL used in arithmetic
./net/instaweb/util/public/function.h: In member function ‘void 
net_instaweb::MemberFunction2<C, T1, T2>::Cancel() [with C = 
net_instaweb::AsyncCache, T1 = GoogleString*, T2 = 
net_instaweb::SharedString*]’:
net/instaweb/util/async_cache.cc:178:   instantiated from here
./net/instaweb/util/public/function.h:204: error: NULL used in arithmetic
./net/instaweb/util/public/function.h: In member function ‘void 
net_instaweb::MemberFunction1<C, T1>::Cancel() [with C = 
net_instaweb::AsyncCache, T1 = 
std::vector<net_instaweb::CacheInterface::KeyCallback, 
std::allocator<net_instaweb::CacheInterface::KeyCallback> >*]’:
net/instaweb/util/async_cache.cc:178:   instantiated from here
./net/instaweb/util/public/function.h:173: error: NULL used in arithmetic
./net/instaweb/util/public/function.h: In member function ‘void 
net_instaweb::MemberFunction2<C, T1, T2>::Cancel() [with C = 
net_instaweb::AsyncCache, T1 = GoogleString*, T2 = 
net_instaweb::CacheInterface::Callback*]’:
net/instaweb/util/async_cache.cc:178:   instantiated from here
./net/instaweb/util/public/function.h:204: error: NULL used in arithmetic
./net/instaweb/util/public/function.h: In member function ‘void 
net_instaweb::MemberFunction0<C>::Cancel() [with C = net_instaweb::Function]’:
net/instaweb/util/async_cache.cc:178:   instantiated from here
./net/instaweb/util/public/function.h:145: error: NULL used in arithmetic
make: *** 
[out/Release/obj.target/instaweb_util/net/instaweb/util/async_cache.o] Error 1

Original comment by [email protected] on 25 Jan 2013 at 2:20

GoogleCodeExporter avatar Apr 06 '15 15:04 GoogleCodeExporter

I think g++ is right and this was not pedantically correct as written, but it 
should be easy to change if you are up for hacking.

I'm not 100% sure what the right syntax is and since you are compiling it now 
you might need to iterate & report back to us so we can fix the source.  I'd 
try just replacing NULL with 0 at the identified lines.  Or you might try to 
use static_cast<Func>(0), and if that works, #define NULL_MEMBER_FN after the 
definition of CALL_MEMBER_FN.

Original comment by [email protected] on 25 Jan 2013 at 2:27

GoogleCodeExporter avatar Apr 06 '15 15:04 GoogleCodeExporter

s/NULL/0/ in that file works. 

Next error : http://paste.debian.net/228604/

I don't do G++ or C++ so I really don't know what to do here.

Original comment by [email protected] on 25 Jan 2013 at 3:46

GoogleCodeExporter avatar Apr 06 '15 15:04 GoogleCodeExporter

Is there any chance you have compiled some other code that uses
google/thrid_party on that machine?
The lines reported in those error messages don't line up what I'm seeing.

Original comment by [email protected] on 25 Jan 2013 at 3:56

GoogleCodeExporter avatar Apr 06 '15 15:04 GoogleCodeExporter

There is at least one problem here which is due to the way we build 
mod_pagespeed.  We capture the generated files from several other packages: 
gflags, protobufs, possibly others, for a few specific platforms (x86-32, 
x86-64, mac-64 I think), rather than generating those files for each dependency 
via their ./configure scripts.  There is a non-intuitive process we go through 
when we add a new dependency to capture all these files.

It's possible that a better resolution to this issue may emerge as a result of 
some work that's going on for our next release.

Re-opening this to track it.  I don't think we're going to be able take on 
compiling for this specific architecture, though.

In particular, if the packages we depend on (gflags, protobufs + others) can't 
be compiled on SheevaPlug then mod_pagespeed won't be able to either.


(Side note: we could cut dependencies on gflags for building the module, though 
we need it for unit tests.  And would you really want to deploy mod_pagespeed 
on a platform where we can't run the unit tests...?)_

Original comment by [email protected] on 29 Jan 2013 at 2:04

  • Changed state: Accepted

GoogleCodeExporter avatar Apr 06 '15 15:04 GoogleCodeExporter

This is a very old thread but attempting to resurface due to the increasing need to compile for arm64. There is a similar discussion for Nginx as well. https://github.com/apache/incubator-pagespeed-ngx/issues/1213

timnolte avatar Jan 29 '23 18:01 timnolte