diff --git a/hpvm/projects/hpvm-tensor-rt/CMakeLists.txt b/hpvm/projects/hpvm-tensor-rt/CMakeLists.txt
index 3b1fbf8f930ace7101820c92111018b8c862189e..489d38313bb0f82d97f7a4590af59211e898f02b 100644
--- a/hpvm/projects/hpvm-tensor-rt/CMakeLists.txt
+++ b/hpvm/projects/hpvm-tensor-rt/CMakeLists.txt
@@ -1,5 +1,5 @@
 cmake_minimum_required (VERSION 3.17)
-project (hpvm-tensor-rt)
+project(hpvm-tensor-rt)
 find_package(CUDA 6.5 REQUIRED)
 set(CUDA_SEPARABLE_COMPILATION ON CACHE BOOL "")
 set(CUDA_PROPAGATE_HOST_FLAGS OFF)
@@ -71,16 +71,18 @@ foreach(FILE ${RUNTIME_SRCS_FILENAME})
   list(APPEND RUNTIME_SRCS "tensor_runtime/src/${FILE}")
 endforeach()
 
-# Default link libraries
-find_library(GPU_PROFILER_LIB
-  NAMES libgpu_profiler.a
-  HINTS ../gpu_profiler/lib
-)
-find_library(SOC_SIMULATOR_LIB
-  NAMES libpromise_profiler.a
-  HINTS ../soc_simulator/lib
-)
-set(LINK_LIBS cudnn cufft stdc++fs curand)
+# Compile gpu_profiler and soc_simulator
+# Conditionally add gpu_profiler project if we're building independently
+# (not building the whole hpvm)
+get_filename_component(root_dir ${CMAKE_SOURCE_DIR} REALPATH)
+get_filename_component(our_dir ${CMAKE_CURRENT_SOURCE_DIR} REALPATH)
+if(${root_dir} STREQUAL ${our_dir})
+  message("Compiling hpvm-tensor-rt independently")
+  message("Also compiling gpu_profiler and soc_simulator")
+  add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../gpu_profiler ${CMAKE_CURRENT_BINARY_DIR}/gpu_profiler)
+  add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../soc_simulator ${CMAKE_CURRENT_BINARY_DIR}/soc_simulator)
+endif()
+set(LINK_LIBS gpu_profiler promise_profiler cudnn cufft stdc++fs curand)
 if(USE_GFLAGS)
   list(APPEND LINK_LIBS gflags)
 endif()