Opened 7 years ago

Closed 6 years ago

#54242 closed defect (wontfix)

clang-3.8 build fails on 10.5 PPC due to fatal error: lipo: specifed architecture in libclang_rt.10.4.a does not match its cputype -- and workaround that allows build to succeed

Reported by: kencu (Ken) Owned by: jeremyhu (Jeremy Huddleston Sequoia)
Priority: Normal Milestone:
Component: ports Version:
Keywords: powerpc Cc: larryv (Lawrence Velázquez)
Port: clang-3.8

Description

During the build of clang-3.8 on 10.5 PPC, the following error is noted:

[ 14%] Generating ../../../../lib/clang/3.8.1/lib/darwin/libclang_rt.10.4.a
cd /opt/local/var/macports/build/_opt_LeopardPorts_lang_llvm-3.8/clang-3.8/work/build/projects/compiler-rt/lib/builtins && /opt/local/bin/cmake -E make_directory /opt/local/var/macports/build/_opt_LeopardPorts_lang_llvm-3.8/clang-3.8/work/build/./lib/clang/3.8.1/lib/darwin
cd /opt/local/var/macports/build/_opt_LeopardPorts_lang_llvm-3.8/clang-3.8/work/build/projects/compiler-rt/lib/builtins && lipo -output /opt/local/var/macports/build/_opt_LeopardPorts_lang_llvm-3.8/clang-3.8/work/build/./lib/clang/3.8.1/lib/darwin/libclang_rt.10.4.a -create -arch i386 /opt/local/var/macports/build/_opt_LeopardPorts_lang_llvm-3.8/clang-3.8/work/build/lib/libclang_rt.builtins_i386_10.4.a -arch x86_64 /opt/local/var/macports/build/_opt_LeopardPorts_lang_llvm-3.8/clang-3.8/work/build/lib/libclang_rt.builtins_x86_64_10.4.a
fatal error: lipo: specifed architecture type (i386) for file (/opt/local/var/macports/build/_opt_LeopardPorts_lang_llvm-3.8/clang-3.8/work/build/lib/libclang_rt.builtins_i386_10.4.a) does not match its cputype (18) and cpusubtype (0) (should be cputype (7) and cpusubtype (3))

This appears to be due to an error in the cmake build script for this library. See below for more analysis and a workaround that allows the build to succeed.

Attachments (3)

clang_rt on PPC fails to configure -- CMakeError.log (73.1 KB) - added by kencu (Ken) 7 years ago.
error log when cmake tries to test-compile ppc code during configuration
proj-compilerrt-lib-builtins- alternate incomplete CMakeLists.txt (2.5 KB) - added by kencu (Ken) 7 years ago.
alternate cmake build script for compiler_rt-lib-builtins that builds single-arch library
error in clang-3.8 cmake configure (959 bytes) - added by kencu (Ken) 7 years ago.
error noted during configuration of clang-3.8

Download all attachments as: .zip

Change History (9)

comment:1 Changed 7 years ago by kencu (Ken)

To generate the libclang_rt.builtins library for ppc, go into the build directory:

cd /opt/local/var/macports/build/_opt_LeopardPorts_lang_llvm-3.8/clang-3.8/work/build/projects/compiler-rt/lib/builtins

and manually make the file. Note that the name of the file suggests it's i386 code, but this is not right -- it's ppc code.

lipo -output /opt/local/var/macports/build/_opt_LeopardPorts_lang_llvm-3.8/clang-3.8/work/build/./lib/clang/3.8.1/lib/darwin/libclang_rt.10.4.a -create -arch ppc /opt/local/var/macports/build/_opt_LeopardPorts_lang_llvm-3.8/clang-3.8/work/build/lib/libclang_rt.builtins_i386_10.4.a
Last edited 7 years ago by kencu (Ken) (previous) (diff)

comment:2 Changed 7 years ago by mf2k (Frank Schima)

Cc: larryv added; jeremyhu removed
Owner: set to jeremyhu
Status: newassigned

comment:3 Changed 7 years ago by kencu (Ken)

The cmake logic in this file appears to contain the relevant code:

work/llvm-3.8.1.src/projects/compiler-rt/cmake/config-ix.cmake

It's quite a complex process for building a multi-arch runtime, and would not be trivial to fix. Far easier would be to just rewrite a new cmake script and use it for ppc to build the library.

Last edited 7 years ago by kencu (Ken) (previous) (diff)

comment:4 Changed 7 years ago by kencu (Ken)

-- this comment deleted as no longer helpful --

Last edited 7 years ago by kencu (Ken) (previous) (diff)

comment:5 Changed 7 years ago by kencu (Ken)

I've been working further on this as time allows. The cmake script that manages the building of libclang_rt.10.4.a looks at the supported arches to test

-- OSX 10.4 supported arches: i386;x86_64;ppc;ppc64

and then tries to run a test-compile with each using the build system. This build of clang-3.8 on 10.5 PPC is bootstrapping with gcc6 (no other choice). So with this gcc6 macports configuration, all the x86 code fails to build, and the system tries to build the ppc and ppc64 code. But all these test compiles fail to build as well for some reason (Cmake error log attached), so I guess it defaults to i386 and x86_64. And herein comes the "lucky" quirk - when gcc6 on ppc gets asked to build -arch i386, it says it can't and then builds it -arch ppc instead. So that is how we wind up getting code out.

The supplied object files that make libclang_rt.10.4.a are close to correct, but they don't actually include the proper ppc ASM code from the ppc folder -- the system builds the i386 folder instead, as it is confused.

With that, it's perhaps surprising that in the end, this produces a build system that passes 487/500 tests in the test-suite. (10 of those the broken exceptions on ppc).

To fix this issue, the easiest thing to do would be to skip the tricky and multi-arch cmake build tricks used in compiler_rt and just write up a cmake build file by hand. This turned out to be trivial (attached), but I need to make sure I have all the proper objects included and none of the not-needed ones, and this is not so trivial. Any help there appreciated.

Alternatively, it is likely possible to see why all the gcc ppc cmake build tests are failing, and fix that. No doubt this is the proper thing to do, and wish that I could do that.

Finally, it might be possible to build clang_rt as a separate project using the makefiles as per the old days -- it is designed to do that as a separate build I see.

Pretty close. clang-3.8 on PPC is working surprisingly well to build software that can't be built any other way, in the end.

Version 0, edited 7 years ago by kencu (Ken) (next)

Changed 7 years ago by kencu (Ken)

error log when cmake tries to test-compile ppc code during configuration

Changed 7 years ago by kencu (Ken)

alternate cmake build script for compiler_rt-lib-builtins that builds single-arch library

Changed 7 years ago by kencu (Ken)

error noted during configuration of clang-3.8

comment:6 Changed 6 years ago by kencu (Ken)

Resolution: wontfix
Status: assignedclosed

closing this off, as it's not a fixable MacPorts item. For those interested, progress on clang-3.8+ on PPC is tracked here <https://trac.macports.org/ticket/53184>

Note: See TracTickets for help on using tickets.