-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