xref: /llvm-project/compiler-rt/test/sanitizer_common/android_commands/android_common.py (revision f98ee40f4b5d7474fc67e82824bf6abbaedb7b1c)
14a3e502dSEvgeniy Stepanovimport os, sys, subprocess, tempfile
20dc3ef37SVitaly Bukaimport time
30dc3ef37SVitaly Buka
4*f98ee40fSTobias HietaANDROID_TMPDIR = "/data/local/tmp/Output"
5*f98ee40fSTobias HietaADB = os.environ.get("ADB", "adb")
60dc3ef37SVitaly Buka
70dc3ef37SVitaly Bukaverbose = False
8*f98ee40fSTobias Hietaif os.environ.get("ANDROID_RUN_VERBOSE") == "1":
90dc3ef37SVitaly Buka    verbose = True
100dc3ef37SVitaly Buka
11*f98ee40fSTobias Hieta
124a3e502dSEvgeniy Stepanovdef host_to_device_path(path):
134a3e502dSEvgeniy Stepanov    rel = os.path.relpath(path, "/")
144a3e502dSEvgeniy Stepanov    dev = os.path.join(ANDROID_TMPDIR, rel)
154a3e502dSEvgeniy Stepanov    return dev
164a3e502dSEvgeniy Stepanov
17*f98ee40fSTobias Hieta
18dd0b8b94SVitaly Bukadef adb(args, attempts=1, timeout_sec=600):
190dc3ef37SVitaly Buka    if verbose:
2094210b12SVitaly Buka        print(args)
210dc3ef37SVitaly Buka    tmpname = tempfile.mktemp()
22*f98ee40fSTobias Hieta    out = open(tmpname, "w")
230dc3ef37SVitaly Buka    ret = 255
240dc3ef37SVitaly Buka    while attempts > 0 and ret != 0:
250dc3ef37SVitaly Buka        attempts -= 1
26*f98ee40fSTobias Hieta        ret = subprocess.call(
27*f98ee40fSTobias Hieta            ["timeout", str(timeout_sec), ADB] + args,
28*f98ee40fSTobias Hieta            stdout=out,
29*f98ee40fSTobias Hieta            stderr=subprocess.STDOUT,
30*f98ee40fSTobias Hieta        )
310dc3ef37SVitaly Buka    if ret != 0:
3294210b12SVitaly Buka        print("adb command failed", args)
3394210b12SVitaly Buka        print(tmpname)
340dc3ef37SVitaly Buka        out.close()
35*f98ee40fSTobias Hieta        out = open(tmpname, "r")
3694210b12SVitaly Buka        print(out.read())
370dc3ef37SVitaly Buka    out.close()
380dc3ef37SVitaly Buka    os.unlink(tmpname)
390dc3ef37SVitaly Buka    return ret
400dc3ef37SVitaly Buka
41*f98ee40fSTobias Hieta
420dc3ef37SVitaly Bukadef pull_from_device(path):
430dc3ef37SVitaly Buka    tmp = tempfile.mktemp()
44*f98ee40fSTobias Hieta    adb(["pull", path, tmp], 5, 60)
45*f98ee40fSTobias Hieta    text = open(tmp, "r").read()
460dc3ef37SVitaly Buka    os.unlink(tmp)
470dc3ef37SVitaly Buka    return text
480dc3ef37SVitaly Buka
49*f98ee40fSTobias Hieta
500dc3ef37SVitaly Bukadef push_to_device(path):
514a3e502dSEvgeniy Stepanov    dst_path = host_to_device_path(path)
52*f98ee40fSTobias Hieta    adb(["push", path, dst_path], 5, 60)
53