[MacPorts] #59717: clang >= 3.4: Unable to build/bootstrap on Intel Tiger
MacPorts
noreply at macports.org
Sun Nov 17 20:08:48 UTC 2019
#59717: clang >= 3.4: Unable to build/bootstrap on Intel Tiger
-------------------------+-------------------------------------------------
Reporter: dgelessus | Owner: (none)
Type: defect | Status: new
Priority: Normal | Milestone:
Component: ports | Version:
Keywords: tiger i386 | Port: libcxx llvm-3.4 clang-3.4 llvm-3.7
| clang-3.7
-------------------------+-------------------------------------------------
It is currently not possible to build clang-3.4 or newer on Intel Tiger.
As a result, any ports that require C++11 cannot be built on Tiger,
because MacPorts selects a recent clang (currently 9.0) when looking for a
C++11-capable compiler.
This issue is somewhat complex because a lot of bootstrapping is involved,
and multiple ports in the bootstrap process don't work properly on Tiger.
The (simplified) bootstrap dependency chain looks like this:
* Xcode 2.5 gcc
* apple-gcc42
* clang-3.4
* icu
* libxml2
* libcxx
* clang-3.7
* newer clang (e. g. 9.0)
So far I've run into the following individual issues in the chain:
* clang-3.4 requires libxml2 to build, which requires icu. icu requries a
C++11 compiler, and MacPorts selects clang-3.4 here, which leads to a
circular dependency.
* The clang-3.4 Portfile already has a special case to handle this
issue, but it doesn't get triggered on Tiger, because the cxx_stdlib is
set to libstdcxx and not libcxx.
* I've submitted a fix for this as [https://github.com/macports
/macports-ports/pull/5771 PR 5771].
* llvm/clang-3.7 always wants libcxx as its C++ stdlib, but the libcxx
port doesn't support Tiger.
* In [https://github.com/macports/macports-ports/pull/5783 PR 5783] I've
attempted to make libcxx build on Tiger, but the PR is currently
incomplete and would also need more extensive testing.
* Perhaps an alternative fix would be to make clang use libstdcxx
instead of libcxx on Tiger. I haven't looked into this further yet, but
@kencu has [https://github.com/kencu/TigerPorts/tree/master/lang/llvm-3.8
a customized llvm/clang-3.8 port that uses libstdcxx], so it seems to be
possible.
* llvm-3.7's configure script tries to call clang-3.4 with the option
-stdlib=macports-libstdcxx, which that version of the clang port doesn't
support. This option is patched in by MacPorts for clang-5.0 and newer
with the +libstdcxx variant (which is enabled by default). clang ports
older than 5.0 (including 3.4) don't have a +libstdcxx variant.
* I'm currently experimenting with backporting the +libstdcxx variant
from clang-5.0 to clang-3.4. This seems to be fairly easy to do - the code
affected by the patch hasn't changed significantly between the two
versions.
* It may be better to figure out why the configure script tries to use
-stdlib=macports-libstdcxx in the first place. It shouldn't need to, since
llvm/clang-3.7 will be built agianst libcxx, not libstdcxx.
* llvm-3.7 references a couple of macros that don't exist on Tiger.
* This only requires some very minor patches, which I can submit once
I've tested them.
* There may be more issues after this; I'm currently working on getting
clang-3.7 fully built.
I've already discussed some of these issues separately on IRC and GitHub
(thanks to @jmroot and @kencu for the help so far!). This ticket is meant
to be an overview of how the issues are related, as the issues further
down the list usually can't be observed without first fixing/working
around the previous issues.
Also I'm not sure what the best solutions are for some of the issues, or
if it even makes sense to use clang (rather than gcc) as the C++11
compiler on Tiger. Any opinions and suggestions are welcome.
--
Ticket URL: <https://trac.macports.org/ticket/59717>
MacPorts <https://www.macports.org/>
Ports system for macOS
More information about the macports-tickets
mailing list