Thread: fixing Makefile.shlib for solaris/gcc with -m64 flag
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
"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
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
"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
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/
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
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
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
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)