Greeetings all,
As an Interix user on x64 I was excited to hear about PGIs compiler. At the moment there is only one other compiler available AFAIK. I downloaded an evaluation version for x64 SUA and installed it. Unfortunatly the installer failed due to wrong permissions applied to the installed directories (it removed all permissions). After some tweaks and a couple of reinstallations, I managed to get it right (I think). It would be advisable to update the installer, it really needs to be fool-proof. The 2 weeks evaluation period is also far too short.

When I did my first test compile I run into a bug: The -largeaddressaware:no linker switch needs to be added to ldrc(121).

When compiling e.g. test compile of GNU make I get some strange warnings:

The compiler includes the Interix gcc.3.3 x86 headers and libs - are you sure this is right?

What about gcc shared libraries? Are they supported in x64 and if so, how to enable, create and use them? Since the linker ultimately is the MS x64 linker, it would be interesting to hear if you have found a solution of this.

sys/types.h(143) => typedef u_int32_t uid_t;
which expands to
typedef unsigned int u_int32_t;
pgcc appears to choke on typedefs on typedefs? This behavior causes pgcc to fail some configure scripts resulting in wrong configuration. Is there any switches that need to be assigned?

I concluded that shared libraries are not supported in Interix by PGI.

Unfortunatly the installer failed due to wrong permissions applied to the installed directories (it removed all permissions).

I'll pass this on.

Quote:

The 2 weeks evaluation period is also far too short.

Please contact PGI Sales at sales@pgroup.com. They can usually extend this for you.

Quote:

When I did my first test compile I run into a bug: The -largeaddressaware:no linker switch needs to be added to ldrc(121).

Can you please describe the bug?

Code:

When compiling e.g. test compile of GNU make I get some strange warnings:

It appears to me that for these messages that "uid_t" might be getting declared elsewhere. However, I'm unable to recreate the issue here so am not positive. What include files are you using? What command line arguments are you using?

Quote:

The compiler includes the Interix gcc.3.3 x86 headers and libs - are you sure this is right?

Yes. A few of GNU header files are not interoperable with PGI compilers and needed to be rewritten. However, we do try to keep the header files as close to the original version as possible.

Quote:

What about gcc shared libraries? Are they supported in x64 and if so, how to enable, create and use them? Since the linker ultimately is the MS x64 linker, it would be interesting to hear if you have found a solution of this.

We have been working closely with Microsoft on creating a linker which will be able to create shared libraries on 32-bit SFU. This linker will be available with the 7.0-7 release. Prior releases and 64-bit SUA do not support GNU style shared libraries.

I appears to me that for these messages that "uid_t" might be getting declared elsewhere. However, I'm unable to recreate the issue here so am not positive. What include files are you using? What command line arguments are you using?

It did that to me to as well, so I checked the Interix SDK headers. Some defines are guarded with __GNUC__ and _MSC_VER - quite unnecessary actually - so I unified them and removed the compiler conditionals. That is: First part of types.h, inttypes.h where int64_t and friends are defined. There is no duplicate uid_t define, but there are exact duplicates of other defines in the headers, of size_t for example. My stdint.h is edited to pass the autoconf C99 test (carefully done!). There could be some detail inflicted by me somewhere causing the problem, one never know. However, gcc, icl and the MS compiler have no problem.

It seems to me that pgcc have problems with typedefs like this:
typedef unsigned long long int uint64_t;

I was thinking there could be a switch like "enable ANSI C"-whatever missing.

Typical commandline : pgcc -O1 -D_ALL_SOURCE -o testapp testapp.c

Quote:

Can you please describe the bug?

I don't remember exactly what the message was, but the linker complains about "ADDR32" conversion without this switch in the PGI libraries and refuse to link. I'm using the MS x64 linker 8.00.50727.762 (VS2005 SP1).

Quote:

7.0-7 release for SUA

Something to look forward to, I think! So, will this release have a GNU-style ld or a MS linker interface?

While it does sound like you know what you're doing, modifying system include files is generally not a good idea. Unfortunately, I don't have any good advice for you except to try it with the original headers. Note that these are just warnings so may be ignored. However, I leave this up to you.

Quote:

It seems to me that pgcc have problems with typedefs like this:
typedef unsigned long long int uint64_t;

Can you please give an example of the problem you see? The following toy program is able to handle this typedef without any issue.