[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: CCFLAG and CFLAGS doesn't propagate.



> ----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
> 
> I'm trying to get ffmpeg, transcode and mplayer repackaged for amd64.
> ffmpeg fails with :
> gcc -shared -o libavcodec.so common.o utils.o mem.o allcodecs.o mpegvideo.o jrevdct.o jfdctfst.o jfdctint.o mpegaudio.o ac3enc.o mjpeg.o resample.o resample2.o dsputil.o motion_est.o imgconvert.o imgresample.o mpeg12.o mpegaudiodec.o pcm.o simple_idct.o ratecontrol.o adpcm.o eval.o dv.o error_resilience.o fft.o mdct.o mace.o huffyuv.o cyuv.o opts.o raw.o h264.o golomb.o vp3.o asv1.o 4xm.o cabac.o ffv1.o ra144.o ra288.o vcr1.o cljr.o roqvideo.o dpcm.o interplayvideo.o xan.o rpza.o cinepak.o msrle.o msvideo1.o vqavideo.o idcinvideo.o adx.o rational.o faandct.o 8bps.o smc.o parser.o flicvideo.o truemotion1.o vmdav.o lcl.o qtrle.o g726.o flac.o vp3dsp.o integer.o snow.o tscc.o sonic.o ulti.o h264idct.o qdrw.o xl.o rangecoder.o png.o pnm.o pthread.o h263.o h261.o msmpeg4.o h263dec.o svq1.o rv10.o wmadec.o indeo3.o a52dec.o liba52/bit_allocate.o liba52/bitstream.o liba52/downmix.o liba52/imdct.o  liba52/parse.o liba52/crc.o liba52/resample.o dtsdec.o faad.o faac.o xvidff.o mp3lamea
> udio.o oggvorbis.o i386/fdct_mmx.o i386/cputest.o i386/dsputil_mmx.o i386/mpegvideo_mmx.o i386/idct_mmx.o i386/motion_est_mmx.o i386/simple_idct_mmx.o i386/fft_sse.o i386/vp3dsp_mmx.o i386/vp3dsp_sse2.o  -lm -ldts -lz -lpthread -ldl -ldts -lfaac -lxvidcore -lmp3lame -lvorbis -lvorbisenc  -Wl,--warn-common -rdynamic  -Wl,-soname -Wl,libavcodec-cvs.so
> /usr/bin/ld: common.o: relocation R_X86_64_32 can not be used when making a shared object; recompile with -fPIC
> common.o: could not read symbols: Bad value
> 
> My invironment includes
> CFLAGS=-fPIC
> CCFLAG=-fPIC
> 
> Is this a configure problem, or how should I proceed to get -fPIC
> propagated down the chain in a apt-get source --build <package>?
> 

I got this problem even with -fPIC with mythtv.  Look for the MANGLE
macro.  It refers to global constants.  I set local variables equal to
the global values and added an asm "m" variable corresponding to the
local variable, and then it worked.

For a short example, see the usage of the variable otmp below.  File is
motion_est_mmx.c.  There are a lot of MANGLE's in dsputil_mmx.c and a
few in simple_idct_mmx.c.

static inline void sad8_4_mmx2(uint8_t *blk1, uint8_t *blk2, int stride,
int h)
{ //FIXME reuse src
    long len= -(stride*h);
    unsigned long otmp = bone;
    asm volatile(
        ".balign 16			\n\t"
        "movq %5, %%mm5	\n\t" 
#if 0
        "movq "MANGLE(bone)", %%mm5	\n\t" 
#endif
        "1:				\n\t"
        "movq (%1, %%rax), %%mm0	\n\t"
        "movq (%2, %%rax), %%mm2	\n\t"
        "movq 1(%1, %%rax), %%mm1	\n\t"
        "movq 1(%2, %%rax), %%mm3	\n\t"
        "pavgb %%mm2, %%mm0		\n\t"
        "pavgb %%mm1, %%mm3		\n\t"
        "psubusb %%mm5, %%mm3		\n\t"
        "pavgb %%mm3, %%mm0		\n\t"
        "movq (%3, %%rax), %%mm2	\n\t"
        "psadbw %%mm2, %%mm0		\n\t"
        "addq %4, %%rax			\n\t"
        "movq (%1, %%rax), %%mm1	\n\t"
        "movq (%2, %%rax), %%mm3	\n\t"
        "movq 1(%1, %%rax), %%mm2	\n\t"
        "movq 1(%2, %%rax), %%mm4	\n\t"
        "pavgb %%mm3, %%mm1		\n\t"
        "pavgb %%mm4, %%mm2		\n\t"
        "psubusb %%mm5, %%mm2		\n\t"
        "pavgb %%mm1, %%mm2		\n\t"
        "movq (%3, %%rax), %%mm1	\n\t"
        "psadbw %%mm1, %%mm2		\n\t"
        "paddw %%mm2, %%mm0		\n\t"
        "paddw %%mm0, %%mm6		\n\t"
        "addq %4, %%rax			\n\t"
        " js 1b				\n\t"
        : "+a" (len)
        : "r" (blk1 - len), "r" (blk1 - len + stride), "r" (blk2 - len),
"r" ((long)stride), "m" (otmp)
    );
}

Fred



Reply to: