diff --git a/SConstruct b/SConstruct
new file mode 100644
index 0000000..9cc76e5
--- /dev/null
+++ b/SConstruct
@@ -0,0 +1,371 @@
+# Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import os
+
+# Protobuffer compilation
+def ProtocolBufferEmitter(target, source, env):
+  """ Inputs:
+          target: list of targets to compile to
+          source: list of sources to compile
+          env: the scons environment in which we are compiling
+      Outputs:
+          target: the list of targets we'll emit
+          source: the list of sources we'll compile"""
+  output = str(source[0])
+  output = output[0:output.rfind('.proto')]
+  target = [
+    output + '.pb.cc',
+    output + '.pb.h',
+  ]
+  return target, source
+
+def ProtocolBufferGenerator(source, target, env, for_signature):
+  """ Inputs:
+          source: list of sources to process
+          target: list of targets to generate
+          env: scons environment in which we are working
+          for_signature: unused
+      Outputs: a list of commands to execute to generate the targets from
+               the sources."""
+  commands = [
+    '/usr/bin/protoc '
+    ' --proto_path . ${SOURCES} --cpp_out .']
+  return commands
+
+proto_builder = Builder(generator = ProtocolBufferGenerator,
+                        emitter = ProtocolBufferEmitter,
+                        single_source = 1,
+                        suffix = '.pb.cc')
+
+def DbusBindingsEmitter(target, source, env):
+  """ Inputs:
+          target: unused
+          source: list containing the source .xml file
+          env: the scons environment in which we are compiling
+      Outputs:
+          target: the list of targets we'll emit
+          source: the list of sources we'll process"""
+  output = str(source[0])
+  output = output[0:output.rfind('.xml')]
+  target = [
+    output + '.dbusserver.h',
+    output + '.dbusclient.h'
+  ]
+  return target, source
+
+def DbusBindingsGenerator(source, target, env, for_signature):
+  """ Inputs:
+          source: list of sources to process
+          target: list of targets to generate
+          env: scons environment in which we are working
+          for_signature: unused
+      Outputs: a list of commands to execute to generate the targets from
+               the sources."""
+  commands = []
+  for target_file in target:
+    if str(target_file).endswith('.dbusserver.h'):
+      mode_flag = '--mode=glib-server '
+    else:
+      mode_flag = '--mode=glib-client '
+    cmd = '/usr/bin/dbus-binding-tool %s --prefix=update_engine_service ' \
+          '%s > %s' % (mode_flag, str(source[0]), str(target_file))
+    commands.append(cmd)
+  return commands
+
+dbus_bindings_builder = Builder(generator = DbusBindingsGenerator,
+                                emitter = DbusBindingsEmitter,
+                                single_source = 1,
+                                suffix = 'dbusclient.h')
+
+# Public key generation
+def PublicKeyEmitter(target, source, env):
+  """ Inputs:
+          target: list of targets to compile to
+          source: list of sources to compile
+          env: the scons environment in which we are compiling
+      Outputs:
+          target: the list of targets we'll emit
+          source: the list of sources we'll compile"""
+  targets = []
+  for source_file in source:
+    output = str(source_file)
+    output = output[0:output.rfind('.pem')]
+    output += '.pub.pem'
+    targets.append(output)
+  return targets, source
+
+def PublicKeyGenerator(source, target, env, for_signature):
+  """ Inputs:
+          source: list of sources to process
+          target: list of targets to generate
+          env: scons environment in which we are working
+          for_signature: unused
+      Outputs: a list of commands to execute to generate the targets from
+               the sources."""
+  commands = []
+  for source_file in source:
+    output = str(source_file)
+    output = output[0:output.rfind('.pem')]
+    output += '.pub.pem'
+    cmd = '/usr/bin/openssl rsa -in %s -pubout -out %s' % (source_file, output)
+    commands.append(cmd)
+  return commands
+
+public_key_builder = Builder(generator = PublicKeyGenerator,
+                             emitter = PublicKeyEmitter,
+                             suffix = '.pub.pem')
+
+env = Environment()
+for key in Split('CC CXX AR RANLIB LD NM'):
+  value = os.environ.get(key)
+  if value != None:
+    env[key] = value
+for key in Split('CFLAGS CCFLAGS LDFLAGS CPPPATH LIBPATH'):
+  value = os.environ.get(key)
+  if value != None:
+    env[key] = Split(value)
+
+for key in Split('PKG_CONFIG_LIBDIR PKG_CONFIG_PATH SYSROOT'):
+  if os.environ.has_key(key):
+    env['ENV'][key] = os.environ[key]
+
+
+env['LINKFLAGS'] = Split("""
+    -Wl,--gc-sections""")
+env['LINKFLAGS'] += env.get('LDFLAGS', [])
+
+env['CCFLAGS'] = Split("""
+    -g
+    -ffunction-sections
+    -fno-exceptions
+    -fno-strict-aliasing
+    -std=gnu++11
+    -Wall
+    -Wextra
+    -Werror
+    -Wno-unused-parameter
+    -Wno-deprecated-register
+    -D__STDC_FORMAT_MACROS=1
+    -D_FILE_OFFSET_BITS=64
+    -D_POSIX_C_SOURCE=199309L""")
+env['CCFLAGS'] += env['CFLAGS']
+
+BASE_VER = os.environ.get('BASE_VER', '271506')
+env['LIBS'] = Split("""bz2
+                       gflags
+                       policy-%s
+                       rootdev
+                       rt
+                       vboot_host""" % (BASE_VER,))
+env['CPPPATH'] = ['..']
+env['BUILDERS']['ProtocolBuffer'] = proto_builder
+env['BUILDERS']['DbusBindings'] = dbus_bindings_builder
+env['BUILDERS']['PublicKey'] = public_key_builder
+
+# Fix issue with scons not passing pkg-config vars through the environment.
+for key in Split('PKG_CONFIG_LIBDIR PKG_CONFIG_PATH'):
+  if os.environ.has_key(key):
+    env['ENV'][key] = os.environ[key]
+
+pkgconfig = os.environ.get('PKG_CONFIG', 'pkg-config')
+
+env.ParseConfig(pkgconfig + ' --cflags --libs ' + ' '.join((
+                'dbus-1',
+                'dbus-glib-1',
+                'ext2fs',
+                'gio-2.0',
+                'gio-unix-2.0',
+                'glib-2.0',
+                'gthread-2.0',
+                'libchrome-%s' % BASE_VER,
+                'libchromeos-%s' % BASE_VER,
+                'libcrypto',
+                'libcurl',
+                'libmetrics-%s' % BASE_VER,
+                'libssl',
+                'libxml-2.0',
+                'protobuf')))
+env.ProtocolBuffer('update_metadata.pb.cc', 'update_metadata.proto')
+env.PublicKey('unittest_key.pub.pem', 'unittest_key.pem')
+env.PublicKey('unittest_key2.pub.pem', 'unittest_key2.pem')
+
+# Target name is derived from the source .xml filename. The passed name is
+# unused.
+env.DbusBindings(None, 'update_engine.xml')
+
+if ARGUMENTS.get('debug', 0):
+  env['CCFLAGS'] += ['-fprofile-arcs', '-ftest-coverage']
+  env['LIBS'] += ['bz2', 'gcov']
+
+sources = Split("""action_processor.cc
+                   bzip.cc
+                   bzip_extent_writer.cc
+                   certificate_checker.cc
+                   chrome_browser_proxy_resolver.cc
+                   clock.cc
+                   connection_manager.cc
+                   constants.cc
+                   dbus_service.cc
+                   delta_performer.cc
+                   download_action.cc
+                   extent_ranges.cc
+                   extent_writer.cc
+                   file_descriptor.cc
+                   file_writer.cc
+                   filesystem_copier_action.cc
+                   hardware.cc
+                   http_common.cc
+                   http_fetcher.cc
+                   hwid_override.cc
+                   install_plan.cc
+                   libcurl_http_fetcher.cc
+                   metrics.cc
+                   multi_range_http_fetcher.cc
+                   omaha_hash_calculator.cc
+                   omaha_request_action.cc
+                   omaha_request_params.cc
+                   omaha_response_handler_action.cc
+                   p2p_manager.cc
+                   payload_constants.cc
+                   payload_generator/cycle_breaker.cc
+                   payload_generator/delta_diff_generator.cc
+                   payload_generator/extent_mapper.cc
+                   payload_generator/filesystem_iterator.cc
+                   payload_generator/full_update_generator.cc
+                   payload_generator/graph_utils.cc
+                   payload_generator/metadata.cc
+                   payload_generator/tarjan.cc
+                   payload_generator/topological_sort.cc
+                   payload_signer.cc
+                   payload_state.cc
+                   postinstall_runner_action.cc
+                   prefs.cc
+                   proxy_resolver.cc
+                   real_system_state.cc
+                   simple_key_value_store.cc
+                   subprocess.cc
+                   terminator.cc
+                   update_attempter.cc
+                   update_check_scheduler.cc
+                   update_manager/boxed_value.cc
+                   update_manager/chromeos_policy.cc
+                   update_manager/evaluation_context.cc
+                   update_manager/event_loop.cc
+                   update_manager/policy.cc
+                   update_manager/real_config_provider.cc
+                   update_manager/real_device_policy_provider.cc
+                   update_manager/real_random_provider.cc
+                   update_manager/real_shill_provider.cc
+                   update_manager/real_system_provider.cc
+                   update_manager/real_time_provider.cc
+                   update_manager/real_updater_provider.cc
+                   update_manager/state_factory.cc
+                   update_manager/update_manager.cc
+                   update_metadata.pb.cc
+                   utils.cc""")
+main = ['main.cc']
+
+unittest_sources = Split("""action_pipe_unittest.cc
+                            action_processor_unittest.cc
+                            action_unittest.cc
+                            bzip_extent_writer_unittest.cc
+                            certificate_checker_unittest.cc
+                            chrome_browser_proxy_resolver_unittest.cc
+                            connection_manager_unittest.cc
+                            delta_performer_unittest.cc
+                            download_action_unittest.cc
+                            extent_ranges_unittest.cc
+                            extent_writer_unittest.cc
+                            fake_prefs.cc
+                            fake_system_state.cc
+                            file_writer_unittest.cc
+                            filesystem_copier_action_unittest.cc
+                            http_fetcher_unittest.cc
+                            hwid_override_unittest.cc
+                            mock_http_fetcher.cc
+                            omaha_hash_calculator_unittest.cc
+                            omaha_request_action_unittest.cc
+                            omaha_request_params_unittest.cc
+                            omaha_response_handler_action_unittest.cc
+                            p2p_manager_unittest.cc
+                            payload_generator/cycle_breaker_unittest.cc
+                            payload_generator/delta_diff_generator_unittest.cc
+                            payload_generator/extent_mapper_unittest.cc
+                            payload_generator/filesystem_iterator_unittest.cc
+                            payload_generator/full_update_generator_unittest.cc
+                            payload_generator/graph_utils_unittest.cc
+                            payload_generator/metadata_unittest.cc
+                            payload_generator/tarjan_unittest.cc
+                            payload_generator/topological_sort_unittest.cc
+                            payload_signer_unittest.cc
+                            payload_state_unittest.cc
+                            postinstall_runner_action_unittest.cc
+                            prefs_unittest.cc
+                            simple_key_value_store_unittest.cc
+                            subprocess_unittest.cc
+                            terminator_unittest.cc
+                            test_utils.cc
+                            update_attempter_unittest.cc
+                            update_check_scheduler_unittest.cc
+                            update_manager/boxed_value_unittest.cc
+                            update_manager/chromeos_policy_unittest.cc
+                            update_manager/evaluation_context_unittest.cc
+                            update_manager/event_loop_unittest.cc
+                            update_manager/generic_variables_unittest.cc
+                            update_manager/prng_unittest.cc
+                            update_manager/real_config_provider_unittest.cc
+                            update_manager/real_device_policy_provider_unittest.cc
+                            update_manager/real_random_provider_unittest.cc
+                            update_manager/real_shill_provider_unittest.cc
+                            update_manager/real_system_provider_unittest.cc
+                            update_manager/real_time_provider_unittest.cc
+                            update_manager/real_updater_provider_unittest.cc
+                            update_manager/umtest_utils.cc
+                            update_manager/update_manager_unittest.cc
+                            update_manager/variable_unittest.cc
+                            utils_unittest.cc
+                            zip_unittest.cc""")
+unittest_main = ['testrunner.cc']
+
+client_main = ['update_engine_client.cc']
+
+delta_generator_main = ['payload_generator/generate_delta_main.cc']
+
+# Hack to generate header files first. They are generated as a side effect
+# of generating other files (usually their corresponding .c(c) files),
+# so we make all sources depend on those other files.
+all_sources = []
+all_sources.extend(sources)
+all_sources.extend(unittest_sources)
+all_sources.extend(main)
+all_sources.extend(unittest_main)
+all_sources.extend(client_main)
+all_sources.extend(delta_generator_main)
+for source in all_sources:
+  if source.endswith('_unittest.cc'):
+    env.Depends(source, 'unittest_key.pub.pem')
+  if source.endswith('.pb.cc'):
+    continue
+  env.Depends(source, 'update_metadata.pb.cc')
+  env.Depends(source, 'update_engine.dbusclient.h')
+
+update_engine_core = env.Library('update_engine_core', sources)
+env.Prepend(LIBS=[update_engine_core])
+
+env.Program('update_engine', main)
+
+client_cmd = env.Program('update_engine_client', client_main);
+
+delta_generator_cmd = env.Program('delta_generator',
+                                  delta_generator_main)
+
+http_server_cmd = env.Program('test_http_server', 'test_http_server.cc')
+
+unittest_env = env.Clone()
+unittest_env.Append(LIBS=['gmock', 'gtest'])
+unittest_cmd = unittest_env.Program('update_engine_unittests',
+                           unittest_sources + unittest_main)
+Clean(unittest_cmd, Glob('*.gcda') + Glob('*.gcno') + Glob('*.gcov') +
+                    Split('html app.info'))
diff --git a/delta_performer_unittest.cc b/delta_performer_unittest.cc
index 226427f..8d4eacd 100644
--- a/delta_performer_unittest.cc
+++ b/delta_performer_unittest.cc
@@ -196,9 +196,9 @@
   // Generates a new private key that will not match the public key.
   if (signature_test == kSignatureGeneratedShellBadKey) {
     LOG(INFO) << "Generating a mismatched private key.";
-    ASSERT_EQ(0, System(base::StringPrintf(
-        "%s genrsa -out %s 2048",
-        utils::GetPathOnBoard("openssl").c_str(), private_key_path.c_str())));
+    ASSERT_EQ(0,
+              System(base::StringPrintf("openssl genrsa -out %s 2048",
+                                        private_key_path.c_str())));
   }
   int signature_size = GetSignatureSize(private_key_path);
   string hash_file;
