Update Makefile
diff --git a/Makefile b/Makefile
index 6006565..e3298a4 100644
--- a/Makefile
+++ b/Makefile
@@ -14,7 +14,8 @@
 #
 # SPDX-License-Identifier: Apache-2.0
 
-CARAVEL_ROOT?=caravel
+CARAVEL_ROOT?=$(PWD)/caravel
+PRECHECK_ROOT?=${HOME}/precheck
 SIM ?= RTL
 
 # Install lite version of caravel, (1): caravel-lite, (0): caravel
@@ -23,11 +24,11 @@
 ifeq ($(CARAVEL_LITE),1) 
 	CARAVEL_NAME := caravel-lite
 	CARAVEL_REPO := https://github.com/efabless/caravel-lite 
-	CARAVEL_COMMIT := main
+	CARAVEL_BRANCH := main
 else
 	CARAVEL_NAME := caravel
 	CARAVEL_REPO := https://github.com/efabless/caravel 
-	CARAVEL_COMMIT := master
+	CARAVEL_BRANCH := master
 endif
 
 # Install caravel as submodule, (1): submodule, (0): clone
@@ -74,7 +75,9 @@
 install:
 ifeq ($(SUBMODULE),1)
 	@echo "Installing $(CARAVEL_NAME) as a submodule.."
-	@if [ ! -d $(CARAVEL_ROOT) ]; then git submodule add --name $(CARAVEL_NAME) $(CARAVEL_REPO) $(CARAVEL_ROOT); fi
+# Convert CARAVEL_ROOT to relative path because .gitmodules doesn't accept '/'
+	$(eval CARAVEL_PATH := $(shell realpath --relative-to=$(shell pwd) $(CARAVEL_ROOT)))
+	@if [ ! -d $(CARAVEL_ROOT) ]; then git submodule add --name $(CARAVEL_NAME) $(CARAVEL_REPO) $(CARAVEL_PATH); fi
 	@git submodule update --init
 	@cd $(CARAVEL_ROOT); git checkout $(CARAVEL_HASH)
 	$(MAKE) simlink
@@ -87,21 +90,27 @@
 # Create symbolic links to caravel's main files
 .PHONY: simlink
 simlink: check-caravel
+### Symbolic links relative path to $CARAVEL_ROOT 
+	$(eval MAKEFILE_PATH := $(shell realpath --relative-to=openlane $(CARAVEL_ROOT)/openlane/Makefile))
+	$(eval PIN_CFG_PATH  := $(shell realpath --relative-to=openlane/user_project_wrapper $(CARAVEL_ROOT)/openlane/user_project_wrapper_empty/pin_order.cfg))
 	mkdir -p openlane
 	mkdir -p openlane/user_project_wrapper
 	cd openlane &&\
-	ln -sf ../$(CARAVEL_ROOT)/openlane/Makefile Makefile
+	ln -sf $(MAKEFILE_PATH) Makefile
 	cd openlane/user_project_wrapper &&\
-	ln -sf ../../$(CARAVEL_ROOT)/openlane/user_project_wrapper_empty/pin_order.cfg pin_order.cfg
+	ln -sf $(PIN_CFG_PATH) pin_order.cfg
 
 # Update Caravel
 .PHONY: update_caravel
 update_caravel: check-caravel
 ifeq ($(SUBMODULE),1)
-	@git submodule update --init
+	@git submodule update --init --recursive
+	cd $(CARAVEL_ROOT) && \
+	git checkout $(CARAVEL_BRANCH) && \
+	git pull
 else
 	cd $(CARAVEL_ROOT)/ && \
-		git checkout $(CARAVEL_COMMIT) && \
+		git checkout $(CARAVEL_BRANCH) && \
 		git pull
 endif
 
@@ -109,10 +118,12 @@
 .PHONY: uninstall
 uninstall: 
 ifeq ($(SUBMODULE),1)
+	git config -f .gitmodules --remove-section "submodule.$(CARAVEL_NAME)"
+	git add .gitmodules
 	git submodule deinit -f $(CARAVEL_ROOT)
-	sed -ie '/\[submodule \"caravel\"\]/,/\url =/d' .gitmodules
+	git rm --cached $(CARAVEL_ROOT)
 	rm -rf .git/modules/$(CARAVEL_NAME)
-	git rm -f $(CARAVEL_ROOT)
+	rm -rf $(CARAVEL_ROOT)
 else
 	rm -rf $(CARAVEL_ROOT)
 endif
@@ -122,6 +133,20 @@
 openlane: 
 	cd openlane && $(MAKE) openlane
 
+# Install Pre-check
+# Default installs to the user home directory, override by "export PRECHECK_ROOT=<precheck-installation-path>"
+.PHONY: precheck
+precheck:
+	@git clone https://github.com/efabless/open_mpw_precheck.git --depth=1 $(PRECHECK_ROOT)
+	@docker pull efabless/open_mpw_precheck:latest
+
+.PHONY: run-precheck
+run-precheck: check-precheck check-pdk check-caravel
+	$(eval TARGET_PATH := $(shell pwd))
+	cd $(PRECHECK_ROOT) && \
+	docker run -v $(PRECHECK_ROOT):/usr/local/bin -v $(TARGET_PATH):$(TARGET_PATH) -v $(PDK_ROOT):$(PDK_ROOT) -v $(CARAVEL_ROOT):$(CARAVEL_ROOT) \
+	-u $(shell id -u $(USER)):$(shell id -g $(USER)) efabless/open_mpw_precheck:latest bash -c "python3 open_mpw_prechecker.py --pdk_root $(PDK_ROOT) --target_path $(TARGET_PATH) -c $(CARAVEL_ROOT)"
+
 # Clean 
 .PHONY: clean
 clean:
@@ -133,3 +158,15 @@
 		echo "Caravel Root: "$(CARAVEL_ROOT)" doesn't exists, please export the correct path before running make. "; \
 		exit 1; \
 	fi
+
+check-precheck:
+	@if [ ! -d "$(PRECHECK_ROOT)" ]; then \
+		echo "Pre-check Root: "$(PRECHECK_ROOT)" doesn't exists, please export the correct path before running make. "; \
+		exit 1; \
+	fi
+
+check-pdk:
+	@if [ ! -d "$(PDK_ROOT)" ]; then \
+		echo "PDK Root: "$(PDK_ROOT)" doesn't exists, please export the correct path before running make. "; \
+		exit 1; \
+	fi
\ No newline at end of file