Re: Visual Studio 2012 RC

From: Brar Piening <brar(at)gmx(dot)de>
To: Noah Misch <noah(at)leadboat(dot)com>
Cc: Heikki Linnakangas <heikki(dot)linnakangas(at)enterprisedb(dot)com>, Magnus Hagander <magnus(at)hagander(dot)net>, pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Visual Studio 2012 RC
Date: 2012-10-14 21:34:54
Message-ID: 507B2FFE.2050905@gmx.de
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Noah Misch wrote:
> 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?
Older compilers work fine but localized ones will probably cause trouble
(for -> für in german).
I've decided to change the regex to "/^\/favor:<.+AMD64/" in my current
version of the patch as this is not very likely to appear in a 32-bit
environment and will not be subject ot localization problems.

> 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(at)41f00000000000000000000000000000 [c:\cygwin\home\nm\src\pg\postgresql\postgres.vcxproj]
> postgres.exp : error LNK2001: unresolved external symbol _xmm(at)80000000000000008000000000000000 [c:\cygwin\home\nm\src\pg\postgresql\postgres.vcxproj]
> postgres.exp : error LNK2001: unresolved external symbol _xmm(at)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?
I kind of feel like excluding the _xmm symbols is the right thing to do
but - like you - I can't explain why they cause problems in a x86 build.

Regards,
Brar

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Gilles Darold 2012-10-14 22:17:46 Re: pg_dump restore error
Previous Message Simon Riggs 2012-10-14 21:29:31 Re: Deprecating RULES