diff --git a/Makefile.standalone b/Makefile.standalone
index 7740a40..bac279a 100644
--- a/Makefile.standalone
+++ b/Makefile.standalone
@@ -90,7 +90,7 @@
 	$(LLVM_SRC_PATH)/utils/lit/lit.py -sv tests_lit
 
 check: check-lit
-	(cd crosstest; LLVM_BIN_PATH=$(LLVM_BIN_PATH) ./runtests.sh)
+	(cd crosstest; ./runtests.sh)
 
 # TODO: Fix the use of wildcards.
 # Assumes clang-format is within $PATH.
diff --git a/crosstest/crosstest.py b/crosstest/crosstest.py
index 89124d6..432cb9d 100755
--- a/crosstest/crosstest.py
+++ b/crosstest/crosstest.py
@@ -9,6 +9,7 @@
 
 sys.path.insert(0, '../pydir')
 from utils import shellcmd
+from utils import FindBaseNaCl
 
 if __name__ == '__main__':
     """Builds a cross-test binary that allows functions translated by
@@ -55,11 +56,6 @@
     argparser.add_argument('--dir', required=False, default='.',
                            metavar='OUTPUT_DIR',
                            help='Output directory for all files')
-    argparser.add_argument('--llvm-bin-path', required=False,
-                           default=os.environ.get('LLVM_BIN_PATH'),
-                           metavar='PATH',
-                           help='Path to LLVM executables like llc ' +
-                                '(defaults to $LLVM_BIN_PATH)')
     argparser.add_argument('--crosstest-bitcode', required=False,
                            default=1, type=int,
                            help='Compile non-subzero crosstest object file ' +
@@ -67,10 +63,15 @@
                            'If 0, then compile it straight from source.')
     args = argparser.parse_args()
 
+    nacl_root = FindBaseNaCl()
+    # Prepend host_x86_32/bin to $PATH.
+    os.environ['PATH'] = nacl_root + \
+        '/toolchain/linux_x86/pnacl_newlib/host_x86_32/bin' + \
+        os.pathsep + os.environ['PATH']
+
     objs = []
     remove_internal = re.compile('^define internal ')
     fix_target = re.compile('le32-unknown-nacl')
-    llvm_bin_path = args.llvm_bin_path
     for arg in args.test:
         base, ext = os.path.splitext(arg)
         if ext == '.ll':
@@ -101,7 +102,7 @@
                   '--prefix=' + args.prefix,
                   '-o=' + asm_sz,
                   bitcode])
-        shellcmd([os.path.join(llvm_bin_path, 'llvm-mc'),
+        shellcmd(['llvm-mc',
                   '-arch=' + arch_map[args.target],
                   '-x86-asm-syntax=intel',
                   '-filetype=obj',
@@ -125,7 +126,7 @@
         if not args.crosstest_bitcode:
             objs.append(arg)
         elif use_llc:
-            shellcmd([os.path.join(llvm_bin_path, 'llc'),
+            shellcmd(['llc'
                       '-filetype=obj',
                       '-o=' + obj_llc,
                       bitcode])
@@ -134,6 +135,6 @@
             objs.append(bitcode)
 
     linker = 'clang' if os.path.splitext(args.driver)[1] == '.c' else 'clang++'
-    shellcmd([os.path.join(llvm_bin_path, linker), '-g', '-m32', args.driver] +
+    shellcmd([linker, '-g', '-m32', args.driver] +
              objs +
              ['-lm', '-lpthread', '-o', os.path.join(args.dir, args.output)])
diff --git a/crosstest/runtests.sh b/crosstest/runtests.sh
index eedb3b3..cc353ab 100755
--- a/crosstest/runtests.sh
+++ b/crosstest/runtests.sh
@@ -19,7 +19,6 @@
             --prefix=Subzero_ \
             --target=x8632 \
             --dir="${OUTDIR}" \
-            --llvm-bin-path="${LLVM_BIN_PATH}" \
             --test=simple_loop.c \
             --driver=simple_loop_main.c \
             --output=simple_loop_O${optlevel}_${attribute}
@@ -28,7 +27,6 @@
             --prefix=Subzero_ \
             --target=x8632 \
             --dir="${OUTDIR}" \
-            --llvm-bin-path="${LLVM_BIN_PATH}" \
             --test=mem_intrin.cpp \
             --driver=mem_intrin_main.cpp \
             --output=mem_intrin_O${optlevel}_${attribute}
@@ -37,7 +35,6 @@
             --prefix=Subzero_ \
             --target=x8632 \
             --dir="${OUTDIR}" \
-            --llvm-bin-path="${LLVM_BIN_PATH}" \
             --test=test_arith.cpp \
             --test=test_arith_frem.ll \
             --test=test_arith_sqrt.ll \
@@ -48,7 +45,6 @@
             --prefix=Subzero_ \
             --target=x8632 \
             --dir="${OUTDIR}" \
-            --llvm-bin-path="${LLVM_BIN_PATH}" \
             --test=test_bitmanip.cpp --test=test_bitmanip_intrin.ll \
             --driver=test_bitmanip_main.cpp \
             --output=test_bitmanip_O${optlevel}_${attribute}
@@ -56,7 +52,6 @@
         ./crosstest.py -O${optlevel} --mattr ${attribute} \
             --prefix=Subzero_ --target=x8632 \
             --dir="${OUTDIR}" \
-            --llvm-bin-path="${LLVM_BIN_PATH}" \
             --test=test_calling_conv.cpp \
             --driver=test_calling_conv_main.cpp \
             --output=test_calling_conv_O${optlevel}_${attribute}
@@ -65,7 +60,6 @@
             --prefix=Subzero_ \
             --target=x8632 \
             --dir="${OUTDIR}" \
-            --llvm-bin-path="${LLVM_BIN_PATH}" \
             --test=test_cast.cpp --test=test_cast_to_u1.ll \
             --driver=test_cast_main.cpp \
             --output=test_cast_O${optlevel}_${attribute}
@@ -74,7 +68,6 @@
             --prefix=Subzero_ \
             --target=x8632 \
             --dir="${OUTDIR}" \
-            --llvm-bin-path="${LLVM_BIN_PATH}" \
             --test=test_fcmp.pnacl.ll \
             --driver=test_fcmp_main.cpp \
             --output=test_fcmp_O${optlevel}_${attribute}
@@ -83,7 +76,6 @@
             --prefix=Subzero_ \
             --target=x8632 \
             --dir="${OUTDIR}" \
-            --llvm-bin-path="${LLVM_BIN_PATH}" \
             --test=test_global.cpp \
             --driver=test_global_main.cpp \
             --output=test_global_O${optlevel}_${attribute}
@@ -92,7 +84,6 @@
             --prefix=Subzero_ \
             --target=x8632 \
             --dir="${OUTDIR}" \
-            --llvm-bin-path="${LLVM_BIN_PATH}" \
             --test=test_icmp.cpp --test=test_icmp_i1vec.ll \
             --driver=test_icmp_main.cpp \
             --output=test_icmp_O${optlevel}_${attribute}
@@ -101,7 +92,6 @@
             --prefix=Subzero_ \
             --target=x8632 \
             --dir="${OUTDIR}" \
-            --llvm-bin-path="${LLVM_BIN_PATH}" \
             --test=test_select.ll \
             --driver=test_select_main.cpp \
             --output=test_select_O${optlevel}_${attribute}
@@ -110,7 +100,6 @@
             --prefix=Subzero_ \
             --target=x8632 \
             --dir="${OUTDIR}" \
-            --llvm-bin-path="${LLVM_BIN_PATH}" \
             --test=test_stacksave.c \
             --driver=test_stacksave_main.c \
             --output=test_stacksave_O${optlevel}_${attribute}
@@ -122,7 +111,6 @@
             --prefix=Subzero_ \
             --target=x8632 \
             --dir="${OUTDIR}" \
-            --llvm-bin-path="${LLVM_BIN_PATH}" \
             --test=test_sync_atomic.cpp \
             --crosstest-bitcode=0 \
             --driver=test_sync_atomic_main.cpp \
@@ -131,7 +119,6 @@
         ./crosstest.py -O${optlevel} --mattr ${attribute} \
             --prefix=Subzero_ --target=x8632 \
             --dir="${OUTDIR}" \
-            --llvm-bin-path="${LLVM_BIN_PATH}" \
             --test=test_vector_ops.ll \
             --driver=test_vector_ops_main.cpp \
             --output=test_vector_ops_O${optlevel}_${attribute}
diff --git a/pydir/build-pnacl-ir.py b/pydir/build-pnacl-ir.py
index 9395fc7..608c574 100755
--- a/pydir/build-pnacl-ir.py
+++ b/pydir/build-pnacl-ir.py
@@ -2,35 +2,24 @@
 
 import argparse
 import os
-import sys
 import tempfile
 from utils import shellcmd
+from utils import FindBaseNaCl
 
 if __name__ == '__main__':
     argparser = argparse.ArgumentParser()
     argparser.add_argument('cfile', nargs='+', type=str,
         help='C file(s) to convert')
-    argparser.add_argument('--nacl_sdk_root', nargs='?', type=str,
-        help='Path to NACL_SDK_ROOT')
     argparser.add_argument('--dir', nargs='?', type=str, default='.',
                            help='Output directory')
     argparser.add_argument('--disable-verify', action='store_true')
     args = argparser.parse_args()
 
-    nacl_sdk_root = os.environ.get('NACL_SDK_ROOT', None)
-    if args.nacl_sdk_root:
-        nacl_sdk_root = os.path.expanduser(args.nacl_sdk_root)
-
-    if not nacl_sdk_root or not os.path.exists(nacl_sdk_root):
-        print '''\
-Please set the NACL_SDK_ROOT environment variable or pass the path through
---nacl_sdk_root to point to a valid Native Client SDK installation.'''
-        sys.exit(1)
-
-    includes_path = os.path.join(nacl_sdk_root, 'include')
-    toolchain_path = os.path.join(nacl_sdk_root, 'toolchain', 'linux_pnacl')
-    clang_path = os.path.join(toolchain_path, 'bin64', 'pnacl-clang')
-    opt_path = os.path.join(toolchain_path, 'host_x86_64', 'bin', 'opt')
+    nacl_root = FindBaseNaCl()
+    # Prepend bin to $PATH.
+    os.environ['PATH'] = (
+        nacl_root + '/toolchain/linux_x86/pnacl_newlib/bin' + os.pathsep +
+        os.pathsep + os.environ['PATH'])
 
     tempdir = tempfile.mkdtemp()
 
@@ -40,11 +29,10 @@
         pnaclname = basename + '.pnacl.ll'
         pnaclname = os.path.join(args.dir, pnaclname)
 
-        shellcmd(clang_path + ' -O2 -I{0} -c {1} -o {2}'.format(
-            includes_path, cname, llname))
-        shellcmd(opt_path +
-            ' -pnacl-abi-simplify-preopt -pnacl-abi-simplify-postopt' +
-            ('' if args.disable_verify else
-             ' -verify-pnaclabi-module -verify-pnaclabi-functions') +
-            ' -pnaclabi-allow-debug-metadata -disable-simplify-libcalls'
-            ' {0} -S -o {1}'.format(llname, pnaclname))
+        shellcmd('pnacl-clang -O2 -c {0} -o {1}'.format(cname, llname))
+        shellcmd('pnacl-opt ' +
+                 '-pnacl-abi-simplify-preopt -pnacl-abi-simplify-postopt' +
+                 ('' if args.disable_verify else
+                  ' -verify-pnaclabi-module -verify-pnaclabi-functions') +
+                 ' -pnaclabi-allow-debug-metadata'
+                 ' {0} -S -o {1}'.format(llname, pnaclname))
diff --git a/pydir/utils.py b/pydir/utils.py
index 57849a4..33b58e9 100644
--- a/pydir/utils.py
+++ b/pydir/utils.py
@@ -1,3 +1,4 @@
+import os
 import subprocess
 import sys
 
@@ -10,3 +11,12 @@
     stdout_result = subprocess.check_output(command, shell=True)
     if echo: sys.stdout.write(stdout_result)
     return stdout_result
+
+def FindBaseNaCl():
+    """Find the base native_client/ directory."""
+    nacl = 'native_client'
+    path_list = os.getcwd().split(os.sep)
+    if nacl not in path_list:
+        return None
+    last_index = len(path_list) - path_list[::-1].index(nacl)
+    return os.sep.join(path_list[:last_index])
diff --git a/tests_lit/lit.cfg b/tests_lit/lit.cfg
index 1edf2f9..ba26097 100644
--- a/tests_lit/lit.cfg
+++ b/tests_lit/lit.cfg
@@ -42,8 +42,8 @@
 config.substitutions.append(('%llvm2ice', llvm2icetool))
 config.substitutions.append(('%szdiff', os.path.join(bin_root, 'szdiff.py')))
 
-llvmbintools = [r"\bFileCheck\b", r"\bllvm-mc\b", r"\bllvm-objdump\b",
-                r"\bnot\b", r"\bpnacl-freeze\b"]
+llvmbintools = [r"\bFileCheck\b", r"\bllvm-as\b", r"\bllvm-mc\b",
+                r"\bllvm-objdump\b", r"\bnot\b", r"\bpnacl-freeze\b"]
 
 for tool in llvmbintools:
   # The re.sub() line is adapted from one of LLVM's lit.cfg files.
