mirror of
https://github.com/llvm/llvm-project.git
synced 2025-05-14 10:26:07 +00:00

Explicitly compare to None when checking the triple's components so we don't bail out when one of them is the empty string.
129 lines
4.0 KiB
Python
129 lines
4.0 KiB
Python
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
|
|
|
|
|
|
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, 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)
|
|
|
|
# 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 vendor is None or os is None or version is None or env is None:
|
|
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
|