1 |
On Sunday, May 03, 2015 11:59:08 PM Walter Dnes wrote: |
2 |
> On Sun, May 03, 2015 at 02:57:46PM -0400, Fernando Rodriguez wrote |
3 |
> |
4 |
> > Some packages do custom preprocessing and other weird things during |
5 |
> > the build process that cause problems with pump mode since it caches |
6 |
> > copies of the unmodified headers. If you're lucky it just fails (and |
7 |
> > usually falls back on compiling locally), if you're not then it may |
8 |
> > succeed and you'll get runtime bugs. I haven't find a package yet |
9 |
> > that fails without pump mode as long as your CFLAGS are set properly. |
10 |
> |
11 |
> Seamonkey fails during the build process. Two tries, and the build |
12 |
> log was 74,046 bytes each time. I have an Intel x86_64 as the host, and |
13 |
> an Atom i686 (32-bit only) as the client. Given your description, I may |
14 |
> drop "pump" altogether from my "xmerge" script. I'll unmerge |
15 |
> seamonkey-bin, and try distcc-building seamonkey from source, without |
16 |
> "pump", Monday when I have more time. Here are a few lines from the |
17 |
> failed build log, using "pump"... |
18 |
> |
19 |
> Executing: gcc -o nsinstall_real -march=atom -mtune=atom -fstack-protector - |
20 |
pipe -mno-avx -DXP_UNIX -MD -MP -MF .deps/nsinstall_real.pp -O2 -DUNICODE - |
21 |
D_UNICODE -Wl,-O1 -Wl,--as-needed host_nsinstall.o host_pathsub.o |
22 |
> |
23 |
> /usr/lib/gcc/i686-pc-linux-gnu/4.8.4/../../../../i686-pc-linux-gnu/bin/ld: |
24 |
i386:x86-64 architecture of input file `host_nsinstall.o' is incompatible with |
25 |
i386 output |
26 |
> |
27 |
> /usr/lib/gcc/i686-pc-linux-gnu/4.8.4/../../../../i686-pc-linux-gnu/bin/ld: |
28 |
i386:x86-64 architecture of input file `host_pathsub.o' is incompatible with |
29 |
i386 output |
30 |
> |
31 |
> /usr/lib/gcc/i686-pc-linux-gnu/4.8.4/../../../../i686-pc-linux-gnu/bin/ld: |
32 |
host_nsinstall.o: file class ELFCLASS64 incompatible with ELFCLASS32 |
33 |
> |
34 |
> /usr/lib/gcc/i686-pc-linux-gnu/4.8.4/../../../../i686-pc-linux-gnu/bin/ld: |
35 |
final link failed: File in wrong format |
36 |
> |
37 |
> |
38 |
|
39 |
The error on the link that you posted looks like cause by pump mode, this one |
40 |
I'm not so sure. |
41 |
|
42 |
It looks like you're not using the cross compiler on the host as it would not |
43 |
generate 64 bit code. Did you add -m32 to your CFLAGS on the client box? Also |
44 |
you may need to set the custom-cflags use flag. Can you verify that it is using |
45 |
the cross compiler on the host? |
46 |
|
47 |
I'm not sure exactly what the gentoo recommended distcc/cross compile setup |
48 |
but if you do it like I suggested on your other thread (using the host 64bit |
49 |
compiler) it should work. Look at the links you got under /usr/lib/distcc/bin. |
50 |
All you need to do is create scripts on the host with the exact same names and |
51 |
have them execute the compiler that you want with the options you want (I just |
52 |
have it execute the 64bit compiler with -m32). Then make sure that distccd (on |
53 |
host) finds them before the actual compiler by putting it in the PATH |
54 |
environment variable before anything else. For that you may need to modify the |
55 |
init script or unit file if using systemd or just start distccd manually. |
56 |
|
57 |
A simpler hack is to just delete the c++, cc, gcc, and g++ symlinks from the |
58 |
/usr/lib/distcc/bin directory. That will force distcc to only trap the |
59 |
compiler invocations that use the full compiler name and end up using the |
60 |
cross compiler in the host, but if you do this you may end up compiling more |
61 |
stuff locally. |
62 |
|
63 |
|
64 |
-- |
65 |
Fernando Rodriguez |