Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 19 Mar 2004 14:29:58 +0900 (JST)
From:      Nakata Maho <chat95@mac.com>
To:        kris@obsecurity.org, maho@FreeBSD.org, ports-committers@FreeBSD.org, cvs-ports@FreeBSD.org, cvs-all@FreeBSD.org
Subject:   -fPIC or -fpic?
Message-ID:  <20040319.142958.783378669.chat95@mac.com>
In-Reply-To: <20040317171904.GC93838@dragon.nuxi.com>
References:  <200403171047.i2HAlUsL048731@repoman.freebsd.org> <20040317111525.GA62305@xor.obsecurity.org> <20040317171904.GC93838@dragon.nuxi.com>

next in thread | previous in thread | raw e-mail | index | archive | help
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




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20040319.142958.783378669.chat95>