[bootstrap 1.1.1 on Solaris 2.6] incorrect PIC options fed to cc
Phil Edwards
pedwards@ball.com
Wed Dec 9 08:30:00 GMT 1998
Bootstrapping egcs 1.1.1 on a sparc-sun-solaris2.6 using the native
v4.0 cc, configured with --enable-shared.
The PICFLAG case statement emits -fpic/-fPIC to cc, which is incorrect.
The SPARCompiler cc takes -Kpic/-KPIC for those two options.
I'm not certain where mt-frag's PICFLAG_FOR_TARGET comes into play; I
assume it would be when building a cross-compiler... The ChangeLog
has recent entries saying "don't pass PICFLAG_FOR_TARGET". In any
case, I changed both config/m[th]-sparcpic before running configure:
[I feel silly doing a context diff on one-line files, but what the
heck...]
==============================================================
diff -rc egcs-1.1.1/config/mh-sparcpic correct_sparc/config/mh-sparcpic
*** egcs-1.1.1/config/mh-sparcpic Thu Feb 5 19:33:03 1998
--- correct_sparc/config/mh-sparcpic Tue Dec 8 16:36:31 1998
***************
*** 1 ****
! PICFLAG=`case "${LIBCFLAGS} ${LIBCXXFLAGS}" in *-fpic* ) echo -fpic ;; * ) echo -fPIC ;; esac`
--- 1 ----
! PICFLAG=`case "${LIBCFLAGS} ${LIBCXXFLAGS}" in *-fpic* ) echo -Kpic ;; * ) echo -KPIC ;; esac`
diff -rc egcs-1.1.1/config/mt-sparcpic correct_sparc/config/mt-sparcpic
*** egcs-1.1.1/config/mt-sparcpic Thu Feb 5 19:33:04 1998
--- correct_sparc/config/mt-sparcpic Tue Dec 8 16:36:41 1998
***************
*** 1 ****
! PICFLAG_FOR_TARGET=`case "${LIBCFLAGS} ${LIBCXXFLAGS}" in *-fpic* ) echo -fpic ;; * ) echo -fPIC ;; esac`
--- 1 ----
! PICFLAG_FOR_TARGET=`case "${LIBCFLAGS} ${LIBCXXFLAGS}" in *-fpic* ) echo -Kpic ;; * ) echo -KPIC ;; esac`
==============================================================
This change is required for --enable-shared to work properly on
Solaris using CC=cc. However, if using CC=gcc, this will break.
I know I've seen configures that ask "Checking if C compiler is
gcc..." but I don't know how to work that into egcs' setup, else
I'd send a patch for that, too.
As a result, this is correct when building libiberty during the
stage1 construction. But, when the compiler is finished and the
libraries are configured and built, the same fragment files are
used with "CC=/tmp/building/gcc/xgcc -B/tmp/building/gcc/". And
so it breaks.
I don't know how to use one set of frags when cc is being used,
and another set when [x]gcc is being used. I ended up starting
from scratch (overkill, I know, but oh well), with this routine:
1) using the original unchanged 1.1.1 source, configure with
--enable-shared
2) in the objdir's Makefile(s), change the -fpic/-fPIC to the
correct -Kpic/-KPIC
3) make bootstrap
4) the library's directory in objdir hasn't been created nor
configured yet, so the automagic configure will pick up the
unchanged frag files and correctly pass -fPIC to xgcc
The following diff is the one I'll be keeping around, to apply
to future objdir's:
==============================================================
diff -rc base_configure/Makefile building/Makefile
*** base_configure/Makefile Tue Dec 8 18:02:58 1998
--- building/Makefile Tue Dec 8 18:07:04 1998
***************
*** 339,352 ****
fi`
#### host and target specific makefile fragments come in here.
! PICFLAG_FOR_TARGET=`case "${LIBCFLAGS} ${LIBCXXFLAGS}" in *-fpic* ) echo -fpic ;; * ) echo -fPIC ;; esac`
# Makefile changes for Suns running Solaris 2
SYSV = -DSYSV
RANLIB = true
X11_EXTRA_LIBS = -lnsl -lsocket
! PICFLAG=`case "${LIBCFLAGS} ${LIBCXXFLAGS}" in *-fpic* ) echo -fpic ;; * ) echo -fPIC ;; esac`
###
# Flags to pass down to all sub-makes.
--- 339,352 ----
fi`
#### host and target specific makefile fragments come in here.
! PICFLAG_FOR_TARGET=`case "${LIBCFLAGS} ${LIBCXXFLAGS}" in *-fpic* ) echo -Kpic ;; * ) echo -KPIC ;; esac`
# Makefile changes for Suns running Solaris 2
SYSV = -DSYSV
RANLIB = true
X11_EXTRA_LIBS = -lnsl -lsocket
! PICFLAG=`case "${LIBCFLAGS} ${LIBCXXFLAGS}" in *-fpic* ) echo -Kpic ;; * ) echo -KPIC ;; esac`
###
# Flags to pass down to all sub-makes.
diff -rc base_configure/libiberty/Makefile building/libiberty/Makefile
*** base_configure/libiberty/Makefile Tue Dec 8 18:03:18 1998
--- building/libiberty/Makefile Tue Dec 8 18:07:25 1998
***************
*** 96,102 ****
# Warning: this fragment is automatically generated
# Following fragment copied from ../../egcs-1.1.1/libiberty/config/../../config/mh-sparcpic
! PICFLAG=`case "${LIBCFLAGS} ${LIBCXXFLAGS}" in *-fpic* ) echo -fpic ;; * ) echo -fPIC ;; esac`
enable_shared = yes
INCDIR=$(srcdir)/$(MULTISRCTOP)../include
--- 96,102 ----
# Warning: this fragment is automatically generated
# Following fragment copied from ../../egcs-1.1.1/libiberty/config/../../config/mh-sparcpic
! PICFLAG=`case "${LIBCFLAGS} ${LIBCXXFLAGS}" in *-fpic* ) echo -Kpic ;; * ) echo -KPIC ;; esac`
enable_shared = yes
INCDIR=$(srcdir)/$(MULTISRCTOP)../include
==============================================================
(Next up, sparc-sun-solaris2.4 and mips-sgi-irix6.3 (again).)
--
pedwards@ball.com Ball Aerospace & Technologies Corp.
(937-320-4048) Advanced Systems & Technology Operations
More information about the Gcc-bugs
mailing list