Thread: fixing Makefile.shlib for solaris/gcc with -m64 flag

fixing Makefile.shlib for solaris/gcc with -m64 flag

From
"Jignesh K. Shah"
Date:
Hello All,

When I compile with gcc on Solaris with -m64 flags, all shared lbiraries fail.

Can someone fix the following in Makefile.shlib


ifeq ($(PORTNAME), solaris)  ifeq ($(GCC), yes)    LINK.shared         = $(CC) -shared  else    LINK.shared         =
$(CC)-G $(CFLAGS)    # CFLAGS added for X86_64  endif
 


It should be

ifeq ($(PORTNAME), solaris)  ifeq ($(GCC), yes)    LINK.shared         = $(COMPILER) -shared  else    LINK.shared
 = $(CC) -G $(CFLAGS)    # CFLAGS added for X86_64  endif
 


Thanks.
Regards,
Jignesh


Re: fixing Makefile.shlib for solaris/gcc with -m64 flag

From
Tom Lane
Date:
"Jignesh K. Shah" <J.K.Shah@Sun.COM> writes:
> It should be
>      LINK.shared         = $(COMPILER) -shared

Why?  What's the difference, and why is it appropriate to fix it that
way instead of by changing CFLAGS?
        regards, tom lane


Re: fixing Makefile.shlib for solaris/gcc with -m64 flag

From
"Jignesh K. Shah"
Date:
simple if I use -m64 for 64 bit then all end binaries are generated 64-bit and the shared libraries 
are generated 32-bit and the compilation fails (ONLY ON SOLARIS) since that particular line is only 
for the condition Solaris AND gcc.

If I use the COMPILER which is CC + CFLAGS it passes -m64 properly to it and generates shared 
libraries 64-bit and the compile continues..

I just tested it out.

-Jignesh


Tom Lane wrote:
> "Jignesh K. Shah" <J.K.Shah@Sun.COM> writes:
>> It should be
>>      LINK.shared         = $(COMPILER) -shared
> 
> Why?  What's the difference, and why is it appropriate to fix it that
> way instead of by changing CFLAGS?
> 
>             regards, tom lane


Re: fixing Makefile.shlib for solaris/gcc with -m64 flag

From
Tom Lane
Date:
"Jignesh K. Shah" <J.K.Shah@Sun.COM> writes:
> simple if I use -m64 for 64 bit then all end binaries are generated 64-bit and the shared libraries 
> are generated 32-bit and the compilation fails (ONLY ON SOLARIS) since that particular line is only 
> for the condition Solaris AND gcc.

> If I use the COMPILER which is CC + CFLAGS it passes -m64 properly to it and generates shared 
> libraries 64-bit and the compile continues..

Hmm ... I see we're doing it that way already for some other platforms,
but I can't help thinking it's a kluge.  Wouldn't the correct answer be
that -m64 needs to be in LDFLAGS?
        regards, tom lane


Re: fixing Makefile.shlib for solaris/gcc with -m64 flag

From
Peter Eisentraut
Date:
Am Mittwoch, 17. Januar 2007 17:12 schrieb Tom Lane:
> "Jignesh K. Shah" <J.K.Shah@Sun.COM> writes:
> > simple if I use -m64 for 64 bit then all end binaries are generated
> > 64-bit and the shared libraries are generated 32-bit and the compilation
> > fails (ONLY ON SOLARIS) since that particular line is only for the
> > condition Solaris AND gcc.
> >
> > If I use the COMPILER which is CC + CFLAGS it passes -m64 properly to it
> > and generates shared libraries 64-bit and the compile continues..
>
> Hmm ... I see we're doing it that way already for some other platforms,
> but I can't help thinking it's a kluge.  Wouldn't the correct answer be
> that -m64 needs to be in LDFLAGS?

The correct answer may be to put -m64 into CC.

-- 
Peter Eisentraut
http://developer.postgresql.org/~petere/


Re: fixing Makefile.shlib for solaris/gcc with -m64 flag

From
"Jignesh K. Shah"
Date:
I tried that but it didn't work.

Also on Solaris it typically uses the ld in /usr/ccs/bin/ld which uses "-64" as its flag for 64 bit 
and if you put LDFLAGS out there it will fail as unrecognized unless gcc parses -64 to -m64.

Putting -m64 in CC will do the workaround but then I guess that's what CFLAGS is for..

Regards,
Jignesh


Tom Lane wrote:
> "Jignesh K. Shah" <J.K.Shah@Sun.COM> writes:
>> simple if I use -m64 for 64 bit then all end binaries are generated 64-bit and the shared libraries 
>> are generated 32-bit and the compilation fails (ONLY ON SOLARIS) since that particular line is only 
>> for the condition Solaris AND gcc.
> 
>> If I use the COMPILER which is CC + CFLAGS it passes -m64 properly to it and generates shared 
>> libraries 64-bit and the compile continues..
> 
> Hmm ... I see we're doing it that way already for some other platforms,
> but I can't help thinking it's a kluge.  Wouldn't the correct answer be
> that -m64 needs to be in LDFLAGS?
> 
>             regards, tom lane


Re: fixing Makefile.shlib for solaris/gcc with -m64 flag

