[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