-ObjDir := $(PROJ_OBJ_DIR)/$(BuildMode)
-LibDir := $(PROJ_OBJ_ROOT)/$(BuildMode)/lib
-ToolDir := $(PROJ_OBJ_ROOT)/$(BuildMode)/bin
-ExmplDir := $(PROJ_OBJ_ROOT)/$(BuildMode)/examples
-LLVMLibDir := $(LLVM_OBJ_ROOT)/$(BuildMode)/lib
-LLVMToolDir := $(LLVM_OBJ_ROOT)/$(BuildMode)/bin
-LLVMExmplDir:= $(LLVM_OBJ_ROOT)/$(BuildMode)/examples
+TargetMode :=
+ifeq ($(LLVM_CROSS_COMPILING),1)
+ ifeq ($(BUILD_COMPONENT),1)
+ TargetMode := Build
+ else
+ TargetMode := Host
+ endif
+ BuildLLVMToolDir := $(LLVM_OBJ_ROOT)/$(BuildMode)/Build/bin
+endif
+
+ObjRootDir := $(PROJ_OBJ_DIR)/$(BuildMode)
+# It is very important that ObjDir not have an extra trailing
+# slash. This ends up changing the rules so that dependency file (.d)
+# information is not used at all!
+ifeq ($(TargetMode),)
+ ObjDir := $(ObjRootDir)
+else
+ ObjDir := $(ObjRootDir)/$(TargetMode)
+endif
+LibDir := $(PROJ_OBJ_ROOT)/$(BuildMode)/$(TargetMode)/lib
+ToolDir := $(PROJ_OBJ_ROOT)/$(BuildMode)/$(TargetMode)/bin
+ExmplDir := $(PROJ_OBJ_ROOT)/$(BuildMode)/$(TargetMode)/examples
+LLVMLibDir := $(LLVM_OBJ_ROOT)/$(BuildMode)/$(TargetMode)/lib
+LLVMToolDir := $(LLVM_OBJ_ROOT)/$(BuildMode)/$(TargetMode)/bin
+LLVMExmplDir:= $(LLVM_OBJ_ROOT)/$(BuildMode)/$(TargetMode)/examples