Convert to relative path for CleanSpec.mk

When using mm, which passes in absolute path, while in full build relative
paths are used to encode clean steps.

Change-Id: I3e39ce3125194589f9a464f27eef4a9c96fa06c1
diff --git a/core/cleanspec.mk b/core/cleanspec.mk
index a3eb7cd..444ff98 100644
--- a/core/cleanspec.mk
+++ b/core/cleanspec.mk
@@ -63,8 +63,27 @@
 # NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
 # ************************************************
 
+# Get the path of the top of the tree.
+# for example:
+# /home/bob/master/framework/base => /home/bob/master
+# See function gettop in build/envsetup.sh.
+define get-top-dir
+$(if $(1),$(if $(wildcard $(1)/build/core/envsetup.mk),$(1),$(strip \
+  $(call get-top-dir,$(patsubst %/,%,$(dir $(1)))))))
+endef
+
 ifneq ($(ONE_SHOT_MAKEFILE),)
-cs_subdirs := $(dir $(ONE_SHOT_MAKEFILE))
+cs_subdirs := $(patsubst %/,%,$(dir $(ONE_SHOT_MAKEFILE)))
+abs_cs_subdirs := $(filter /%,$(cs_subdirs))
+ifneq ($(abs_cs_subdirs),)
+# Convert absolute path to relative path, e.g. when using mm.
+abs_top_path := $(call get-top-dir,$(word 1,$(abs_cs_subdirs)))
+cs_subdirs := $(filter-out /%,$(cs_subdirs)) \
+  $(patsubst $(abs_top_path)/%,%,$(abs_cs_subdirs))
+
+abs_top_path :=
+abs_cs_subdirs :=
+endif
 else
 cs_subdirs := .
 endif