Enable platforms to omit some bootloaders

If a platform doesn't specify a BLx_SOURCE variable, then building
of the corresponding bootloader isn't attempted. Also allow BL3-3 to
be omitted from the FIP.

Note, this change also removes support for PLAT=all and the 'fip' target
from the 'all' recipe.

Fixes ARM-software/tf-issues#30

Change-Id: Ibdfead0440256eaf364617ecff65290ca6fe6240
Signed-off-by: Jon Medhurst <tixy@linaro.org>
diff --git a/Makefile b/Makefile
index e1a3501..5672f00 100644
--- a/Makefile
+++ b/Makefile
@@ -71,7 +71,7 @@
 ARCH 			?=	aarch64
 
 # By default, build all platforms available
-PLAT			?=	all
+PLAT			?=	fvp
 # By default, build no SPD component
 SPD			?=	none
 
@@ -85,31 +85,30 @@
 ifeq (${PLAT},)
   $(error "Error: Unknown platform. Please use PLAT=<platform name> to specify the platform.")
 endif
-ifeq ($(findstring ${PLAT},${PLATFORMS} all),)
+ifeq ($(findstring ${PLAT},${PLATFORMS}),)
   $(error "Error: Invalid platform. The following platforms are available: ${PLATFORMS}")
 endif
 
-ifeq (${PLAT},all)
-all: ${PLATFORMS}
-else
-all: msg_start fip
-endif
+all: msg_start
 
 msg_start:
 	@echo "Building ${PLAT}"
 
+include plat/${PLAT}/platform.mk
+
-${PLATFORMS}:
-	${MAKE} PLAT=$@ all
+ifdef BL1_SOURCES
+NEED_BL1 := yes
+include bl1/bl1.mk
+endif
+
+ifdef BL2_SOURCES
+NEED_BL2 := yes
+include bl2/bl2.mk
+endif
 
-ifneq (${PLAT},all)
-  $(info Including ${PLAT}/platform.mk)
-  include plat/${PLAT}/platform.mk
-  $(info Including bl1.mk)
-  include bl1/bl1.mk
-  $(info Including bl2.mk)
-  include bl2/bl2.mk
-  $(info Including bl31.mk)
-  include bl31/bl31.mk
+ifdef BL31_SOURCES
+NEED_BL31 := yes
+include bl31/bl31.mk
 endif
 
 # Include SPD Makefile if one has been specified
@@ -128,7 +127,7 @@
   # variable to "yes"
 endif
 
-.PHONY:			all msg_start ${PLATFORMS} clean realclean distclean cscope locate-checkpatch checkcodebase checkpatch fiptool fip locate-bl33
+.PHONY:			all msg_start ${PLATFORMS} clean realclean distclean cscope locate-checkpatch checkcodebase checkpatch fiptool fip
 .SUFFIXES:
 
 
@@ -158,6 +157,7 @@
 vpath %.c bl1:bl2:bl31
 vpath %.c bl1/${ARCH}:bl2/${ARCH}:bl31/${ARCH}
 vpath %.S bl1/${ARCH}:bl2/${ARCH}:bl31/${ARCH}
+vpath %.c lib/arch/${ARCH} # One of the missing paths needed for BL_COMMON_SOURCES
 
 
 ifneq (${DEBUG}, 0)
@@ -203,17 +203,6 @@
 endif
 endif
 
-locate-bl33:
-ifndef BL33
-	$(error "Please set BL33 to point to the Normal World binary, eg: BL33=../uefi/FVP_AARCH64_EFI.fd")
-else
-ifeq (,$(wildcard ${BL33}))
-	$(error "The file BL33 points to cannot be found (${BL33})")
-endif
-FIP_DEPS		+= ${BL33}
-endif
-
-
 clean:
 			@echo "  CLEAN"
 			${Q}rm -rf ${BUILD_PLAT}
@@ -381,18 +370,25 @@
 endef
 
 
+ifeq (${NEED_BL1},yes)
 $(eval $(call MAKE_BL,1))
+endif
 
+ifeq (${NEED_BL2},yes)
 $(eval $(call MAKE_BL,2,in_fip))
+endif
 
+ifeq (${NEED_BL31},yes)
 BL31_SOURCES += ${SPD_SOURCES}
 $(eval $(call MAKE_BL,31,in_fip))
+endif
 
 ifeq (${NEED_BL32},yes)
 $(eval $(call MAKE_BL,32,in_fip))
 endif
 
-${BUILD_PLAT}/fip.bin:	locate-bl33 ${FIP_DEPS} ${FIPTOOL}
+${BUILD_PLAT}/fip.bin:	${FIP_DEPS} ${BL33} ${FIPTOOL}
+			$(if ${BL33},,$(error "To build a FIP, please set BL33 to point to the Normal World binary, eg: BL33=../uefi/FVP_AARCH64_EFI.fd"))
 			${Q}${FIPTOOL} --dump \
 				${FIP_ARGS} \
 				--bl33 ${BL33} \