199451b44SJordan Rupprecht"""Test the lldb public C++ api when creating multiple targets simultaneously."""
299451b44SJordan Rupprecht
399451b44SJordan Rupprechtfrom __future__ import print_function
499451b44SJordan Rupprecht
599451b44SJordan Rupprecht
699451b44SJordan Rupprechtimport os
799451b44SJordan Rupprecht
899451b44SJordan Rupprechtimport lldb
999451b44SJordan Rupprechtfrom lldbsuite.test.decorators import *
1099451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import *
1199451b44SJordan Rupprechtfrom lldbsuite.test import lldbutil
1299451b44SJordan Rupprecht
1399451b44SJordan Rupprecht
1499451b44SJordan Rupprechtclass TestMultipleTargets(TestBase):
1599451b44SJordan Rupprecht    NO_DEBUG_INFO_TESTCASE = True
1699451b44SJordan Rupprecht
17c2123a82SMuhammad Omair Javaid    @skipIf(oslist=["linux"], archs=["arm", "aarch64"])
1899451b44SJordan Rupprecht    @skipIfNoSBHeaders
1999451b44SJordan Rupprecht    @skipIfHostIncompatibleWithRemote
2099451b44SJordan Rupprecht    @expectedFailureAll(
21*7daa9a9bSMuhammad Omair Javaid        oslist=["windows"], archs=["i[3-6]86", "x86_64"],
2299451b44SJordan Rupprecht        bugnumber="llvm.org/pr20282")
2399562332SMichał Górny    @expectedFlakeyNetBSD
2499451b44SJordan Rupprecht    def test_multiple_targets(self):
2599451b44SJordan Rupprecht        env = {self.dylibPath: self.getLLDBLibraryEnvVal()}
2699451b44SJordan Rupprecht
2799451b44SJordan Rupprecht        self.driver_exe = self.getBuildArtifact("multi-target")
2899451b44SJordan Rupprecht        self.buildDriver('main.cpp', self.driver_exe)
2999451b44SJordan Rupprecht        self.addTearDownHook(lambda: os.remove(self.driver_exe))
3099451b44SJordan Rupprecht        self.signBinary(self.driver_exe)
3199451b44SJordan Rupprecht
3299451b44SJordan Rupprecht# check_call will raise a CalledProcessError if multi-process-driver doesn't return
3399451b44SJordan Rupprecht# exit code 0 to indicate success.  We can let this exception go - the test harness
3499451b44SJordan Rupprecht# will recognize it as a test failure.
3599451b44SJordan Rupprecht
3699451b44SJordan Rupprecht        if self.TraceOn():
3799451b44SJordan Rupprecht            print("Running test %s" % self.driver_exe)
3899451b44SJordan Rupprecht            check_call([self.driver_exe, self.driver_exe], env=env)
3999451b44SJordan Rupprecht        else:
4099451b44SJordan Rupprecht            with open(os.devnull, 'w') as fnull:
4199451b44SJordan Rupprecht                check_call([self.driver_exe, self.driver_exe],
4299451b44SJordan Rupprecht                           env=env, stdout=fnull, stderr=fnull)
43