From
Tom Lane
Date:
Peter Eisentraut <peter_e@gmx.net> writes:
> Am Mittwoch, 17. Januar 2007 17:12 schrieb Tom Lane:
>> "Jignesh K. Shah" <J.K.Shah@Sun.COM> writes:
>>> simple if I use -m64 for 64 bit then all end binaries are generated
>>> 64-bit and the shared libraries are generated 32-bit and the compilation
>>> fails (ONLY ON SOLARIS) since that particular line is only for the
>>> condition Solaris AND gcc.
>>> 
>>> If I use the COMPILER which is CC + CFLAGS it passes -m64 properly to it
>>> and generates shared libraries 64-bit and the compile continues..
>> 
>> Hmm ... I see we're doing it that way already for some other platforms,
>> but I can't help thinking it's a kluge.  Wouldn't the correct answer be
>> that -m64 needs to be in LDFLAGS?

> The correct answer may be to put -m64 into CC.

Did we conclude that that was a satisfactory solution, or is this still
a live patch proposal?

If -m64 in CC is the right solution, it should probably be mentioned in
FAQ_Solaris.
        regards, tom lane


Re: fixing Makefile.shlib for solaris/gcc with -m64 flag

From
"Jignesh K. Shah"
Date:
I dont think we solved this.. But I think the way to put -m64 should be same as in Linux and Solaris 
and not different.

Thanks.
Regards,
Jignesh


Tom Lane wrote:
> Peter Eisentraut <peter_e@gmx.net> writes:
>> Am Mittwoch, 17. Januar 2007 17:12 schrieb Tom Lane:
>>> "Jignesh K. Shah" <J.K.Shah@Sun.COM> writes:
>>>> simple if I use -m64 for 64 bit then all end binaries are generated
>>>> 64-bit and the shared libraries are generated 32-bit and the compilation
>>>> fails (ONLY ON SOLARIS) since that particular line is only for the
>>>> condition Solaris AND gcc.
>>>>
>>>> If I use the COMPILER which is CC + CFLAGS it passes -m64 properly to it
>>>> and generates shared libraries 64-bit and the compile continues..
>>> Hmm ... I see we're doing it that way already for some other platforms,
>>> but I can't help thinking it's a kluge.  Wouldn't the correct answer be
>>> that -m64 needs to be in LDFLAGS?
> 
>> The correct answer may be to put -m64 into CC.
> 
> Did we conclude that that was a satisfactory solution, or is this still
> a live patch proposal?
> 
> If -m64 in CC is the right solution, it should probably be mentioned in
> FAQ_Solaris.
> 
>             regards, tom lane


Re: fixing Makefile.shlib for solaris/gcc with -m64 flag

From
Bruce Momjian
Date:
OK, I have made Solaris gcc the same as Linux in Makefile.shlib, patch
attached.

I am not backpatching this.  We will get this tested for 8.3.

---------------------------------------------------------------------------

Jignesh K. Shah wrote:
> I dont think we solved this.. But I think the way to put -m64 should be same as in Linux and Solaris
> and not different.
>
> Thanks.
> Regards,
> Jignesh
>
>
> Tom Lane wrote:
> > Peter Eisentraut <peter_e@gmx.net> writes:
> >> Am Mittwoch, 17. Januar 2007 17:12 schrieb Tom Lane:
> >>> "Jignesh K. Shah" <J.K.Shah@Sun.COM> writes:
> >>>> simple if I use -m64 for 64 bit then all end binaries are generated
> >>>> 64-bit and the shared libraries are generated 32-bit and the compilation
> >>>> fails (ONLY ON SOLARIS) since that particular line is only for the
> >>>> condition Solaris AND gcc.
> >>>>
> >>>> If I use the COMPILER which is CC + CFLAGS it passes -m64 properly to it
> >>>> and generates shared libraries 64-bit and the compile continues..
> >>> Hmm ... I see we're doing it that way already for some other platforms,
> >>> but I can't help thinking it's a kluge.  Wouldn't the correct answer be
> >>> that -m64 needs to be in LDFLAGS?
> >
> >> The correct answer may be to put -m64 into CC.
> >
> > Did we conclude that that was a satisfactory solution, or is this still
> > a live patch proposal?
> >
> > If -m64 in CC is the right solution, it should probably be mentioned in
> > FAQ_Solaris.
> >
> >             regards, tom lane
>
> ---------------------------(end of broadcast)---------------------------
> TIP 3: Have you checked our extensive FAQ?
>
>                http://www.postgresql.org/docs/faq

--
  Bruce Momjian  <bruce@momjian.us>          http://momjian.us
  EnterpriseDB                               http://www.enterprisedb.com

  + If your life is a hard drive, Christ can be your backup. +
Index: src/Makefile.shlib
===================================================================
RCS file: /cvsroot/pgsql/src/Makefile.shlib,v
retrieving revision 1.108
diff -c -c -r1.108 Makefile.shlib
*** src/Makefile.shlib    11 Feb 2007 19:31:45 -0000    1.108
--- src/Makefile.shlib    20 Feb 2007 22:45:06 -0000
***************
*** 191,197 ****

  ifeq ($(PORTNAME), solaris)
    ifeq ($(GCC), yes)
!     LINK.shared        = $(CC) -shared
    else
  # CFLAGS added for X86_64
      LINK.shared        = $(CC) -G $(CFLAGS)
--- 191,197 ----

  ifeq ($(PORTNAME), solaris)
    ifeq ($(GCC), yes)
!     LINK.shared        = $(COMPILER) -shared # $(COMPILER) needed for -m64
    else
  # CFLAGS added for X86_64
      LINK.shared        = $(CC) -G $(CFLAGS)