tested stuff on a robot + fixed issues
diff --git a/aos/build/build.py b/aos/build/build.py
index fa0766a..14f890a 100755
--- a/aos/build/build.py
+++ b/aos/build/build.py
@@ -478,7 +478,6 @@
         r += 5
       return r
 
-    # TODO(brians): test this
     def deploy(self, dry_run):
       # Downloads code to the prime in a way that avoids clashing too badly with
       # starter (like the naive download everything one at a time).
@@ -493,22 +492,24 @@
                                      cwd=from_dir)
       to_download = subprocess.check_output(
           ('ssh', TARGET,
-           """rm -rf {TMPDIR} && mkdir {TMPDIR} && cd {TO_DIR}
-             && echo '{SUMS}' | {SUM} --check --quiet
-             |& grep -F FAILED | sed 's/^\\(.*\\): FAILED.*"'$'"/\\1/g'""".
-           format(TMPDIR=TEMP_DIR, TO_DIR=TARGET_DIR, SUMS=sums, SUM=SUM)))
+           """rm -rf {TMPDIR} && mkdir {TMPDIR} && cd {TO_DIR} \\
+             && echo '{SUMS}' | {SUM} --check --quiet \\
+             |& grep -F FAILED | sed 's/^\\(.*\\): FAILED.*$/\\1/g'""".
+           format(TMPDIR=TEMP_DIR, TO_DIR=TARGET_DIR, SUMS=sums.decode('utf-8'),
+                  SUM=SUM)))
       if not to_download:
         user_output("Nothing to download")
         return
       self.do_deploy(
           dry_run,
-          ('scp', '-o', 'Compression yes') + to_download
+          ('scp', '-o', 'Compression yes')
+          + tuple([os.path.join(from_dir, f) for f in to_download.decode('utf-8').split('\n')[:-1]])
           + (('%s:%s' % (TARGET, TEMP_DIR)),))
       if not dry_run:
         subprocess.check_call(
             ('ssh', TARGET,
-             """mv {TMPDIR}/* {TO_DIR}
-             && echo 'Done moving new executables into place'
+             """mv {TMPDIR}/* {TO_DIR} \\
+             && echo 'Done moving new executables into place' \\
              && ionice -c 3 bash -c 'sync && sync && sync'""".format(
                  TMPDIR=TEMP_DIR, TO_DIR=TARGET_DIR)))
 
@@ -591,9 +592,8 @@
         if warning[0]:
           default_platforms -= self.select_platforms(sanitizer=sanitizer)
     elif is_deploy:
-      # TODO(brians): Switch to deploying the code built with clang.
       default_platforms = self.select_platforms(architecture='arm',
-                                                compiler='gcc',
+                                                compiler='clang',
                                                 debug=False)
     else:
       default_platforms = self.select_platforms(debug=False)
diff --git a/aos/linux_code/init.cc b/aos/linux_code/init.cc
index d8864fe..7405237 100644
--- a/aos/linux_code/init.cc
+++ b/aos/linux_code/init.cc
@@ -39,6 +39,7 @@
 // Common stuff that needs to happen at the beginning of both the realtime and
 // non-realtime initialization sequences. May be called twice.
 void InitStart() {
+  ::aos::logging::Init();
   // Allow locking as much as we want into RAM.
   SetSoftRLimit(RLIMIT_MEMLOCK, RLIM_INFINITY, false);
   WriteCoreDumps();
diff --git a/aos/linux_code/logging/log_displayer.cc b/aos/linux_code/logging/log_displayer.cc
index 071a87e..805267c 100644
--- a/aos/linux_code/logging/log_displayer.cc
+++ b/aos/linux_code/logging/log_displayer.cc
@@ -57,6 +57,7 @@
   bool skip_to_end = false;
   const char *filename = "aos_log-current";
 
+  ::aos::logging::Init();
   ::aos::logging::AddImplementation(
       new ::aos::logging::StreamLogImplementation(stdout));