diff --git a/hpvm/CMakeLists.txt b/hpvm/CMakeLists.txt
index 431c042b634af412399ea2a8902592cfe6e37d88..fcfaf264a64d52bfe13e0023fe92ad12b7cf2016 100644
--- a/hpvm/CMakeLists.txt
+++ b/hpvm/CMakeLists.txt
@@ -8,10 +8,9 @@ message(STATUS "CUDA Architecture: ${CMAKE_CUDA_ARCHITECTURES}")
 # find_package will use the auxillary cmake/Find*.cmake we provide
 list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
 find_package(CUDNN 7 EXACT REQUIRED)  # CUDNN_INCLUDE_PATH, CUDNN_LIBRARY_DIR and CUDNN::cudnn
+find_package(OpenCL REQUIRED)  # Defines ${OpenCL_INCLUDE_DIRS} and ${OpenCL_LIBRARY}
 
 include_directories(./include/)
-# find_package will use the auxillary cmake/Find*.cmake we provide
-list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
 
 # Generate TENSOR_RT_PREFIX into config.h
 set(TENSOR_RT_PREFIX ${CMAKE_LIBRARY_OUTPUT_DIRECTORY})
diff --git a/hpvm/projects/hpvm-rt/CMakeLists.txt b/hpvm/projects/hpvm-rt/CMakeLists.txt
index 6efd8d3d0a9d86236adc87657fb68b782f3daaa0..ad78c35828cf9be9f66f23301fbe4d207222d4d1 100644
--- a/hpvm/projects/hpvm-rt/CMakeLists.txt
+++ b/hpvm/projects/hpvm-rt/CMakeLists.txt
@@ -3,8 +3,6 @@ add_definitions(-DNUM_CORES=8)
 SET(CMAKE_C_COMPILER ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/clang)
 SET(CMAKE_CXX_COMPILER ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/clang++)
 SET(CMAKE_CXX_STANDARD 11)
-# Defines ${OpenCL_INCLUDE_DIRS} and ${OpenCL_LIBRARY} if found
-find_package(OpenCL REQUIRED)
 
 # This puts libhpvm-rt.a in lib/ which we don't care about
 # we want ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/hpvm-rt.dir/hpvm-rt.cpp.o
diff --git a/hpvm/tools/py-approxhpvm/CMakeLists.txt b/hpvm/tools/py-approxhpvm/CMakeLists.txt
index 4d48fe6be9e539cbb9f3ad609a44331d0880bda7..f9d9d6ec60825fc1e858a28e0598189fd6b1cda5 100644
--- a/hpvm/tools/py-approxhpvm/CMakeLists.txt
+++ b/hpvm/tools/py-approxhpvm/CMakeLists.txt
@@ -3,16 +3,20 @@
 # main.py.in (to become approxhpvm.py) requires the following variables:
 # LLVM_PROJECT_DIR, LLVM_BUILD_DIR
 # TRT_PATH, TRT_INCLUDE_DIRS, TRT_LINK_DIRS, TRT_LINK_LIBS
+# DIRECT_LINK_LIBS
 # AVAILABLE_PASSES, HPVM_RT_PATH
 
 set(LLVM_PROJECT_DIR ${CMAKE_SOURCE_DIR})
 set(LLVM_BUILD_DIR ${CMAKE_BINARY_DIR})
 
-set(TRT_PATH "$<TARGET_FILE:tensor_runtime>")
 get_target_property(TRT_INCLUDE_DIRS tensor_runtime INCLUDE_DIRECTORIES)
 get_target_property(TRT_LINK_DIRS tensor_runtime TRT_LINK_DIRS)
 get_target_property(TRT_LINK_LIBS tensor_runtime TRT_LINK_LIBS)
 
+# This is defined globally. We need to manually link to this
+# because OpenCL functions are injected by HPVM Passes.
+set(DIRECT_LINK_LIBS ${OpenCL_LIBRARY} "$<TARGET_FILE:tensor_runtime>")
+
 # The hpvm-rt runtime
 # This has to be explicitly set as hpvm-rt.bc is created in a custom_target
 # and does not export its file location.
diff --git a/hpvm/tools/py-approxhpvm/main.py.in b/hpvm/tools/py-approxhpvm/main.py.in
index 7f5459d9e68f1e084c114dc1c39c0312726059d1..7b211911643c64d8bf2c34ef8a43e3ac98cdd88a 100644
--- a/hpvm/tools/py-approxhpvm/main.py.in
+++ b/hpvm/tools/py-approxhpvm/main.py.in
@@ -10,10 +10,10 @@ HPVM_PROJECT_DIR = Path("@LLVM_PROJECT_DIR@") / "tools/hpvm"
 LLVM_BUILD_BIN = Path("@LLVM_BUILD_DIR@") / "bin"
 
 # Directories to include
-TRT_PATH = Path("@TRT_PATH@")
 TRT_INCLUDE_DIRS = "@TRT_INCLUDE_DIRS@".split(";")
 TRT_LINK_DIRS = [Path(s) for s in "@TRT_LINK_DIRS@".split(";")]
 TRT_LINK_LIBS = "@TRT_LINK_LIBS@".split(";")
+DIRECT_LINK_LIBS = "@DIRECT_LINK_LIBS@".split(";")
 
 AVAILABLE_PASSES = "@AVAILABLE_PASSES@".split(";")
 HPVM_RT_PATH = "@HPVM_RT_PATH@"
@@ -117,13 +117,21 @@ def link_binary(src_file: PathLike, target_file: PathLike) -> List[str]:
         match = re.match(r"lib(.*)\.so", libname)
         return libname if match is None else match.group(1)
 
+    link_dirs, link_libnames = [], []
+    for lib in DIRECT_LINK_LIBS:
+        lib = Path(lib)
+        link_dirs.append(lib.parent)
+        link_libnames.append(drop_suffix(lib.name))
+    link_dirs += TRT_LINK_DIRS
+    link_libnames += TRT_LINK_LIBS
+
     linker_dir_flags = []
-    for path in TRT_LINK_DIRS:
+    for path in link_dirs:
         linker_dir_flags.extend([f"-L{path}", f"-Wl,-rpath={path}"])
-    linker_lib_flags = [f"-l{drop_suffix(lib)}" for lib in TRT_LINK_LIBS]
+    linker_lib_flags = [f"-l{drop_suffix(lib)}" for lib in link_libnames]
     return [
-        str(LLVM_BUILD_BIN / "clang++"), str(src_file), str(TRT_PATH), "-o", str(target_file),
-        *linker_dir_flags, *linker_lib_flags
+        str(LLVM_BUILD_BIN / "clang++"), str(src_file),
+        "-o", str(target_file), *linker_dir_flags, *linker_lib_flags
     ]