On 22/01/2019 3:44 pm, Ken Cunningham wrote:
So this "as" issue comes up with gcc / gfortran every so often, more lately 
with more attempts to use newer SIMD instruction sets that generate assembly that only 
newer clangs can assemble. There are scattered tickets here and there about it over the 
past few years.

One  partial but very practical solution might be to make cctools an "empty 
port" on systems with a new enough Xcode. After all, it offers no benefits I can see 
for those systems anyway. That would cover off all current systems, sending them to Xcode 
instead and is very simple to do with no variants needed, etc.

This is exactly what the xcode variant of cctools was designed to do. In fact, a while back before the relatively recent update to cctools, when it was based on a version of the tool kit older than that in Xcode 9 at that time, we made the xcode variant the default on this system, to avoid exactly the sort of issues here.

More recently, cctools was updated to a newer version of the Apple open sourced toolkit and at that time the cctools maintainer decided to switch the default variant for those systems back to actually building the toolkit, instead of just wrapping the Xcode tools.

These flips in the defaults are very far from ideal, as each time we do it we have issues with the fact default upgrades respect the previous variants, so if we want a given port to force the switch, specific code has to be added to the Port to do this. I in fact have a open PR to do just this, following the last update.

https://github.com/macports/macports-ports/pull/2980

In my opinion we need to give some thought to how to handle this better, as the current flip flopping between variants needs to be avoided. One thing is sure, its not impossible that the same situation will rise again and again, as newer Xcodes come along, that out date the cctools version, or as more and more code bases use more recent CPU features (like AVX2. AVX512 etc.).

cheers Chris


For older systems, we would ideally make "as" point to a specific clang (ie 
patch the source), and then ensure that clang is installed. That seems quite easy, too.

An immediate,  simple but manual workaround is to have the user "sudo port select" a current 
installed clang, like clang-7.0. Then "as" would hand off to "clang-7.0" and all modern 
instructions are available. Obviously not an ideal automatic solution, but a 10 second fix for a stuck user 
for right now.

Patching or configuring gcc to call a specific clang directly as an assembler 
seems to me to be quite complicated, but may appear simpler to some others. I 
looked at this before and balked.

K

On Jan 22, 2019, at 07:07, Nicolas Pavillon <[email protected]> wrote:


The MacPorts provided as, from cctools, is *supposed* to be the same as that 
provided by Xcode 10. Actually, one thing you have not said is what macOS 
version are you using ?

Sure, sorry. I did not think it would be important at the time.

- Mac OS 10.14.2
- Xcode 10.1

Chris

Cheers,
Nicolas
On Jan 22, 2019, at 11:23, Chris Jones <[email protected] 
<mailto:[email protected]>> wrote:

Hi,

Could you then please try either removing the cctools package, or reinstall it 
with the xcode variant. Either should result in the build using the xcode 
provided as instead.

Chris

On 21 Jan 2019, at 3:54 pm, Nicolas Pavillon <[email protected] 
<mailto:[email protected]>> wrote:

Hi,

I just tried that, and I think I have been using the current default:

NicolasMacBook:~ nicos$ port installed cctools
The following ports are currently installed:
  cctools @921_0+llvm70 (active)

The reason I have been mentioning how old as might be is that the one provided 
by cctools returns version 1.38, which quite behind compared to the version 
provided by binutils, for example.

/opt/local/bin/as -v
Apple Inc version cctools-921, GNU assembler version 1.38

Cheers,

Nicolas

On Jan 22, 2019, at 0:23, Chris Jones <[email protected] 
<mailto:[email protected]>> wrote:

Hi,

What exactly version (and variants) of cctools do you have installed ?

Perhaps try force removing it, then reinstall, to make sure you are using the 
current default variants.

Chris

On 21 Jan 2019, at 2:47 pm, Nicolas Pavillon <[email protected] 
<mailto:[email protected]>> wrote:

Hi,

I stumbled on some issues with the fortran compiler that I cannot really 
understand. They might be linked with other topics discussed recently about 
cctools, but it still seems somewhat different.

This happens with the port OpenBLAS, where the compilation fails when flags to 
compile AVX instructions yield errors during compilation, as described in the 
following tickets:
https://trac.macports.org/ticket/57912
https://github.com/xianyi/OpenBLAS/issues/1951

However, when I tried even more basic flags such as -march=native, compilation 
also fails with errors such as
/var/folders/x8/q7j02h4d661_p7cjh42_jh380000gn/T//ccqkNy6A.s:103:no such 
instruction: `vxorps %xmm0, %xmm0,%xmm0'

I then tried with another gfortran compiler outside of macports, and it could 
compile without any issue if I remove macports’ prefix from the path, which 
seems to indicate that the issue is coming from the assembler in macports.

My best guess is that as in cctools is too old, but I am not sure about that. 
Also, if it is correct, I wonder how this could be solved. Any ideas?

Cheers,

Nicolas


Reply via email to