From b8dc6fc1c253211cfbe9000a08dd1bee7a89b4dd Mon Sep 17 00:00:00 2001
From: Yifan Zhao <yifanz16@illinois.edu>
Date: Thu, 23 Jan 2020 19:20:05 -0600
Subject: [PATCH] Removed hardcoding of hpvm-rt.bc path

---
 .../Transforms/DFG2LLVM_NVPTX/CMakeLists.txt  |  2 ++
 .../DFG2LLVM_NVPTX/DFG2LLVM_NVPTX.cpp         | 22 +++++++++++--------
 .../Transforms/DFG2LLVM_X86/CMakeLists.txt    |  2 ++
 .../Transforms/DFG2LLVM_X86/DFG2LLVM_X86.cpp  | 19 +++++++++-------
 hpvm/lib/Transforms/GenHPVM/CMakeLists.txt    |  2 ++
 hpvm/lib/Transforms/GenHPVM/GenHPVM.cpp       | 19 +++++++++-------
 6 files changed, 41 insertions(+), 25 deletions(-)

diff --git a/hpvm/lib/Transforms/DFG2LLVM_NVPTX/CMakeLists.txt b/hpvm/lib/Transforms/DFG2LLVM_NVPTX/CMakeLists.txt
index ce2d4c80fd..832f6334a4 100644
--- a/hpvm/lib/Transforms/DFG2LLVM_NVPTX/CMakeLists.txt
+++ b/hpvm/lib/Transforms/DFG2LLVM_NVPTX/CMakeLists.txt
@@ -2,6 +2,8 @@ if(WIN32 OR CYGWIN)
   set(LLVM_LINK_COMPONENTS Core Support)
 endif()
 
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DLLVM_BUILD_DIR=${PROJECT_BINARY_DIR}")
+
 add_llvm_library( LLVMDFG2LLVM_NVPTX
   MODULE
   DFG2LLVM_NVPTX.cpp
diff --git a/hpvm/lib/Transforms/DFG2LLVM_NVPTX/DFG2LLVM_NVPTX.cpp b/hpvm/lib/Transforms/DFG2LLVM_NVPTX/DFG2LLVM_NVPTX.cpp
index f582a9ab6a..d250562043 100644
--- a/hpvm/lib/Transforms/DFG2LLVM_NVPTX/DFG2LLVM_NVPTX.cpp
+++ b/hpvm/lib/Transforms/DFG2LLVM_NVPTX/DFG2LLVM_NVPTX.cpp
@@ -40,6 +40,14 @@
 
 #include <sstream>
 
+#ifndef LLVM_BUILD_DIR
+#error LLVM_BUILD_DIR is not defined
+#endif
+
+#define STR_VALUE(X) #X
+#define STRINGIFY(X) STR_VALUE(X)
+#define LLVM_BUILD_DIR_STR STRINGIFY(LLVM_BUILD_DIR)
+
 using namespace llvm;
 using namespace builddfg;
 using namespace dfg2llvm;
@@ -254,14 +262,10 @@ void CGT_NVPTX::initRuntimeAPI() {
   // Load Runtime API Module
   SMDiagnostic Err;
 
-  char *LLVM_SRC_ROOT = getenv("LLVM_SRC_ROOT");
-  assert(LLVM_SRC_ROOT != NULL && "Define LLVM_SRC_ROOT environment variable!");
-
-  Twine llvmSrcRoot = LLVM_SRC_ROOT;
-  Twine runtimeAPI =
-      llvmSrcRoot + "/../build/tools/hpvm/projects/hpvm-rt/hpvm-rt.bc";
+  std::string runtimeAPI = std::string(LLVM_BUILD_DIR_STR) +
+                           "/tools/hpvm/projects/hpvm-rt/hpvm-rt.bc";
 
-  runtimeModule = parseIRFile(runtimeAPI.str(), Err, M.getContext());
+  runtimeModule = parseIRFile(runtimeAPI, Err, M.getContext());
   if (runtimeModule == nullptr) {
     DEBUG(errs() << Err.getMessage() << " " << runtimeAPI << "\n");
     assert(false && "couldn't parse runtime");
@@ -1620,8 +1624,8 @@ void CGT_NVPTX::codeGen(DFLeafNode *N) {
     }
     // check that addressspace is 1
     //	  if (GEPIaddrspace != 1) {
-    //			// does not fit this pattern - addrspace of pointer argument
-    //is not global 			continue;
+    //			// does not fit this pattern - addrspace of pointer
+    //argument is not global 			continue;
     //		}
     if (!(GEPI->hasOneUse())) {
       // does not fit this pattern - more than one uses
diff --git a/hpvm/lib/Transforms/DFG2LLVM_X86/CMakeLists.txt b/hpvm/lib/Transforms/DFG2LLVM_X86/CMakeLists.txt
index b79c6a3bf9..0a3a225f19 100644
--- a/hpvm/lib/Transforms/DFG2LLVM_X86/CMakeLists.txt
+++ b/hpvm/lib/Transforms/DFG2LLVM_X86/CMakeLists.txt
@@ -2,6 +2,8 @@ if(WIN32 OR CYGWIN)
   set(LLVM_LINK_COMPONENTS Core Support)
 endif()
 
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DLLVM_BUILD_DIR=${PROJECT_BINARY_DIR}")
+
 add_llvm_library( LLVMDFG2LLVM_X86
   MODULE
   DFG2LLVM_X86.cpp
diff --git a/hpvm/lib/Transforms/DFG2LLVM_X86/DFG2LLVM_X86.cpp b/hpvm/lib/Transforms/DFG2LLVM_X86/DFG2LLVM_X86.cpp
index 21adabf4eb..c0e2b715fa 100644
--- a/hpvm/lib/Transforms/DFG2LLVM_X86/DFG2LLVM_X86.cpp
+++ b/hpvm/lib/Transforms/DFG2LLVM_X86/DFG2LLVM_X86.cpp
@@ -21,6 +21,14 @@
 #include "llvm/Transforms/Utils/Cloning.h"
 #include "llvm/Transforms/Utils/ValueMapper.h"
 
+#ifndef LLVM_BUILD_DIR
+#error LLVM_BUILD_DIR is not defined
+#endif
+
+#define STR_VALUE(X) #X
+#define STRINGIFY(X) STR_VALUE(X)
+#define LLVM_BUILD_DIR_STR STRINGIFY(LLVM_BUILD_DIR)
+
 using namespace llvm;
 using namespace builddfg;
 using namespace dfg2llvm;
@@ -157,15 +165,10 @@ void CGT_X86::initRuntimeAPI() {
   // Load Runtime API Module
   SMDiagnostic Err;
 
-  char *LLVM_SRC_ROOT = getenv("LLVM_SRC_ROOT");
-  assert(LLVM_SRC_ROOT != NULL && "Define LLVM_SRC_ROOT environment variable!");
-
-  Twine llvmSrcRoot = LLVM_SRC_ROOT;
-  Twine runtimeAPI =
-      llvmSrcRoot + "/../build/tools/hpvm/projects/hpvm-rt/hpvm-rt.bc";
-
-  runtimeModule = parseIRFile(runtimeAPI.str(), Err, M.getContext());
+  std::string runtimeAPI = std::string(LLVM_BUILD_DIR_STR) +
+                           "/tools/hpvm/projects/hpvm-rt/hpvm-rt.bc";
 
+  runtimeModule = parseIRFile(runtimeAPI, Err, M.getContext());
   if (runtimeModule == nullptr) {
     DEBUG(errs() << Err.getMessage() << " " << runtimeAPI << "\n");
     assert(false && "couldn't parse runtime");
diff --git a/hpvm/lib/Transforms/GenHPVM/CMakeLists.txt b/hpvm/lib/Transforms/GenHPVM/CMakeLists.txt
index 967766e705..fc4c9fc5a9 100644
--- a/hpvm/lib/Transforms/GenHPVM/CMakeLists.txt
+++ b/hpvm/lib/Transforms/GenHPVM/CMakeLists.txt
@@ -2,6 +2,8 @@ if(WIN32 OR CYGWIN)
   set(LLVM_LINK_COMPONENTS Core Support)
 endif()
 
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DLLVM_BUILD_DIR=${PROJECT_BINARY_DIR}")
+
 add_llvm_library( LLVMGenHPVM
   MODULE
   GenHPVM.cpp
diff --git a/hpvm/lib/Transforms/GenHPVM/GenHPVM.cpp b/hpvm/lib/Transforms/GenHPVM/GenHPVM.cpp
index 738b39905b..d6ad357a33 100644
--- a/hpvm/lib/Transforms/GenHPVM/GenHPVM.cpp
+++ b/hpvm/lib/Transforms/GenHPVM/GenHPVM.cpp
@@ -32,6 +32,14 @@
     }                                                                          \
   } while (0)
 
+#ifndef LLVM_BUILD_DIR
+#error LLVM_BUILD_DIR is not defined
+#endif
+
+#define STR_VALUE(X) #X
+#define STRINGIFY(X) STR_VALUE(X)
+#define LLVM_BUILD_DIR_STR STRINGIFY(LLVM_BUILD_DIR)
+
 using namespace llvm;
 using namespace hpvmUtils;
 
@@ -263,16 +271,11 @@ bool GenHPVM::runOnModule(Module &M) {
   // Load Runtime API Module
   SMDiagnostic Err;
 
-  char *LLVM_SRC_ROOT = getenv("LLVM_SRC_ROOT");
-  assert(LLVM_SRC_ROOT != NULL && "Define LLVM_SRC_ROOT environment variable!");
-
-  Twine llvmSrcRoot = LLVM_SRC_ROOT;
-  Twine runtimeAPI =
-      llvmSrcRoot + "/../build/tools/hpvm/projects/hpvm-rt/hpvm-rt.bc";
-  DEBUG(errs() << llvmSrcRoot << "\n");
+  std::string runtimeAPI = std::string(LLVM_BUILD_DIR_STR) +
+                           "/tools/hpvm/projects/hpvm-rt/hpvm-rt.bc";
 
   std::unique_ptr<Module> runtimeModule =
-      parseIRFile(runtimeAPI.str(), Err, M.getContext());
+      parseIRFile(runtimeAPI, Err, M.getContext());
 
   if (runtimeModule == NULL) {
     DEBUG(errs() << Err.getMessage() << " " << runtimeAPI << "\n");
-- 
GitLab