Mach-O archives seems to be able to contain both IR objects and native objects mixed together. Apple tooling seems to deal with them correctly. The current implementation was adding an additional restriction of all the objects in the archive being either IR objects or native objects. The changes in this commit remove that restriction and allow mixing both IR and native objects, while still checking that the CPU restrictions still apply (all objects in a slice need to be the same CPU type/subtype). A test that was testing for the previous behaviour had been modified to test that mixed archives are allowed and that they create the expected results. Additionally, locally I checked the results of Apple's `libtool` against `llvm-libtool-darwin` with this code, and the resulting libraries are almost identical with expected differences in the GUID and code signatures load commands, and some minor differences in the rest of the binary.
55 lines
3.3 KiB
Plaintext
55 lines
3.3 KiB
Plaintext
# RUN: yaml2obj %p/Inputs/i386-slice.yaml -o %t-i386.o
|
|
# RUN: yaml2obj %p/Inputs/x86_64-slice.yaml -o %t-x86_64.o
|
|
# RUN: yaml2obj %p/Inputs/i386-x86_64-universal.yaml -o %t-universal.o
|
|
# RUN: llvm-as %p/Inputs/armv7-ios.ll -o %t-ir-armv7.o
|
|
# RUN: llvm-as %p/Inputs/x64-osx.ll -o %t-ir-x86_64.o
|
|
|
|
# RUN: llvm-ar cr %t.empty.a
|
|
# RUN: not llvm-lipo %t.empty.a -create -output /dev/null 2>&1 | FileCheck --check-prefix=EMPTY-ARCHIVE %s
|
|
|
|
# RUN: llvm-ar cr %t.different_architectures.a %t-i386.o %t-x86_64.o
|
|
# RUN: not llvm-lipo %t.different_architectures.a -create -output /dev/null 2>&1 | FileCheck --check-prefix=ARCHIVE-WITH-DIFFERENT-ARCHS %s
|
|
|
|
# RUN: llvm-ar cr %t.contains_fat_binary.a %t-universal.o
|
|
# RUN: not llvm-lipo %t.contains_fat_binary.a -create -output /dev/null 2>&1 | FileCheck --check-prefix=ARCHIVE-WITH-FAT-BINARY %s
|
|
|
|
# RUN: llvm-ar cr %t-i386-lib.a %t-i386.o
|
|
# RUN: llvm-lipo %t-i386-lib.a %t-x86_64.o -create -output %t-i386-x86_64-universal.o
|
|
# RUN: llvm-lipo %t-i386-x86_64-universal.o -info | FileCheck --check-prefix=INFO-i386-x86_64 %s
|
|
# RUN: llvm-lipo %t-i386-x86_64-universal.o -thin i386 -output %t-extracted-i386-lib.a
|
|
# RUN: cmp %t-extracted-i386-lib.a %t-i386-lib.a
|
|
# RUN: llvm-lipo %t-i386-x86_64-universal.o -thin x86_64 -output %t-extracted-x86_64.o
|
|
# RUN: cmp %t-extracted-x86_64.o %t-x86_64.o
|
|
|
|
# RUN: llvm-ar cr %t-ir-armv7-lib.a %t-ir-armv7.o
|
|
# RUN: llvm-lipo %t-ir-armv7-lib.a %t-ir-x86_64.o -create -output %t-ir-armv7-x86_64-universal.o
|
|
# RUN: llvm-lipo %t-ir-armv7-x86_64-universal.o -thin armv7 -output %t-ir-extracted-armv7-lib.a
|
|
# RUN: cmp %t-ir-extracted-armv7-lib.a %t-ir-armv7-lib.a
|
|
# RUN: llvm-lipo %t-ir-armv7-x86_64-universal.o -thin x86_64 -output %t-ir-extracted-x86_64.o
|
|
# RUN: cmp %t-ir-extracted-x86_64.o %t-ir-x86_64.o
|
|
|
|
# RUN: llvm-ar cr %t.different_types0-i386.a %t-i386.o
|
|
# RUN: llvm-ar cr %t.different_types0-x86_64.a %t-x86_64.o %t-ir-x86_64.o
|
|
# RUN: llvm-lipo -create %t.different_types0-i386.a %t.different_types0-x86_64.a -output %t.different_types0-universal.a
|
|
# RUN: llvm-lipo %t.different_types0-universal.a -thin i386 -output %t.different_types0-extracted-i386.a
|
|
# RUN: llvm-lipo %t.different_types0-universal.a -thin x86_64 -output %t.different_types0-extracted-x86_64.a
|
|
# RUN: cmp %t.different_types0-extracted-i386.a %t.different_types0-i386.a
|
|
# RUN: cmp %t.different_types0-extracted-x86_64.a %t.different_types0-x86_64.a
|
|
|
|
# RUN: llvm-ar cr %t.different_types1-i386.a %t-i386.o
|
|
# RUN: llvm-ar cr %t.different_types1-x86_64.a %t-ir-x86_64.o %t-x86_64.o
|
|
# RUN: llvm-lipo -create %t.different_types1-x86_64.a %t.different_types1-i386.a -output %t.different_types1-universal.a
|
|
# RUN: llvm-lipo %t.different_types1-universal.a -thin i386 -output %t.different_types1-extracted-i386.a
|
|
# RUN: llvm-lipo %t.different_types1-universal.a -thin x86_64 -output %t.different_types1-extracted-x86_64.a
|
|
# RUN: cmp %t.different_types1-extracted-i386.a %t.different_types1-i386.a
|
|
# RUN: cmp %t.different_types1-extracted-x86_64.a %t.different_types1-x86_64.a
|
|
|
|
# RUN: llvm-ar cr %t.different_architectures_ir.a %t-ir-x86_64.o %t-ir-armv7.o
|
|
# RUN: not llvm-lipo -create %t.different_architectures_ir.a -output /dev/null 2>&1 | FileCheck --check-prefix=ARCHIVE-WITH-DIFFERENT-ARCHS %s
|
|
|
|
# EMPTY-ARCHIVE: empty archive
|
|
# ARCHIVE-WITH-DIFFERENT-ARCHS: all members must match
|
|
# ARCHIVE-WITH-FAT-BINARY: fat file (not allowed in an archive)
|
|
#
|
|
# INFO-i386-x86_64: i386 x86_64
|