1e5d08fcbSJonas Devlieghereimport re 2b40a3814SJonas Devlieghereimport os 3e5d08fcbSJonas Devlieghereimport subprocess 4e5d08fcbSJonas Devlieghere 5b623f3c0SJonas Devliegherefrom .builder import Builder 6e5d08fcbSJonas Devliegherefrom lldbsuite.test import configuration 7a3fc61c8SJonas Devlieghereimport lldbsuite.test.lldbutil as lldbutil 8e5d08fcbSJonas Devlieghere 9e5d08fcbSJonas DevlieghereREMOTE_PLATFORM_NAME_RE = re.compile(r"^remote-(.+)$") 10e5d08fcbSJonas DevlieghereSIMULATOR_PLATFORM_RE = re.compile(r"^(.+)-simulator$") 11e5d08fcbSJonas Devlieghere 12e5d08fcbSJonas Devlieghere 13e5d08fcbSJonas Devliegheredef get_os_env_from_platform(platform): 14e5d08fcbSJonas Devlieghere match = REMOTE_PLATFORM_NAME_RE.match(platform) 15e5d08fcbSJonas Devlieghere if match: 16e5d08fcbSJonas Devlieghere return match.group(1), "" 17e5d08fcbSJonas Devlieghere match = SIMULATOR_PLATFORM_RE.match(platform) 18e5d08fcbSJonas Devlieghere if match: 19e5d08fcbSJonas Devlieghere return match.group(1), "simulator" 20e5d08fcbSJonas Devlieghere return None, None 21e5d08fcbSJonas Devlieghere 22e5d08fcbSJonas Devlieghere 23e5d08fcbSJonas Devliegheredef get_os_from_sdk(sdk): 242238dcc3SJonas Devlieghere return sdk[: sdk.find(".")], "" 25b623f3c0SJonas Devlieghere 26b981924bSJonas Devlieghere 27b981924bSJonas Devliegheredef get_os_and_env(): 28b981924bSJonas Devlieghere if configuration.lldb_platform_name: 29b981924bSJonas Devlieghere return get_os_env_from_platform(configuration.lldb_platform_name) 30b981924bSJonas Devlieghere if configuration.apple_sdk: 31b981924bSJonas Devlieghere return get_os_from_sdk(configuration.apple_sdk) 32b981924bSJonas Devlieghere return None, None 33b981924bSJonas Devlieghere 34b981924bSJonas Devlieghere 35b981924bSJonas Devliegheredef get_triple(): 36b981924bSJonas Devlieghere # Construct the vendor component. 37b981924bSJonas Devlieghere vendor = "apple" 38b981924bSJonas Devlieghere 39b981924bSJonas Devlieghere # Construct the os component. 40b981924bSJonas Devlieghere os, env = get_os_and_env() 41b981924bSJonas Devlieghere if os is None or env is None: 42b981924bSJonas Devlieghere return None, None, None, None 43b981924bSJonas Devlieghere 44b981924bSJonas Devlieghere # Get the SDK from the os and env. 45b981924bSJonas Devlieghere sdk = lldbutil.get_xcode_sdk(os, env) 46b2545b71SJonas Devlieghere if sdk is None: 47b981924bSJonas Devlieghere return None, None, None, None 48b981924bSJonas Devlieghere 49b981924bSJonas Devlieghere # Get the version from the SDK. 50b981924bSJonas Devlieghere version = lldbutil.get_xcode_sdk_version(sdk) 51b2545b71SJonas Devlieghere if version is None: 52b981924bSJonas Devlieghere return None, None, None, None 53b981924bSJonas Devlieghere 54b981924bSJonas Devlieghere return vendor, os, version, env 55074c591aSJonas Devlieghere 56b623f3c0SJonas Devlieghere 572c350730SJonas Devliegheredef get_triple_str(arch, vendor, os, version, env): 582c350730SJonas Devlieghere if None in [arch, vendor, os, version, env]: 592c350730SJonas Devlieghere return None 602c350730SJonas Devlieghere 612c350730SJonas Devlieghere component = [arch, vendor, os + version] 622c350730SJonas Devlieghere if env: 632c350730SJonas Devlieghere components.append(env) 642238dcc3SJonas Devlieghere return "-".join(component) 652c350730SJonas Devlieghere 662c350730SJonas Devlieghere 67b623f3c0SJonas Devlieghereclass BuilderDarwin(Builder): 680f12cf7eSJonas Devlieghere def getTriple(self, arch): 690f12cf7eSJonas Devlieghere vendor, os, version, env = get_triple() 702c350730SJonas Devlieghere return get_triple_str(arch, vendor, os, version, env) 710f12cf7eSJonas Devlieghere 72074c591aSJonas Devlieghere def getExtraMakeArgs(self): 73074c591aSJonas Devlieghere """ 74074c591aSJonas Devlieghere Helper function to return extra argumentsfor the make system. This 75074c591aSJonas Devlieghere method is meant to be overridden by platform specific builders. 76074c591aSJonas Devlieghere """ 77074c591aSJonas Devlieghere args = dict() 78074c591aSJonas Devlieghere 79074c591aSJonas Devlieghere if configuration.dsymutil: 802238dcc3SJonas Devlieghere args["DSYMUTIL"] = configuration.dsymutil 81074c591aSJonas Devlieghere 822238dcc3SJonas Devlieghere if configuration.apple_sdk and "internal" in configuration.apple_sdk: 830a302f66SJonas Devlieghere sdk_root = lldbutil.get_xcode_sdk_root(configuration.apple_sdk) 840a302f66SJonas Devlieghere if sdk_root: 852238dcc3SJonas Devlieghere private_frameworks = os.path.join( 862238dcc3SJonas Devlieghere sdk_root, "System", "Library", "PrivateFrameworks" 872238dcc3SJonas Devlieghere ) 882238dcc3SJonas Devlieghere args["FRAMEWORK_INCLUDES"] = "-F{}".format(private_frameworks) 890a302f66SJonas Devlieghere 90dfc72439SRaphael Isemann operating_system, env = get_os_and_env() 91*17798ad7SDaniel Thornburgh 92b40a3814SJonas Devlieghere builder_dir = os.path.dirname(os.path.abspath(__file__)) 93b40a3814SJonas Devlieghere test_dir = os.path.dirname(builder_dir) 94*17798ad7SDaniel Thornburgh if not operating_system: 95*17798ad7SDaniel Thornburgh entitlements_file = "entitlements-macos.plist" 96*17798ad7SDaniel Thornburgh else: 97dfc72439SRaphael Isemann if env == "simulator": 982238dcc3SJonas Devlieghere entitlements_file = "entitlements-simulator.plist" 99dfc72439SRaphael Isemann else: 1002238dcc3SJonas Devlieghere entitlements_file = "entitlements.plist" 1012238dcc3SJonas Devlieghere entitlements = os.path.join(test_dir, "make", entitlements_file) 1022238dcc3SJonas Devlieghere args["CODESIGN"] = "codesign --entitlements {}".format(entitlements) 103e5d08fcbSJonas Devlieghere 104074c591aSJonas Devlieghere # Return extra args as a formatted string. 1052238dcc3SJonas Devlieghere return ["{}={}".format(key, value) for key, value in args.items()] 106e5d08fcbSJonas Devlieghere 1072955a27aSJonas Devlieghere def getArchCFlags(self, arch): 108e5d08fcbSJonas Devlieghere """Returns the ARCH_CFLAGS for the make system.""" 109b981924bSJonas Devlieghere # Get the triple components. 110b981924bSJonas Devlieghere vendor, os, version, env = get_triple() 1112c350730SJonas Devlieghere triple = get_triple_str(arch, vendor, os, version, env) 1122c350730SJonas Devlieghere if not triple: 113551d1188SPavel Labath return [] 114e5d08fcbSJonas Devlieghere 115e5d08fcbSJonas Devlieghere # Construct min version argument 116e5d08fcbSJonas Devlieghere version_min = "" 117e5d08fcbSJonas Devlieghere if env == "simulator": 118e5d08fcbSJonas Devlieghere version_min = "-m{}-simulator-version-min={}".format(os, version) 11909b95b9dSJonas Devlieghere else: 120e5d08fcbSJonas Devlieghere version_min = "-m{}-version-min={}".format(os, version) 121e5d08fcbSJonas Devlieghere 122551d1188SPavel Labath return ["ARCH_CFLAGS=-target {} {}".format(triple, version_min)] 123074c591aSJonas Devlieghere 1248bac18beSPavel Labath def _getDebugInfoArgs(self, debug_info): 1258bac18beSPavel Labath if debug_info == "dsym": 1268bac18beSPavel Labath return ["MAKE_DSYM=YES"] 1278bac18beSPavel Labath return super(BuilderDarwin, self)._getDebugInfoArgs(debug_info) 128