forked from llvm/llvm-project
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathdarwin.py
127 lines (99 loc) · 4.06 KB
/
darwin.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
import re
import os
import subprocess
from .builder import Builder
from lldbsuite.test import configuration
import lldbsuite.test.lldbutil as lldbutil
REMOTE_PLATFORM_NAME_RE = re.compile(r"^remote-(.+)$")
SIMULATOR_PLATFORM_RE = re.compile(r"^(.+)-simulator$")
def get_os_env_from_platform(platform):
match = REMOTE_PLATFORM_NAME_RE.match(platform)
if match:
return match.group(1), ""
match = SIMULATOR_PLATFORM_RE.match(platform)
if match:
return match.group(1), "simulator"
return None, None
def get_os_from_sdk(sdk):
return sdk[:sdk.find('.')], ""
def get_os_and_env():
if configuration.lldb_platform_name:
return get_os_env_from_platform(configuration.lldb_platform_name)
if configuration.apple_sdk:
return get_os_from_sdk(configuration.apple_sdk)
return None, None
def get_triple():
# Construct the vendor component.
vendor = "apple"
# Construct the os component.
os, env = get_os_and_env()
if os is None or env is None:
return None, None, None, None
# Get the SDK from the os and env.
sdk = lldbutil.get_xcode_sdk(os, env)
if sdk is None:
return None, None, None, None
# Get the version from the SDK.
version = lldbutil.get_xcode_sdk_version(sdk)
if version is None:
return None, None, None, None
return vendor, os, version, env
def get_triple_str(arch, vendor, os, version, env):
if None in [arch, vendor, os, version, env]:
return None
component = [arch, vendor, os + version]
if env:
components.append(env)
return '-'.join(component)
class BuilderDarwin(Builder):
def getTriple(self, arch):
vendor, os, version, env = get_triple()
return get_triple_str(arch, vendor, os, version, env)
def getExtraMakeArgs(self):
"""
Helper function to return extra argumentsfor the make system. This
method is meant to be overridden by platform specific builders.
"""
args = dict()
if configuration.dsymutil:
args['DSYMUTIL'] = configuration.dsymutil
if configuration.apple_sdk and 'internal' in configuration.apple_sdk:
sdk_root = lldbutil.get_xcode_sdk_root(configuration.apple_sdk)
if sdk_root:
private_frameworks = os.path.join(sdk_root, 'System',
'Library',
'PrivateFrameworks')
args['FRAMEWORK_INCLUDES'] = '-F{}'.format(private_frameworks)
operating_system, env = get_os_and_env()
if operating_system and operating_system != "macosx":
builder_dir = os.path.dirname(os.path.abspath(__file__))
test_dir = os.path.dirname(builder_dir)
if env == "simulator":
entitlements_file = 'entitlements-simulator.plist'
else:
entitlements_file = 'entitlements.plist'
entitlements = os.path.join(test_dir, 'make', entitlements_file)
args['CODESIGN'] = 'codesign --entitlements {}'.format(
entitlements)
else:
args['CODESIGN'] = 'codesign'
# Return extra args as a formatted string.
return ['{}={}'.format(key, value) for key, value in args.items()]
def getArchCFlags(self, arch):
"""Returns the ARCH_CFLAGS for the make system."""
# Get the triple components.
vendor, os, version, env = get_triple()
triple = get_triple_str(arch, vendor, os, version, env)
if not triple:
return []
# Construct min version argument
version_min = ""
if env == "simulator":
version_min = "-m{}-simulator-version-min={}".format(os, version)
else:
version_min = "-m{}-version-min={}".format(os, version)
return ["ARCH_CFLAGS=-target {} {}".format(triple, version_min)]
def _getDebugInfoArgs(self, debug_info):
if debug_info == "dsym":
return ["MAKE_DSYM=YES"]
return super(BuilderDarwin, self)._getDebugInfoArgs(debug_info)