Helper function to return extra argumentsfor the make system. This
method is meant to be overridden by platform specific builders.
"""
+
+ def getArchCFlags(self, architecture):
+ """Returns the ARCH_CFLAGS for the make system."""
return ""
def getMake(self, test_subdir, test_name):
commands.append(
self.getMake(testdir, testname) + [
"all",
+ self.getArchCFlags(architecture),
self.getArchSpec(architecture),
self.getCCSpec(compiler),
self.getExtraMakeArgs(),
commands.append(
self.getMake(testdir, testname) + [
"MAKE_DSYM=NO",
+ self.getArchCFlags(architecture),
self.getArchSpec(architecture),
self.getCCSpec(compiler),
self.getExtraMakeArgs(),
commands.append(
self.getMake(testdir, testname) + [
"MAKE_DSYM=NO", "MAKE_DWO=YES",
+ self.getArchCFlags(architecture),
self.getArchSpec(architecture),
self.getCCSpec(compiler),
self.getExtraMakeArgs(),
commands.append(
self.getMake(testdir, testname) + [
"MAKE_DSYM=NO", "MAKE_GMODULES=YES",
+ self.getArchCFlags(architecture),
self.getArchSpec(architecture),
self.getCCSpec(compiler),
self.getExtraMakeArgs(),
+import re
+import subprocess
+
from .builder import Builder
+from lldbsuite.test import configuration
+
+REMOTE_PLATFORM_NAME_RE = re.compile(r"^remote-(.+)$")
+SIMULATOR_PLATFORM_RE = re.compile(r"^(.+)-simulator$")
+
+
+def get_sdk(os, env):
+ if os == "ios":
+ if env == "simulator":
+ return "iphonesimulator"
+ if env == "macabi":
+ return "macosx"
+ return "iphoneos"
+ elif os == "tvos":
+ if env == "simulator":
+ return "appletvsimulator"
+ return "appletvos"
+ elif os == "watchos":
+ if env == "simulator":
+ return "watchsimulator"
+ return "watchos"
+ return os
+
+
+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('.')], ""
from lldbsuite.test import configuration
if configuration.dsymutil:
args['DSYMUTIL'] = configuration.dsymutil
+ os, _ = self.getOsAndEnv()
+ if os and os != "macosx":
+ args['CODESIGN'] = 'codesign'
+
# Return extra args as a formatted string.
return ' '.join(
{'{}="{}"'.format(key, value)
for key, value in args.items()})
+ def getOsAndEnv(self):
+ if configuration.lldb_platform_name:
+ return get_os_env_from_platform(configuration.lldb_platform_name)
+ elif configuration.apple_sdk:
+ return get_os_from_sdk(configuration.apple_sdk)
+ return None, None
+
+ def getArchCFlags(self, architecture):
+ """Returns the ARCH_CFLAGS for the make system."""
+
+ # Construct the arch component.
+ arch = architecture if architecture else configuration.arch
+ if not arch:
+ arch = subprocess.check_output(['machine'
+ ]).rstrip().decode('utf-8')
+ if not arch:
+ return ""
+
+ # Construct the vendor component.
+ vendor = "apple"
+
+ # Construct the os component.
+ os, env = self.getOsAndEnv()
+ if os is None or env is None:
+ return ""
+
+ # Get the SDK from the os and env.
+ sdk = get_sdk(os, env)
+ if not sdk:
+ return ""
+
+ version = subprocess.check_output(
+ ["xcrun", "--sdk", sdk,
+ "--show-sdk-version"]).rstrip().decode('utf-8')
+ if not version:
+ return ""
+
+ # Construct the triple from its components.
+ triple = "{}-{}-{}-{}".format(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,
commands.append(
self.getMake(testdir, testname) + [
"MAKE_DSYM=YES",
+ self.getArchCFlags(architecture),
self.getArchSpec(architecture),
self.getCCSpec(compiler),
self.getExtraMakeArgs(),
return ver
-def setDefaultTripleForPlatform():
- if configuration.lldb_platform_name == 'ios-simulator':
- triple_str = 'x86_64-apple-ios%s' % (
- getVersionForSDK('iphonesimulator'))
- os.environ['TRIPLE'] = triple_str
- return {'TRIPLE': triple_str}
- return {}
-
-
def checkCompiler():
# Add some intervention here to sanity check that the compiler requested is sane.
# If found not to be an executable program, we abort.
else:
configuration.lldb_platform_url = None
- platform_changes = setDefaultTripleForPlatform()
- first = True
- for key in platform_changes:
- if first:
- print("Environment variables setup for platform support:")
- first = False
- print("%s = %s" % (key, platform_changes[key]))
-
if configuration.lldb_platform_working_dir:
print("Setting remote platform working directory to '%s'..." %
(configuration.lldb_platform_working_dir))
# from the triple alone
#----------------------------------------------------------------------
ARCH_CFLAGS :=
-ifneq "$(TRIPLE)" ""
- triple_space = $(subst -, ,$(TRIPLE))
- ARCH =$(word 1, $(triple_space))
- TRIPLE_VENDOR =$(word 2, $(triple_space))
- triple_os_and_version =$(shell echo $(word 3, $(triple_space)) | sed 's/\([a-z]*\)\(.*\)/\1 \2/')
- TRIPLE_OS =$(word 1, $(triple_os_and_version))
- TRIPLE_VERSION =$(word 2, $(triple_os_and_version))
- TRIPLE_ENV =$(word 4, $(triple_space))
- ifeq "$(TRIPLE_VENDOR)" "apple"
- ifeq "$(TRIPLE_OS)" "ios"
- ifeq "$(TRIPLE_ENV)" "simulator"
- SDK_NAME := iphonesimulator
- else
- ifeq "$(TRIPLE_ENV)" "macabi"
- SDK_NAME := macosx
- else
- SDK_NAME := iphoneos
- endif
- endif
- endif
- ifeq "$(TRIPLE_OS)" "tvos"
- ifeq "$(TRIPLE_ENV)" "simulator"
- SDK_NAME := appletvsimulator
- else
- SDK_NAME := appletvos
- endif
- endif
- ifeq "$(TRIPLE_OS)" "watchos"
- ifeq "$(TRIPLE_ENV)" "simulator"
- SDK_NAME := watchsimulator
- else
- SDK_NAME := watchos
- endif
- endif
- ifneq "$(TRIPLE_OS)" "macosx"
- ifeq "$(TRIPLE_ENV)" ""
- CODESIGN := codesign
- endif
- endif
-
- ifeq "$(SDKROOT)" ""
- SDKROOT := $(shell xcrun --sdk $(SDK_NAME) --show-sdk-path)
- endif
- ifeq "$(TRIPLE_VERSION)" ""
- ifeq "$(SDK_NAME)" ""
- $(error "SDK_NAME is empty")
- endif
- TRIPLE_VERSION := $(shell xcrun --sdk $(SDK_NAME) --show-sdk-version)
- endif
- ifeq "$(TRIPLE_ENV)" "simulator"
- ARCH_CFLAGS := -m$(TRIPLE_OS)-simulator-version-min=$(TRIPLE_VERSION)
- else
- ifneq "$(TRIPLE_OS)" "macosx"
- ARCH_CFLAGS := -m$(TRIPLE_OS)-version-min=$(TRIPLE_VERSION)
- endif
- endif
- endif
- ARCH_CFLAGS += -target $(TRIPLE)
-endif
ifeq "$(OS)" "Android"
include $(THIS_FILE_DIR)/Android.rules
endif