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