import contextlib
import os
from os.path import exists
import lldb
from lldbsuite.test.decorators import *
from lldbsuite.test.lldbtest import *
from lldbsuite.test import lldbutil


def haswell():
    features = subprocess.check_output(["sysctl", "machdep.cpu"])
    return "AVX2" in features.decode("utf-8")


def apple_silicon():
    features = subprocess.check_output(["sysctl", "machdep.cpu"])
    return "Apple M" in features.decode("utf-8")


def rosetta_debugserver_installed():
    return exists("/Library/Apple/usr/libexec/oah/debugserver")


class TestLaunchProcessPosixSpawn(TestBase):
    NO_DEBUG_INFO_TESTCASE = True

    def no_haswell(self):
        if not haswell():
            return "Current CPU is not Haswell"
        return None

    def no_apple_silicon(self):
        if not apple_silicon():
            return "Current CPU is not Apple Silicon"
        return None

    def run_arch(self, exe, arch):
        self.runCmd("target create -arch {} {}".format(arch, exe))
        self.runCmd("run")

        process = self.dbg.GetSelectedTarget().process
        self.assertState(process.GetState(), lldb.eStateExited)
        self.assertIn("slice: {}".format(arch), process.GetSTDOUT(1000))

    @skipUnlessDarwin
    @skipIfDarwinEmbedded
    @skipIfLLVMTargetMissing("AArch64")
    @skipIfLLVMTargetMissing("X86")
    @skipTestIfFn(no_haswell)
    def test_haswell(self):
        self.build()
        exe = self.getBuildArtifact("fat.out")
        self.run_arch(exe, "x86_64")
        self.run_arch(exe, "x86_64h")

    @skipUnlessDarwin
    @skipIfDarwinEmbedded
    @skipIfLLVMTargetMissing("AArch64")
    @skipIfLLVMTargetMissing("X86")
    @skipTestIfFn(no_apple_silicon)
    def test_apple_silicon(self):
        self.build()
        exe = self.getBuildArtifact("fat.out")
        if rosetta_debugserver_installed():
            self.run_arch(exe, "x86_64")
        self.run_arch(exe, "arm64")