@@ -230,8 +230,7 @@
   ScopedPathUnlinker sig_unlinker(sig_file);
   ASSERT_EQ(0,
             System(base::StringPrintf(
-                "%s rsautl -raw -sign -inkey %s -in %s -out %s",
-                utils::GetPathOnBoard("openssl").c_str(),
+                "openssl rsautl -raw -sign -inkey %s -in %s -out %s",
                 private_key_path.c_str(),
                 hash_file.c_str(),
                 sig_file.c_str())));
@@ -242,8 +241,7 @@
       signature_test == kSignatureGeneratedShellRotateCl2) {
     ASSERT_EQ(0,
               System(base::StringPrintf(
-                  "%s rsautl -raw -sign -inkey %s -in %s -out %s",
-                  utils::GetPathOnBoard("openssl").c_str(),
+                  "openssl rsautl -raw -sign -inkey %s -in %s -out %s",
                   kUnittestPrivateKey2Path,
                   hash_file.c_str(),
                   sig_file2.c_str())));
diff --git a/payload_signer.cc b/payload_signer.cc
index 3d09737..15c2b32 100644
--- a/payload_signer.cc
+++ b/payload_signer.cc
@@ -230,10 +230,6 @@
   cmd[cmd.size() - 3] = hash_path;
   cmd[cmd.size() - 1] = sig_path;
 
-  // When running unittests, we need to use the openssl version from the
-  // SYSROOT instead of the one on the $PATH (host).
-  cmd[0] = utils::GetPathOnBoard("openssl");
-
   int return_code = 0;
   TEST_AND_RETURN_FALSE(Subprocess::SynchronousExec(cmd, &return_code, NULL));
   TEST_AND_RETURN_FALSE(return_code == 0);
diff --git a/update_engine.gyp b/update_engine.gyp
deleted file mode 100644
index e35d725..0000000
--- a/update_engine.gyp
+++ /dev/null
@@ -1,329 +0,0 @@
-{
-  'target_defaults': {
-    'variables': {
-      'deps': [
-        'libchrome-<(libbase_ver)',
-        'libchromeos-<(libbase_ver)',
-      ],
-      # Defaults if the -DUSE_* flags are not passed to gyp is 0. You can set
-      # the default value for the USE flag in the ebuild.
-      'USE_hwid_override%': '0',
-      'USE_power_management%': '0',
-    },
-    'cflags': [
-      '-g',
-      '-ffunction-sections',
-      '-Wall',
-      '-Wextra',
-      '-Werror',
-      '-Wno-unused-parameter',
-      '-Wno-deprecated-register',
-      '-Wno-format-nonliteral',
-    ],
-    'cflags_cc': [
-      '-fno-strict-aliasing',
-      '-std=gnu++11',
-    ],
-    'ldflags': [
-      '-Wl,--gc-sections',
-    ],
-    'defines': [
-      '__STDC_FORMAT_MACROS=1',
-      '_FILE_OFFSET_BITS=64',
-      '_POSIX_C_SOURCE=199309L',
-      'USE_HWID_OVERRIDE=<(USE_hwid_override)',
-      'USE_POWER_MANAGEMENT=<(USE_power_management)',
-    ],
-  },
-  'targets': [
-    # Protobufs.
-    {
-      'target_name': 'update_metadata-protos',
-      'type': 'static_library',
-      'variables': {
-        'proto_in_dir': '.',
-        'proto_out_dir': 'include/update_engine',
-      },
-      'sources': [
-        'update_metadata.proto'
-      ],
-      'includes': ['../common-mk/protoc.gypi'],
-    },
-    # D-Bus glib bindings.
-    {
-      'target_name': 'update_engine-dbus-client',
-      'type': 'none',
-      'variables': {
-        'dbus_glib_type': 'client',
-        'dbus_glib_out_dir': 'include/update_engine',
-        'dbus_glib_prefix': 'update_engine_service',
-      },
-      'sources': [
-        'update_engine.xml',
-      ],
-      'includes': ['../common-mk/dbus_glib.gypi'],
-    },
-    {
-      'target_name': 'update_engine-dbus-server',
-      'type': 'none',
-      'variables': {
-        'dbus_glib_type': 'server',
-        'dbus_glib_out_dir': 'include/update_engine',
-        'dbus_glib_prefix': 'update_engine_service',
-      },
-      'sources': [
-        'update_engine.xml',
-      ],
-      'includes': ['../common-mk/dbus_glib.gypi'],
-    },
-    # The main static_library with all the code.
-    {
-      'target_name': 'libupdate_engine',
-      'type': 'static_library',
-      'dependencies': [
-        'update_metadata-protos',
-        'update_engine-dbus-client',
-        'update_engine-dbus-server',
-      ],
-      'variables': {
-        'exported_deps': [
-          'dbus-1',
-          'dbus-glib-1',
-          'ext2fs',
-          'gio-2.0',
-          'gio-unix-2.0',
-          'glib-2.0',
-          'gthread-2.0',
-          'libchrome-<(libbase_ver)',
-          'libchromeos-<(libbase_ver)',
-          'libcrypto',
-          'libcurl',
-          'libmetrics-<(libbase_ver)',
-          'libssl',
-          'libxml-2.0',
-          'protobuf',
-        ],
-        'deps': ['<@(exported_deps)'],
-      },
-      'all_dependent_settings': {
-        'variables': {
-          'deps': [
-            '<@(exported_deps)',
-          ],
-        },
-      },
-      'link_settings': {
-        'variables': {
-          'deps': [
-            '<@(exported_deps)',
-          ],
-        },
-        'libraries': [
-          '-lbz2',
-          '-lgflags',
-          '-lpolicy-<(libbase_ver)',
-          '-lrootdev',
-          '-lrt',
-          '-lvboot_host',
-        ],
-      },
-      'sources': [
-        'action_processor.cc',
-        'bzip.cc',
-        'bzip_extent_writer.cc',
-        'certificate_checker.cc',
-        'chrome_browser_proxy_resolver.cc',
-        'clock.cc',
-        'connection_manager.cc',
-        'constants.cc',
-        'dbus_service.cc',
-        'delta_performer.cc',
-        'download_action.cc',
-        'extent_ranges.cc',
-        'extent_writer.cc',
-        'file_descriptor.cc',
-        'file_writer.cc',
-        'filesystem_copier_action.cc',
-        'hardware.cc',
-        'http_common.cc',
-        'http_fetcher.cc',
-        'hwid_override.cc',
-        'install_plan.cc',
-        'libcurl_http_fetcher.cc',
-        'metrics.cc',
-        'multi_range_http_fetcher.cc',
-        'omaha_hash_calculator.cc',
-        'omaha_request_action.cc',
-        'omaha_request_params.cc',
-        'omaha_response_handler_action.cc',
-        'p2p_manager.cc',
-        'payload_constants.cc',
-        'payload_generator/cycle_breaker.cc',
-        'payload_generator/delta_diff_generator.cc',
-        'payload_generator/extent_mapper.cc',
-        'payload_generator/filesystem_iterator.cc',
-        'payload_generator/full_update_generator.cc',
-        'payload_generator/graph_utils.cc',
-        'payload_generator/metadata.cc',
-        'payload_generator/tarjan.cc',
-        'payload_generator/topological_sort.cc',
-        'payload_signer.cc',
-        'payload_state.cc',
-        'postinstall_runner_action.cc',
-        'prefs.cc',
-        'proxy_resolver.cc',
-        'real_system_state.cc',
-        'simple_key_value_store.cc',
-        'subprocess.cc',
-        'terminator.cc',
-        'update_attempter.cc',
-        'update_check_scheduler.cc',
-        'update_manager/boxed_value.cc',
-        'update_manager/chromeos_policy.cc',
-        'update_manager/evaluation_context.cc',
-        'update_manager/event_loop.cc',
-        'update_manager/policy.cc',
-        'update_manager/real_config_provider.cc',
-        'update_manager/real_device_policy_provider.cc',
-        'update_manager/real_random_provider.cc',
-        'update_manager/real_shill_provider.cc',
-        'update_manager/real_system_provider.cc',
-        'update_manager/real_time_provider.cc',
-        'update_manager/real_updater_provider.cc',
-        'update_manager/state_factory.cc',
-        'update_manager/update_manager.cc',
-        'utils.cc',
-      ],
-    },
-    # update_engine daemon.
-    {
-      'target_name': 'update_engine',
-      'type': 'executable',
-      'dependencies': ['libupdate_engine'],
-      'sources': [
-        'main.cc',
-      ]
-    },
-    # update_engine console client.
-    {
-      'target_name': 'update_engine_client',
-      'type': 'executable',
-      'dependencies': ['libupdate_engine'],
-      'sources': [
-        'update_engine_client.cc',
-      ]
-    },
-    # server-side delta generator.
-    {
-      'target_name': 'delta_generator',
-      'type': 'executable',
-      'dependencies': ['libupdate_engine'],
-      'sources': [
-        'payload_generator/generate_delta_main.cc',
-      ]
-    },
-  ],
-  'conditions': [
-    ['USE_test == 1', {
-      'targets': [
-        # Public keys used for unit testing.
-        {
-          'target_name': 'update_engine-testkeys',
-          'type': 'none',
-          'variables': {
-            'openssl_pem_in_dir': '.',
-            'openssl_pem_out_dir': 'include/update_engine',
-          },
-          'sources': [
-            'unittest_key.pem',
-            'unittest_key2.pem',
-          ],
-          'includes': ['../common-mk/openssl_pem.gypi'],
-        },
-        # Test HTTP Server.
-        {
-          'target_name': 'test_http_server',
-          'type': 'executable',
-          'dependencies': ['libupdate_engine'],
-          'sources': [
-            'test_http_server.cc',
-          ]
-        },
-        # Main unittest file.
-        {
-          'target_name': 'update_engine_unittests',
-          'type': 'executable',
-          'dependencies': ['libupdate_engine'],
-          'includes': ['../common-mk/common_test.gypi'],
-          'defines': [
-            'SYSROOT="<(sysroot)"',
-          ],
-          'sources': [
-            'action_pipe_unittest.cc',
-            'action_processor_unittest.cc',
-            'action_unittest.cc',
-            'bzip_extent_writer_unittest.cc',
-            'certificate_checker_unittest.cc',
-            'chrome_browser_proxy_resolver_unittest.cc',
-            'connection_manager_unittest.cc',
-            'delta_performer_unittest.cc',
-            'download_action_unittest.cc',
-            'extent_ranges_unittest.cc',
-            'extent_writer_unittest.cc',
-            'fake_prefs.cc',
-            'fake_system_state.cc',
-            'file_writer_unittest.cc',
-            'filesystem_copier_action_unittest.cc',
-            'http_fetcher_unittest.cc',
-            'hwid_override_unittest.cc',
-            'mock_http_fetcher.cc',
-            'omaha_hash_calculator_unittest.cc',
-            'omaha_request_action_unittest.cc',
-            'omaha_request_params_unittest.cc',
-            'omaha_response_handler_action_unittest.cc',
-            'p2p_manager_unittest.cc',
-            'payload_generator/cycle_breaker_unittest.cc',
-            'payload_generator/delta_diff_generator_unittest.cc',
-            'payload_generator/extent_mapper_unittest.cc',
-            'payload_generator/filesystem_iterator_unittest.cc',
-            'payload_generator/full_update_generator_unittest.cc',
-            'payload_generator/graph_utils_unittest.cc',
-            'payload_generator/metadata_unittest.cc',
-            'payload_generator/tarjan_unittest.cc',
-            'payload_generator/topological_sort_unittest.cc',
-            'payload_signer_unittest.cc',
-            'payload_state_unittest.cc',
-            'postinstall_runner_action_unittest.cc',
-            'prefs_unittest.cc',
-            'simple_key_value_store_unittest.cc',
-            'subprocess_unittest.cc',
-            'terminator_unittest.cc',
-            'test_utils.cc',
-            'update_attempter_unittest.cc',
-            'update_check_scheduler_unittest.cc',
-            'update_manager/boxed_value_unittest.cc',
-            'update_manager/chromeos_policy_unittest.cc',
-            'update_manager/evaluation_context_unittest.cc',
-            'update_manager/event_loop_unittest.cc',
-            'update_manager/generic_variables_unittest.cc',
-            'update_manager/prng_unittest.cc',
-            'update_manager/real_config_provider_unittest.cc',
-            'update_manager/real_device_policy_provider_unittest.cc',
-            'update_manager/real_random_provider_unittest.cc',
-            'update_manager/real_shill_provider_unittest.cc',
-            'update_manager/real_system_provider_unittest.cc',
-            'update_manager/real_time_provider_unittest.cc',
-            'update_manager/real_updater_provider_unittest.cc',
-            'update_manager/umtest_utils.cc',
-            'update_manager/update_manager_unittest.cc',
-            'update_manager/variable_unittest.cc',
-            'utils_unittest.cc',
-            'zip_unittest.cc',
-            # Main entry point for runnning tests.
-            'testrunner.cc',
-          ],
-        },
-      ],
-    }],
-  ],
-}
diff --git a/utils.cc b/utils.cc
index 1235a6b..f78861a 100644
--- a/utils.cc
+++ b/utils.cc
@@ -669,27 +669,6 @@
   return true;
 }
 
