Skip to content
This repository was archived by the owner on Mar 28, 2020. It is now read-only.

Commit 5bbe5e0

Browse files
committed
Add support for the 'macCatalyst' MachO platform
Mac Catalyst is a new MachO platform in macOS Catalina. It always uses the build_version MachO load command. Differential Revision: https://reviews.llvm.org/D64107 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@364981 91177308-0d34-0410-b5e6-96231b3b80d8 (cherry picked from commit c4dc899)
1 parent d8ef372 commit 5bbe5e0

File tree

9 files changed

+83
-0
lines changed

9 files changed

+83
-0
lines changed

include/llvm/BinaryFormat/MachO.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -488,6 +488,7 @@ enum PlatformType {
488488
PLATFORM_TVOS = 3,
489489
PLATFORM_WATCHOS = 4,
490490
PLATFORM_BRIDGEOS = 5,
491+
PLATFORM_MACCATALYST = 6,
491492
PLATFORM_IOSSIMULATOR = 7,
492493
PLATFORM_TVOSSIMULATOR = 8,
493494
PLATFORM_WATCHOSSIMULATOR = 9

include/llvm/Object/MachO.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -616,6 +616,7 @@ class MachOObjectFile : public ObjectFile {
616616
case MachO::PLATFORM_TVOS: return "tvos";
617617
case MachO::PLATFORM_WATCHOS: return "watchos";
618618
case MachO::PLATFORM_BRIDGEOS: return "bridgeos";
619+
case MachO::PLATFORM_MACCATALYST: return "maccatalyst";
619620
case MachO::PLATFORM_IOSSIMULATOR: return "iossimulator";
620621
case MachO::PLATFORM_TVOSSIMULATOR: return "tvossimulator";
621622
case MachO::PLATFORM_WATCHOSSIMULATOR: return "watchossimulator";

lib/MC/MCAsmStreamer.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -546,6 +546,7 @@ static const char *getPlatformName(MachO::PlatformType Type) {
546546
case MachO::PLATFORM_TVOS: return "tvos";
547547
case MachO::PLATFORM_WATCHOS: return "watchos";
548548
case MachO::PLATFORM_BRIDGEOS: return "bridgeos";
549+
case MachO::PLATFORM_MACCATALYST: return "maccatalyst";
549550
case MachO::PLATFORM_IOSSIMULATOR: return "iossimulator";
550551
case MachO::PLATFORM_TVOSSIMULATOR: return "tvossimulator";
551552
case MachO::PLATFORM_WATCHOSSIMULATOR: return "watchossimulator";

lib/MC/MCParser/DarwinAsmParser.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1149,6 +1149,7 @@ static Triple::OSType getOSTypeFromPlatform(MachO::PlatformType Type) {
11491149
case MachO::PLATFORM_TVOS: return Triple::TvOS;
11501150
case MachO::PLATFORM_WATCHOS: return Triple::WatchOS;
11511151
case MachO::PLATFORM_BRIDGEOS: /* silence warning */ break;
1152+
case MachO::PLATFORM_MACCATALYST: return Triple::IOS;
11521153
case MachO::PLATFORM_IOSSIMULATOR: /* silence warning */ break;
11531154
case MachO::PLATFORM_TVOSSIMULATOR: /* silence warning */ break;
11541155
case MachO::PLATFORM_WATCHOSSIMULATOR: /* silence warning */ break;
@@ -1169,6 +1170,7 @@ bool DarwinAsmParser::parseBuildVersion(StringRef Directive, SMLoc Loc) {
11691170
.Case("ios", MachO::PLATFORM_IOS)
11701171
.Case("tvos", MachO::PLATFORM_TVOS)
11711172
.Case("watchos", MachO::PLATFORM_WATCHOS)
1173+
.Case("maccatalyst", MachO::PLATFORM_MACCATALYST)
11721174
.Default(0);
11731175
if (Platform == 0)
11741176
return Error(PlatformLoc, "unknown platform name");

lib/MC/MCStreamer.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1074,6 +1074,15 @@ void MCStreamer::EmitVersionForTarget(const Triple &Target,
10741074
unsigned Major;
10751075
unsigned Minor;
10761076
unsigned Update;
1077+
if (Target.isMacCatalystEnvironment()) {
1078+
// Mac Catalyst always uses the build version load command.
1079+
Target.getiOSVersion(Major, Minor, Update);
1080+
assert(Major && "A non-zero major version is expected");
1081+
EmitBuildVersion(MachO::PLATFORM_MACCATALYST, Major, Minor, Update,
1082+
SDKVersion);
1083+
return;
1084+
}
1085+
10771086
MCVersionMinType VersionType;
10781087
if (Target.isWatchOS()) {
10791088
VersionType = MCVM_WatchOSVersionMin;

test/CodeGen/X86/macCatalyst.ll

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
; RUN: llc %s -o - | FileCheck %s
2+
target triple="x86_64-apple-ios13.0-maccatalyst"
3+
; CHECK: .build_version maccatalyst, 13, 0
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
// RUN: llvm-mc -triple x86_64-apple-ios %s | FileCheck %s
2+
3+
.build_version maccatalyst,13,0
4+
// CHECK: .build_version maccatalyst, 13, 0

test/MC/MachO/darwin-version-min-load-command.s

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// RUN: llvm-mc -triple x86_64-apple-macosx10.10.0 %s -filetype=obj -o - | llvm-objdump -macho -private-headers - | FileCheck %s
22
// RUN: llvm-mc -triple x86_64-apple-ios8.0.0 %s -filetype=obj -o - | llvm-objdump -macho -private-headers - | FileCheck %s --check-prefix=CHECK-IOS
33
// RUN: llvm-mc -triple x86_64-apple-darwin %s -filetype=obj -o - | llvm-objdump -macho -private-headers - | FileCheck %s --check-prefix=CHECK-DARWIN
4+
// RUN: llvm-mc -triple x86_64-apple-ios13.0-maccatalyst %s -filetype=obj -o - | llvm-objdump -macho -private-headers - | FileCheck %s --check-prefix=CHECK-MACCATALYST
45

56
// Test version-min load command should be inferred from triple and should always be generated on Darwin
67
// CHECK: Load command
@@ -33,3 +34,10 @@
3334
// CHECK-BRIDGEOS-NEXT: sdk n/a
3435
// CHECK-BRIDGEOS-NEXT: minos 2.0
3536
// CHECK-BRIDGEOS-NEXT: ntools 0
37+
38+
// CHECK-MACCATALYST: cmd LC_BUILD_VERSION
39+
// CHECK-MACCATALYST-NEXT: cmdsize 24
40+
// CHECK-MACCATALYST-NEXT: platform maccatalyst
41+
// CHECK-MACCATALYST-NEXT: sdk n/a
42+
// CHECK-MACCATALYST-NEXT: minos 13.0
43+
// CHECK-MACCATALYST-NEXT: ntools 0
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
# RUN: yaml2obj %s | llvm-objdump -macho -private-headers - | FileCheck %s
2+
3+
--- !mach-o
4+
FileHeader:
5+
magic: 0xFEEDFACF
6+
cputype: 0x01000007
7+
cpusubtype: 0x00000003
8+
filetype: 0x00000004
9+
ncmds: 2
10+
sizeofcmds: 192
11+
flags: 0x00000000
12+
reserved: 0
13+
LoadCommands:
14+
- cmd: LC_SEGMENT_64
15+
cmdsize: 152
16+
segname: __TEXT
17+
vmaddr: 4294967296
18+
vmsize: 8192
19+
fileoff: 0
20+
filesize: 3099
21+
maxprot: 7
22+
initprot: 5
23+
nsects: 1
24+
flags: 0
25+
Sections:
26+
- sectname: __text
27+
segname: __TEXT
28+
addr: 0x0000000100001160
29+
size: 3099
30+
offset: 0x00001160
31+
align: 4
32+
reloff: 0x00000000
33+
nreloc: 0
34+
flags: 0x80000400
35+
reserved1: 0x00000000
36+
reserved2: 0x00000000
37+
reserved3: 0x00000000
38+
- cmd: LC_BUILD_VERSION
39+
cmdsize: 32
40+
platform: 6
41+
minos: 0x000D0000
42+
sdk: 0x00090000
43+
ntools: 1
44+
Tools:
45+
- tool: 1
46+
version: 0x00000000
47+
...
48+
49+
CHECK: Load command 1
50+
CHECK-NEXT: cmd LC_BUILD_VERSION
51+
CHECK-NEXT: cmdsize 32
52+
CHECK-NEXT: platform maccatalyst
53+
CHECK-NEXT: sdk 9.0
54+
CHECK-NEXT: minos 13.0

0 commit comments

Comments
 (0)