pg.ddx.io  pgsql-hackers@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Noah Misch <noah@leadboat.com>
To: Brar Piening <brar@gmx.de>
Cc: Heikki Linnakangas <heikki.linnakangas@enterprisedb.com>
Cc: Magnus Hagander <magnus@hagander.net>
Cc: pgsql-hackers <pgsql-hackers@postgresql.org>
Subject: Re: Visual Studio 2012 RC
Date: Mon, 8 Oct 2012 08:11:28 -0400
Message-ID: <20121008121128.GA2248@tornado.leadboat.com> (raw)
In-Reply-To: <5071CA3E.5040509@gmx.de>
References: <4FCA84F6.5090706@gmx.de>
	<CABUevEzT4B+MyM6-VH4_vvg1KFys4XAAKQcaKbbHRKH7mF7SSw@mail.gmail.com>
	<4FD3F553.9060105@gmx.de>
	<CABUevEwEYa8Ay5aK9kk+FPCWs6xiwnW-e1B2mcx3Ff3NMaBuhg@mail.gmail.com>
	<4FEB0D39.6080108@enterprisedb.com>
	<50526BA6.3030103@gmx.de>
	<20121002011201.GC30396@tornado.leadboat.com>
	<5071CA3E.5040509@gmx.de>

On Sun, Oct 07, 2012 at 08:30:22PM +0200, Brar Piening wrote:
> Noah Misch wrote:
>> I'm marking this patch Waiting on Author, but the changes needed to  
>> get it Ready for Committer are fairly trivial. Thanks, nm 
>
> Thanks for your review and sorry for my delayed response - I've been on  
> vacation.
>
> I'll look into adressing your comments and suggestions within the next  
> few days.

Thanks.  I decided to try a 32-bit build, but Solution::DeterminePlatform
detected it as x64.  Its shibboleth is no longer valid; the cl.exe shipping
with VS 2012 Express for Desktop has a /favor option for both architectures:

32clhelp:/favor:<blend|ATOM> select processor to optimize for, one of:
64clhelp:/favor:<blend|AMD64|INTEL64|ATOM> select processor to optimize for, one of:

Overlaying the first attached change fixed detection for this particular
compiler, but I have not checked compatibility with older versions.  Do you
have VS 2008 and/or VS 2010 handy?  Having worked around that, the build
eventually failed like this:

     Creating library Debug\postgres\postgres.lib and object Debug\postgres\postgres.exp
postgres.exp : error LNK2001: unresolved external symbol _xmm@41f00000000000000000000000000000 [c:\cygwin\home\nm\src\pg\postgresql\postgres.vcxproj]
postgres.exp : error LNK2001: unresolved external symbol _xmm@80000000000000008000000000000000 [c:\cygwin\home\nm\src\pg\postgresql\postgres.vcxproj]
postgres.exp : error LNK2001: unresolved external symbol _xmm@80000000800000008000000080000000 [c:\cygwin\home\nm\src\pg\postgresql\postgres.vcxproj]
.\Debug\postgres\postgres.exe : fatal error LNK1120: 3 unresolved externals [c:\cygwin\home\nm\src\pg\postgresql\postgres.vcxproj]
  The command exited with code 1120.
Done executing task "Link" -- FAILED.

This compiler emits _xmm symbols automatically, where needed.  The second
attached change lets the build complete and pass tests, but I can't readily
explain why it's necessary.  In the 64-bit build, the _xmm symbols export
normally (albeit, I presume, needlessly).  I hoped to find some rationale for
the preexisting gendef.pl exclusion of _real, which seems to resemble _xmm in
origin and use.  Magnus/anyone, can you shed light on our exclusion of "_real"
symbols from .def files?

In any event, if these incremental changes seem sane to you, please merge them
into your next version.

