-fPIC or -fpic?
Nakata Maho
chat95 at mac.com
Thu Mar 18 21:23:56 PST 2004
Dear all,
obrien give me detailed explanation the difference
-fpic and -fPIC (thanks!),
however, as kris told me, we must test which is better.
currently, it seems only for sparc64 -fPIC make sence,
so, in /usr/share/mk/bsd.lib.mk, we find,
.if !defined(PICFLAG)
.if ${MACHINE_ARCH} == "sparc64"
PICFLAG=-fPIC
.else
PICFLAG=-fpic
.endif
.endif
this is a good choice.
However, in the framework of ports, there's no way to do this since:
% grep fPIC /usr/ports/Mk/bsd.*
%
% grep fpic /usr/ports/Mk/bsd.*
%
so I have to hardcode this, and I don't like to this.
(see in math/atlas, math/atlas-devel, and biology/pymol)
Otherwise, this patch (for example, math/atlas)
@@ -49,13 +49,7 @@
@(cd ${WRKSRC}; ${PATCH} < ${FILESDIR}/alpha-patch)
.endif
-.if !defined(PICFLAG)
-.if ${MACHINE_ARCH} == "sparc64"
-PICFLAG=-fPIC
-.else
-PICFLAG=-fpic
-.endif
-.endif
+.include <bsd.lib.mk>
doesn't help me
% make
Warning: Object directory not changed from original /home/maho/work/ports/math/atlas
Note:
at least amd64, in some cases, we need -fpic or -fPIC when we make
shared libraries. some programs don't set such flag when compiling as you know.
in i386, we don't need -fpic to make shared lib, so we force to make
shared lib from static ones, so this can be a big problem.
at least in the ports, we need PICFLAG definiton.
putting this in bsd.port.mk
.if !defined(PICFLAG)
.if ${MACHINE_ARCH} == "sparc64"
PICFLAG=-fPIC
.else
PICFLAG=-fpic
.endif
.endif
is not a good idea at all, since it doesn't sync with bsd.lib.mk.
splitting bsd.lib.mk to bsd.lib.pic.mk that contains only this,
then include at bsd.port.mk might be a better idea, but still dirty.
How do I do?
--nakata maho
More information about the cvs-all
mailing list