[prev in list] [next in list] [prev in thread] [next in thread] 

List:       macports-dev
Subject:    Re: Compiler variants in portfile
From:       Sean Farley <sean () macports ! org>
Date:       2014-04-18 18:39:14
Message-ID: m2r44ueb3h.fsf () macports ! org
[Download RAW message or body]


Sébastien Maret <sebastien.maret@icloud.com> writes:


[...]


> > > > > > > > You do know that as of Mavericks, trying to compile C++ code with \
> > > > > > > > anything other than clang is a fool's errand, right? 
> > > > > > > > https://trac.macports.org/wiki/FAQ#libcpp
> > > > > > > 
> > > > > > > No, I didn't know that.
> > > > > > > 
> > > > > > > > *Why* is it not possible to compile your software using CC=clang and \
> > > > > > > > FC=gfortran-mp-4.8?
> > > > > > > 
> > > > > > > I tried that but the compilation failed. I don't exactly why but I'll \
> > > > > > > have a closer look. 
> > > > > > 
> > > > > > Sorry for the late reply, but it took me a while to catch up. Ryan is
> > > > > > right, of course. You should really figure out why they aren't compiling
> > > > > > and try to fix those errors.
> > > > > 
> > > > > Thanks for your answer.
> > > > > 
> > > > > I found the problem: the link was done against libstdc++ instead if libc++. \
> > > > > I've fixed this and I've just posted a revised version of the port on the \
> > > > > tracker.

The real issue is that gildas has no sane configuration system. The
makefile tries to define the link line and requires the user to figure
out which c++ library to link to via 'ar' for static libraries. Usually,
libtool or the c++ compiler is used for linking.

> > > > Looking at the portfile, things seem mostly fine. A few comments (which
> > > > will hopefully help start documenting the compilers portgroup :-)
> > > > 
> > > > - compilers.choose is really meant to serve as a way to isolate a c-only
> > > > or fortran-only build; since you specify both, you don't need it
> > > 
> > > But isn't this needed to set both CC, FC and CPP ? 
> > 
> > No, if you leave compilers.choose blank, then it will set all the compilers.
> > 
> > > > - removing the clang variants only stops macport's clang compilers from
> > > > being used; this is fine but since you don't need c++ you could mix
> > > > clang with gfortran
> > > 
> > > Indeed I do need C++. And since a Fortran compiler is also needed, I would \
> > > prefer to compiling Fortran and C with compilers from the same compiler suite \
> > > (GCC) to avoid link problems. In addition the package requires CPP from GCC to \
> > > compile properly (it is used in a non-standard way to pre-process Fortran code, \
> > > and this does not work with Apple's CPP).
> > 
> > If you need C++, then you forgot to mention it in compilers.choose
> > (missing 'cxx').
> 
> If i put cxx in compilers.choose (or leave compilers.choose blank) and install the \
> +gcc48 variant the package, it uses g++-mp-4.8 to compile the C++ part of the code. \
> This is not what I want. I need the C++ code to be compiled with clang++ (as \
> advised by Ryan), and the rest with GCC4.8. Setting compilers.choose to  "cc cpp fc \
> » does this.

Ok, I see the confusion now. Ryan was pointing out that Mavericks only
ships with libc++ and that you can't mix libstdc++ with libc++ since
they aren't ABI compatible. This means care must be taken when doing the
linking, especially on systems pre-Mavericks.

> By the way: this compiling C++ with anything other than clang is not recommended, \
> shouldn't compilers 1.0 enforce that rule and set compiler.cxx to clang++ by \
> default?

Well, you can compile with g++ (I was able to get it to work), it's just
that you have to make sure to link to the correct library and not mix
libc++ with libstdc++. The upcoming MacPorts release will have a
configure.cxx_stdlib variable that should help.

> > Also, "non-standard way to pre-process Fortran code"
> > ... I didn't realize Fortran had a standard ;-P
> > 
> > > In fact I removed the clang variants because clang does not compile Fortran \
> > > (same for drgaonegg). Why are variants present when require_fortran is set ? 
> > 
> > But dragonegg does compiler Fortran? That's mostly why it existed.
> 
> I didn't know that. Yet clang does not compile Fortran, and it shows up in the \
> variants even when require_fortran is set. But I guess it is the port file \
> developer responsibility to blacklist compiler than can't compile his port.

Yes, clang is a C interface to LLVM. Dragonegg used gcc's parsers to
feed LLVM so that fortran (and other) languages could use LLVM. My
design of the compilers portgroup was to help providing a fortran
compiler in cases like clang. There is a lack of documentation, for
sure.
_______________________________________________
macports-dev mailing list
macports-dev@lists.macosforge.org
https://lists.macosforge.org/mailman/listinfo/macports-dev


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic