diff --git a/Makefile b/Makefile
index 4938b24..51e265b 100644
--- a/Makefile
+++ b/Makefile
@@ -3,6 +3,7 @@ TOP := $(PWD)
 
 PREFIX   ?= $(TOP)/inst
 BUILDDIR ?= $(TOP)/build
+LIBDIR   ?= $(PREFIX)/lib
 
 .PHONY: all
 all: install
@@ -21,7 +22,7 @@ rem_build:
 
 .PHONY: install
 install:
-	$(MAKE)  -C src  PREFIX=$(PREFIX)  install
+	$(MAKE)  -C src  PREFIX=$(PREFIX)  LIBDIR=$(LIBDIR)  install
 
 # In the future, this will be much more expansive, and run the actual test
 # suite once it's open sourced.
diff --git a/src/Makefile b/src/Makefile
index 1daeb3a..b5a1146 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -4,6 +4,7 @@ TOP := $(PWD)/..
 include $(TOP)/platform.mk
 
 PREFIX?=$(TOP)/inst
+LIBDIR?=$(PREFIX)/lib
 
 ifndef NO_DEPS_CHECKS
 CC_TOOLS=$(CC) $(CXX) $(LD)
@@ -45,17 +46,17 @@ all: install
 
 .PHONY: install clean full_clean
 install clean full_clean:
-	$(MAKE)  -C vendor/stp   PREFIX=$(PREFIX)  $@
-	$(MAKE)  -C vendor/yices PREFIX=$(PREFIX)  $@
-	$(MAKE)  -C vendor/htcl  PREFIX=$(PREFIX)  $@
+	$(MAKE)  -C vendor/stp   PREFIX=$(PREFIX)  LIBDIR=$(LIBDIR)  $@
+	$(MAKE)  -C vendor/yices PREFIX=$(PREFIX)  LIBDIR=$(LIBDIR)  $@
+	$(MAKE)  -C vendor/htcl  PREFIX=$(PREFIX)  LIBDIR=$(LIBDIR)  $@
 	# we need to build targets from here sequentially, as they operate in the same workspace
-	$(MAKE)  -C comp -j1   PREFIX=$(PREFIX)  $@
-	$(MAKE)  -C Libraries  PREFIX=$(PREFIX)  $@
-	$(MAKE)  -C exec       PREFIX=$(PREFIX)  $@
-	$(MAKE)  -C VPI        PREFIX=$(PREFIX)  $@
-	$(MAKE)  -C Verilog    PREFIX=$(PREFIX)  $@
-	$(MAKE)  -C Verilog.Quartus  PREFIX=$(PREFIX)  $@
-	$(MAKE)  -C Verilog.Vivado   PREFIX=$(PREFIX)  $@
-	$(MAKE)  -C bluetcl    PREFIX=$(PREFIX)  $@
-	$(MAKE)  -C bluesim    PREFIX=$(PREFIX)  $@
+	$(MAKE)  -C comp -j1   PREFIX=$(PREFIX)  LIBDIR=$(LIBDIR)  $@
+	$(MAKE)  -C Libraries  PREFIX=$(PREFIX)  LIBDIR=$(LIBDIR)  $@
+	$(MAKE)  -C exec       PREFIX=$(PREFIX)  LIBDIR=$(LIBDIR)  $@
+	$(MAKE)  -C VPI        PREFIX=$(PREFIX)  LIBDIR=$(LIBDIR)  $@
+	$(MAKE)  -C Verilog    PREFIX=$(PREFIX)  LIBDIR=$(LIBDIR)  $@
+	$(MAKE)  -C Verilog.Quartus  PREFIX=$(PREFIX)  LIBDIR=$(LIBDIR)  $@
+	$(MAKE)  -C Verilog.Vivado   PREFIX=$(PREFIX)  LIBDIR=$(LIBDIR)  $@
+	$(MAKE)  -C bluetcl    PREFIX=$(PREFIX)  LIBDIR=$(LIBDIR)  $@
+	$(MAKE)  -C bluesim    PREFIX=$(PREFIX)  LIBDIR=$(LIBDIR)  $@
 
diff --git a/src/VPI/Makefile b/src/VPI/Makefile
index 698037b..0070714 100644
--- a/src/VPI/Makefile
+++ b/src/VPI/Makefile
@@ -6,7 +6,8 @@ include $(TOP)/platform.mk
 INSTALL ?= install
 
 PREFIX?=$(TOP)/inst
-INSTALLDIR=$(PREFIX)/lib/VPI
+LIBDIR?=$(PREFIX)/lib
+INSTALLDIR=$(LIBDIR)/VPI
 
 .PHONY:	all
 all: install
diff --git a/src/Verilog/common.mk b/src/Verilog/common.mk
index ef29190..06b3553 100644
--- a/src/Verilog/common.mk
+++ b/src/Verilog/common.mk
@@ -14,7 +14,8 @@ INSTALL?=install -c
 RM = rm -f
 
 PREFIX?=$(TOP)/inst
-INSTALLDIR=$(PREFIX)/lib/$(INSTALL_NAME)
+LIBDIR?=$(PREFIX)/lib
+INSTALLDIR=$(LIBDIR)/$(INSTALL_NAME)
 
 .PHONY: all
 all: test
diff --git a/src/bluesim/Makefile b/src/bluesim/Makefile
index 60f2fd9..3e66e5a 100644
--- a/src/bluesim/Makefile
+++ b/src/bluesim/Makefile
@@ -4,7 +4,8 @@ TOP:=$(PWD)/../..
 INSTALL ?= install
 
 PREFIX?=$(TOP)/inst
-INSTALLDIR=$(PREFIX)/lib/Bluesim
+LIBDIR?=$(PREFIX)/lib
+INSTALLDIR=$(LIBDIR)/Bluesim
 
 COMPDIR=$(TOP)/src/comp
 
diff --git a/src/bluetcl/Makefile b/src/bluetcl/Makefile
index 80d6050..34d877b 100644
--- a/src/bluetcl/Makefile
+++ b/src/bluetcl/Makefile
@@ -2,7 +2,8 @@ PWD:=$(shell pwd)
 TOP:=$(PWD)/../..
 
 PREFIX?=$(TOP)/inst
-INSTALLDIR = $(PREFIX)/lib/tcllib/bluespec
+LIBDIR?=$(PREFIX)/lib
+INSTALLDIR = $(LIBDIR)/tcllib/bluespec
 
 FILES = \
 	tclIndex \
diff --git a/src/bluetcl/bluespec.tcl b/src/bluetcl/bluespec.tcl
index 4ee8e86..e243531 100644
--- a/src/bluetcl/bluespec.tcl
+++ b/src/bluetcl/bluespec.tcl
@@ -129,6 +129,7 @@ proc Bluetcl::initBluespec {} {
 utils::donothing
 lappend auto_path /usr/share
 lappend auto_path /usr/lib
+lappend auto_path /usr/lib64
 
 if { [catch Bluetcl::initBluespec err] } {
     puts "Error in initialization file bluespec.tcl: $err" 
diff --git a/src/comp/Makefile b/src/comp/Makefile
index 58b81d7..6f113a2 100644
--- a/src/comp/Makefile
+++ b/src/comp/Makefile
@@ -14,6 +14,7 @@ RM = rm -f
 LN = ln -sf
 
 FIND = find
+SED = sed
 
 # -----
 # Options
@@ -37,6 +38,7 @@ export NOUPDATEBUILDVERSION
 
 # PREFIX is where things are installed
 PREFIX?=$(TOP)/inst
+LIBDIR=$(PREFIX)/lib
 BINDIR=$(PREFIX)/bin
 
 # Top-level of where intermediate GHC files are stored
@@ -389,7 +391,8 @@ $(BINDIR)/core/%: %
 
 $(BINDIR)/%: wrapper.sh $(BINDIR)/core/%
 	mkdir -p -m 755 $(BINDIR)
-	$(INSTALL) -m 755 wrapper.sh $(BINDIR)/$(@F)
+	$(SED) "s:^LIBDIR=.*$$:LIBDIR=\"$(abspath $(LIBDIR))\":g" wrapper.sh > $(BUILDDIR)/$(@F)
+	$(INSTALL) -m 755 $(BUILDDIR)/$(@F) $(BINDIR)/$(@F)
 
 .PHONY: install-bsc
 install-bsc: $(addprefix $(BINDIR)/,$(BSCEXES))
diff --git a/src/comp/wrapper.sh b/src/comp/wrapper.sh
index 656e9a0..1d5cf47 100755
--- a/src/comp/wrapper.sh
+++ b/src/comp/wrapper.sh
@@ -5,9 +5,23 @@
 ABSNAME="$(cd "${0%/*}"; echo $PWD)/${0##*/}"
 SCRIPTNAME="${ABSNAME##*/}"
 BINDIR="${ABSNAME%/*}"
+# LIBDIR will be replaced to user defined path after build
+LIBDIR="${BINDIR}/../lib"
+
+# If missing LIBDIR, search one.
+# This is unlikely to happen unless the user moves the file after installation.
+if [ ! -d ${LIBDIR} ]; then
+    LIBDIR="$(find ${BINDIR}/.. -maxdepth 10 -type d -name 'SAT' -print -quit)"
+    if [ ! "x${LIBDIR}" = "x"  ]; then
+        LIBDIR="${LIBDIR}/.."
+    else
+        echo "Error Bluespec library path not found."
+        exit 1;
+    fi
+fi
 
 # Set BLUESPECDIR based on the location
-BLUESPECDIR="$(cd ${BINDIR}/../lib; echo $PWD)"
+BLUESPECDIR="$(cd ${LIBDIR}; echo $PWD)"
 export BLUESPECDIR
 
 # Add the dynamically-linked SAT libraries to the load path
diff --git a/src/exec/Makefile b/src/exec/Makefile
index 9a16e22..02536cc 100644
--- a/src/exec/Makefile
+++ b/src/exec/Makefile
@@ -4,7 +4,8 @@ TOP:=$(PWD)/../..
 INSTALL?= install
 
 PREFIX?=$(TOP)/inst
-INSTALLDIR=$(PREFIX)/lib/exec
+LIBDIR?=$(PREFIX)/lib
+INSTALLDIR=$(LIBDIR)/exec
 
 .PHONY: install
 install:
diff --git a/src/vendor/stp/Makefile b/src/vendor/stp/Makefile
index 092995d..a520184 100644
--- a/src/vendor/stp/Makefile
+++ b/src/vendor/stp/Makefile
@@ -2,6 +2,7 @@ TOP=../../..
 include $(TOP)/platform.mk
 
 PREFIX?=$(TOP)/inst
+LIBDIR?=$(PREFIX)/lib
 
 .PHONY: all install clean full_clean
 
@@ -22,8 +23,8 @@ all: install
 install:
 	$(MAKE) -C $(SRC) install
 	ln -fsn HaskellIfc include_hs
-	install -m 755 -d $(PREFIX)/lib/SAT
-	install -m 644 lib/$(SNAME) $(PREFIX)/lib/SAT
+	install -m 755 -d $(LIBDIR)/SAT
+	install -m 644 lib/$(SNAME) $(LIBDIR)/SAT
 
 clean:
 	$(MAKE) -C $(SRC) clean
diff --git a/src/vendor/yices/Makefile b/src/vendor/yices/Makefile
index b8dbdea..8d4776c 100644
--- a/src/vendor/yices/Makefile
+++ b/src/vendor/yices/Makefile
@@ -2,6 +2,7 @@ TOP:=../../..
 include $(TOP)/platform.mk
 
 PREFIX?=$(TOP)/inst
+LIBDIR?=$(PREFIX)/lib
 
 .PHONY: all clean full_clean install
 
@@ -22,8 +23,8 @@ install:
 	ln -fsn $(VERSION)/include
 	ln -fsn $(VERSION)/lib
 	ln -fsn $(VERSION)/include_hs
-	install -m 755 -d $(PREFIX)/lib/SAT
-	install -m 644 lib/$(SNAME) $(PREFIX)/lib/SAT
+	install -m 755 -d $(LIBDIR)/SAT
+	install -m 644 lib/$(SNAME) $(LIBDIR)/SAT
 
 clean:
 	$(MAKE) -C $(VERSION) clean