-string GetPathOnBoard(const string& command) {
-  int return_code = 0;
-  string command_path;
-  // TODO(deymo): prepend SYSROOT to each PATH instead of the result.
-  if (!Subprocess::SynchronousExec(
-      {"which", command}, &return_code, &command_path)) {
-    return command;
-  }
-  if (return_code != 0)
-    return command;
-
-  base::TrimWhitespaceASCII(command_path, base::TRIM_ALL, &command_path);
-  const char* env_sysroot = getenv("SYSROOT");
-  if (env_sysroot) {
-    string sysroot_command_path = env_sysroot + command_path;
-    if (utils::FileExists(sysroot_command_path.c_str()))
-      return sysroot_command_path;
-  }
-  return command_path;
-}
-
 // Tries to parse the header of an ELF file to obtain a human-readable
 // description of it on the |output| string.
 static bool GetFileFormatELF(const char* buffer, size_t size, string* output) {
diff --git a/utils.h b/utils.h
index 045190d..b99d808 100644
--- a/utils.h
+++ b/utils.h
@@ -193,10 +193,6 @@
                              int* out_block_count,
                              int* out_block_size);
 
-// Returns the path of the passed |command| on the board. This uses the
-// environment variable SYSROOT to determine the path to the command on the
-// board instead of the path on the running environment.
-std::string GetPathOnBoard(const std::string& command);
 
 // Returns a human-readable string with the file format based on magic constants
 // on the header of the file.
