Merge pull request #176 from danh-arm/jc/tf-issues/203-v3

Add support for printing version at runtime v3
diff --git a/Makefile b/Makefile
index 86a4878..39496fb 100644
--- a/Makefile
+++ b/Makefile
@@ -29,6 +29,12 @@
 #
 
 #
+# Trusted Firmware Version
+#
+VERSION_MAJOR		:= 0
+VERSION_MINOR		:= 4
+
+#
 # Default values for build configurations
 #
 
@@ -76,6 +82,13 @@
 	BUILD_TYPE	:=	release
 endif
 
+# Default build string (git branch and commit)
+ifeq (${BUILD_STRING},)
+	BUILD_STRING	:=	$(shell git log -n 1 --pretty=format:"%h")
+endif
+
+VERSION_STRING		:=	v${VERSION_MAJOR}.${VERSION_MINOR}(${BUILD_TYPE}):${BUILD_STRING}
+
 BL_COMMON_SOURCES	:=	common/bl_common.c			\
 				common/debug.c				\
 				common/tf_printf.c			\
@@ -377,7 +390,8 @@
 
 $(ELF) : $(OBJS) $(LINKERFILE)
 	@echo "  LD      $$@"
-	@echo 'const char build_message[] = "Built : "__TIME__", "__DATE__;' | \
+	@echo 'const char build_message[] = "Built : "__TIME__", "__DATE__; \
+	       const char version_string[] = "${VERSION_STRING}";' | \
 		$$(CC) $$(CFLAGS) -xc - -o $(BUILD_DIR)/build_message.o
 	$$(Q)$$(LD) -o $$@ $$(LDFLAGS) -Map=$(MAPFILE) --script $(LINKERFILE) \
 					$(BUILD_DIR)/build_message.o $(OBJS)
diff --git a/bl1/bl1_main.c b/bl1/bl1_main.c
index 47ca546..c6f2caa 100644
--- a/bl1/bl1_main.c
+++ b/bl1/bl1_main.c
@@ -130,7 +130,8 @@
 
 	/* Announce our arrival */
 	tf_printf(FIRMWARE_WELCOME_STR);
-	tf_printf("%s\n\r", build_message);
+	tf_printf("%s\n", version_string);
+	tf_printf("%s\n", build_message);
 
 	SET_PARAM_HEAD(&bl2_image_info, PARAM_IMAGE_BINARY, VERSION_1, 0);
 	SET_PARAM_HEAD(&bl2_ep, PARAM_EP, VERSION_1, 0);
diff --git a/bl2/bl2_main.c b/bl2/bl2_main.c
index 70b688a..ca83842 100644
--- a/bl2/bl2_main.c
+++ b/bl2/bl2_main.c
@@ -195,7 +195,8 @@
 	/* Perform platform setup in BL2 */
 	bl2_platform_setup();
 
-	tf_printf("BL2 %s\n\r", build_message);
+	tf_printf("BL2 %s\n", version_string);
+	tf_printf("BL2 %s\n", build_message);
 
 	/*
 	 * Load the subsequent bootloader images
diff --git a/bl31/bl31_main.c b/bl31/bl31_main.c
index 031799c..861b391 100644
--- a/bl31/bl31_main.c
+++ b/bl31/bl31_main.c
@@ -77,7 +77,8 @@
 	/* Perform platform setup in BL1 */
 	bl31_platform_setup();
 
-	tf_printf("BL31 %s\n\r", build_message);
+	tf_printf("BL31 %s\n", version_string);
+	tf_printf("BL31 %s\n", build_message);
 
 	/* Initialise helper libraries */
 	bl31_lib_init();
diff --git a/bl32/tsp/tsp_main.c b/bl32/tsp/tsp_main.c
index 8844f41..b2850e9 100644
--- a/bl32/tsp/tsp_main.c
+++ b/bl32/tsp/tsp_main.c
@@ -120,7 +120,8 @@
 	tsp_stats[linear_id].cpu_on_count++;
 
 	spin_lock(&console_lock);
-	tf_printf("TSP %s\n\r", build_message);
+	tf_printf("TSP %s\n", version_string);
+	tf_printf("TSP %s\n", build_message);
 	INFO("Total memory base : 0x%x\n", (unsigned long)BL32_TOTAL_BASE);
 	INFO("Total memory size : 0x%x bytes\n",
 			 (unsigned long)(BL32_TOTAL_LIMIT - BL32_TOTAL_BASE));
diff --git a/include/common/bl_common.h b/include/common/bl_common.h
index 154c0f4..e996fd6 100644
--- a/include/common/bl_common.h
+++ b/include/common/bl_common.h
@@ -210,6 +210,7 @@
 	       image_info_t *image_data,
 	       entry_point_info_t *entry_point_info);
 extern const char build_message[];
+extern const char version_string[];
 
 void reserve_mem(uint64_t *free_base, size_t *free_size,
 		uint64_t addr, size_t size);