xref: /llvm-project/lldb/packages/Python/lldbsuite/test/builders/darwin.py (revision 17798ad7c3596d9b74b5f55ac41f10fe01e8ee4b)
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