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)

I think this file work/llvm-4.0.0.src/projects/compiler-rt/cmake/Modules/CompilerRTDarwinUtils.cmake is missing most of the logic to support ppc and ppc64 archs, in the end. There are other functions in that file that don't have ppc support. It doesn't look like a lot to add, but it would take a little logic to work out.

I suppose it's kind of surprising then that the default build comes out with a ppc arch library that we can use at all.

I don't think it's easy to patch files _after_ the configure stage. Some reinplacing could be done post-configure instead, I suppose. I wish it was a bit easier to debug cmake build scripts.

If found this:

if(NOT DARWIN_osx_ARCHS)
    set(DARWIN_osx_ARCHS i386 x86_64 x86_64h)
  endif()

and it looks tempting to just -DDARWIN_osx_ARCHS="ppc". Will see if that fixes things.

Edit - sadly, no, that does not work. Same error occurs. At present, still have to fix the Makefile manually.

Version 3, edited 7 years ago by kencu (Ken) (previous) (next) (diff)

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

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), soit 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.

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

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.