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)
Change History (9)
comment:1 Changed 7 years ago by kencu (Ken)
comment:2 Changed 7 years ago by mf2k (Frank Schima)
Cc: | larryv added; jeremyhu removed |
---|---|
Owner: | set to jeremyhu |
Status: | new → assigned |
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.
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.
Changed 7 years ago by kencu (Ken)
Attachment: | clang_rt on PPC fails to configure -- CMakeError.log added |
---|
error log when cmake tries to test-compile ppc code during configuration
Changed 7 years ago by kencu (Ken)
Attachment: | proj-compilerrt-lib-builtins- alternate incomplete CMakeLists.txt added |
---|
alternate cmake build script for compiler_rt-lib-builtins that builds single-arch library
Changed 7 years ago by kencu (Ken)
Attachment: | error in clang-3.8 cmake configure added |
---|
error noted during configuration of clang-3.8
comment:6 Changed 6 years ago by kencu (Ken)
Resolution: | → wontfix |
---|---|
Status: | assigned → closed |
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>
To generate the libclang_rt.builtins library for ppc, go into the build directory:
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.