darwin.py
3.81 KB
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
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 not sdk:
return None, None, None, None
# Get the version from the SDK.
version = lldbutil.get_xcode_sdk_version(sdk)
if not version:
return None, None, None, None
return vendor, os, version, env
class BuilderDarwin(Builder):
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
operating_system, _ = 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)
entitlements = os.path.join(test_dir, 'make', 'entitlements.plist')
args['CODESIGN'] = 'codesign --entitlements {}'.format(
entitlements)
# Return extra args as a formatted string.
return ' '.join(
{'{}="{}"'.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()
if not vendor or not os or not version or not env:
return ""
# Construct the triple from its components.
triple = '-'.join([arch, vendor, os, version, env])
# Construct min version argument
version_min = ""
if env == "simulator":
version_min = "-m{}-simulator-version-min={}".format(os, version)
elif os == "macosx":
version_min = "-m{}-version-min={}".format(os, version)
return "ARCH_CFLAGS=\"-target {} {}\"".format(triple, version_min)
def buildDsym(self,
sender=None,
architecture=None,
compiler=None,
dictionary=None,
testdir=None,
testname=None):
"""Build the binaries with dsym debug info."""
commands = []
commands.append(
self.getMake(testdir, testname) + [
"MAKE_DSYM=YES",
self.getArchCFlags(architecture),
self.getArchSpec(architecture),
self.getCCSpec(compiler),
self.getExtraMakeArgs(),
self.getSDKRootSpec(),
self.getModuleCacheSpec(), "all",
self.getCmdLine(dictionary)
])
self.runBuildCommands(commands, sender=sender)
# True signifies that we can handle building dsym.
return True