nm
diff --git a/src/tools/msvc/Solution.pm b/src/tools/msvc/Solution.pm
index e51665c..218ca8d 100644
--- a/src/tools/msvc/Solution.pm
+++ b/src/tools/msvc/Solution.pm
@@ -63,13 +63,12 @@ sub DeterminePlatform
 {
 	my $self = shift;
 
-	# Determine if we are in 32 or 64-bit mode. Do this by seeing if CL has
-	# 64-bit only parameters.
+	# Examine CL help output to determine if we are in 32 or 64-bit mode.
 	$self->{platform} = 'Win32';
-	open(P, "cl /? 2>NUL|") || die "cl command not found";
+	open(P, "cl /? 2>&1 |") || die "cl command not found";
 	while (<P>)
 	{
-		if (/^\/favor:</)
+		if (/for x64/)
 		{
 			$self->{platform} = 'x64';
 			last;
diff --git a/src/tools/msvc/gendef.pl b/src/tools/msvc/gendef.pl
index ab65c46..8ef0422 100644
--- a/src/tools/msvc/gendef.pl
+++ b/src/tools/msvc/gendef.pl
@@ -40,6 +40,7 @@ while (<$ARGV[0]/*.obj>)
 		next if $pieces[6] =~ /^\(/;
 		next if $pieces[6] =~ /^__real/;
 		next if $pieces[6] =~ /^__imp/;
+		next if $pieces[6] =~ /^__xmm/;
 		next if $pieces[6] =~ /NULL_THUNK_DATA$/;
 		next if $pieces[6] =~ /^__IMPORT_DESCRIPTOR/;
 		next if $pieces[6] =~ /^__NULL_IMPORT/;

Attachments:

  [text/plain] vs2012-detect-32bit.patch (653B, ../20121008121128.GA2248@tornado.leadboat.com/2-vs2012-detect-32bit.patch)
  download | inline diff:
diff --git a/src/tools/msvc/Solution.pm b/src/tools/msvc/Solution.pm
index e51665c..218ca8d 100644
--- a/src/tools/msvc/Solution.pm
+++ b/src/tools/msvc/Solution.pm
@@ -63,13 +63,12 @@ sub DeterminePlatform
 {
 	my $self = shift;
 
-	# Determine if we are in 32 or 64-bit mode. Do this by seeing if CL has
-	# 64-bit only parameters.
+	# Examine CL help output to determine if we are in 32 or 64-bit mode.
 	$self->{platform} = 'Win32';
-	open(P, "cl /? 2>NUL|") || die "cl command not found";
+	open(P, "cl /? 2>&1 |") || die "cl command not found";
 	while (<P>)
 	{
-		if (/^\/favor:</)
+		if (/for x64/)
 		{
 			$self->{platform} = 'x64';
 			last;

  [text/plain] vs2012-exclude-_xmm.patch (474B, ../20121008121128.GA2248@tornado.leadboat.com/3-vs2012-exclude-_xmm.patch)
  download | inline diff:
diff --git a/src/tools/msvc/gendef.pl b/src/tools/msvc/gendef.pl
index ab65c46..8ef0422 100644
--- a/src/tools/msvc/gendef.pl
+++ b/src/tools/msvc/gendef.pl
@@ -40,6 +40,7 @@ while (<$ARGV[0]/*.obj>)
 		next if $pieces[6] =~ /^\(/;
 		next if $pieces[6] =~ /^__real/;
 		next if $pieces[6] =~ /^__imp/;
+		next if $pieces[6] =~ /^__xmm/;
 		next if $pieces[6] =~ /NULL_THUNK_DATA$/;
 		next if $pieces[6] =~ /^__IMPORT_DESCRIPTOR/;
 		next if $pieces[6] =~ /^__NULL_IMPORT/;

view thread (54+ messages)  latest in thread

Message-ID: <20121008121128.GA2248@tornado.leadboat.com>
Permalink:  ../20121008121128.GA2248@tornado.leadboat.com/
Also on:    postgresql.org/message-id/20121008121128.GA2248@tornado.leadboat.com

 ·  · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-hackers@postgresql.org
  Cc: noah@leadboat.com, brar@gmx.de, heikki.linnakangas@enterprisedb.com, magnus@hagander.net
  Subject: Re: Visual Studio 2012 RC
  In-Reply-To: <20121008121128.GA2248@tornado.leadboat.com>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox