gdbclient.py: don't use make to dump target info.

make dumpvar takes forever (~0.45s per variable on my machine), and the
information we want from it is already available in the environment.
Construct the paths we need ourselves, instead of relying on make to do
it for us, shaving off about a second from a gdbclient.py invocation.

Test: gdbclient.py -r ls
Change-Id: I8c563da726c8f61a23e2eb701f2f272a4c71d713
diff --git a/scripts/gdbclient.py b/scripts/gdbclient.py
index ff593b3..982ddc8 100755
--- a/scripts/gdbclient.py
+++ b/scripts/gdbclient.py
@@ -68,28 +68,12 @@
     return parser.parse_args()
 
 
-def dump_var(root, variable):
-    make_args = ["make", "CALLED_FROM_SETUP=true",
-                 "BUILD_SYSTEM={}/build/core".format(root),
-                 "--no-print-directory", "-f",
-                 "{}/build/core/config.mk".format(root),
-                 "dumpvar-{}".format(variable)]
-
-    # subprocess cwd argument does not change the PWD shell variable, but
-    # dumpvar.mk uses PWD to create an absolute path, so we need to set it.
-    saved_pwd = os.environ['PWD']
-    os.environ['PWD'] = root
-    make_output = subprocess.check_output(make_args, cwd=root)
-    os.environ['PWD'] = saved_pwd
-    return make_output.splitlines()[0]
-
-
 def verify_device(root, device):
-    names = set([device.get_prop("ro.build.product"), device.get_prop("ro.product.device")])
-    target_device = dump_var(root, "TARGET_DEVICE")
-    if target_device not in names:
-        msg = "TARGET_DEVICE ({}) does not match attached device ({})"
-        sys.exit(msg.format(target_device, ", ".join(names)))
+    name = device.get_prop("ro.product.name")
+    target_device = os.environ["TARGET_PRODUCT"]
+    if target_device != name:
+        msg = "TARGET_PRODUCT ({}) does not match attached device ({})"
+        sys.exit(msg.format(target_device, name))
 
 
 def get_remote_pid(device, process_name):
@@ -169,6 +153,7 @@
 
     return (binary_file, pid, run_cmd)
 
+
 def generate_gdb_script(sysroot, binary_file, is64bit, port, connect_timeout=5):
     # Generate a gdb script.
     # TODO: Detect the zygote and run 'art-on' automatically.
@@ -226,6 +211,13 @@
 
 
 def main():
+    required_env = ["ANDROID_BUILD_TOP",
+                    "ANDROID_PRODUCT_OUT", "TARGET_PRODUCT"]
+    for env in required_env:
+        if env not in os.environ:
+            sys.exit(
+                "Environment variable '{}' not defined, have you run lunch?".format(env))
+
     args = parse_args()
     device = args.device
 
@@ -233,7 +225,7 @@
         sys.exit("ERROR: Failed to find device.")
 
     root = os.environ["ANDROID_BUILD_TOP"]
-    sysroot = dump_var(root, "abs-TARGET_OUT_UNSTRIPPED")
+    sysroot = os.path.join(os.environ["ANDROID_PRODUCT_OUT"], "symbols")
 
     # Make sure the environment matches the attached device.
     verify_device(root, device)