Add initial version of firmware-test-builder

Introduce the following features to firmware-test-builder:

* Testing on the host machine (PC)
* Provides CMake functions for building/running/evaluating tests
  * Checking prerequisites (git, c-picker, libclang, etc.)
  * Fetching and building CppUTest
  * Defining and building unit test suites (i.e. separate binaries)
  * Handling c-picker based extraction of code snippets
  * Registering test suites to CTest (CMake's test system) which runs
    all the test binaries
* Generating coverage report
* Documentation of the system

Signed-off-by: Imre Kis <imre.kis@arm.com>
Change-Id: Ic0a1af55bef07c6e76071193caa94a9a48f9041f
diff --git a/docs/resources/TrustedFirmware-Logo_standard-white.png b/docs/resources/TrustedFirmware-Logo_standard-white.png
new file mode 100644
index 0000000..e7bff71
--- /dev/null
+++ b/docs/resources/TrustedFirmware-Logo_standard-white.png
Binary files differ
diff --git a/docs/resources/sequence_print_to_eeprom.puml b/docs/resources/sequence_print_to_eeprom.puml
new file mode 100644
index 0000000..8ba7190
--- /dev/null
+++ b/docs/resources/sequence_print_to_eeprom.puml
@@ -0,0 +1,46 @@
+'-------------------------------------------------------------------------------
+' Copyright (c) 2019-2021, Arm Limited and Contributors. All rights reserved.
+'
+' SPDX-License-Identifier: BSD-3-Clause
+'
+'-------------------------------------------------------------------------------
+
+@startuml
+participant Application as APP
+
+activate APP
+APP -> Print: print_to_eeprom(fmt, ...)
+activate Print
+
+	Print -> EEPROM: eeprom_write(buffer)
+	activate EEPROM
+
+		EEPROM -> I2C: i2c_write(address, buffer)
+		activate I2C
+
+			I2C -> Hardware: I2C transaction
+			activate Hardware
+			Hardware --> I2C: ack/nack
+			deactivate Hardware
+
+		I2C --> EEPROM: result
+		deactivate I2C
+
+		EEPROM -> I2C: i2c_write(address, buffer+ result)
+		activate I2C
+
+			I2C -> Hardware: I2C transaction
+			activate Hardware
+			Hardware --> I2C: ack/nack
+			deactivate Hardware
+
+		I2C --> EEPROM: result
+		deactivate I2C
+
+	EEPROM --> Print: result
+	deactivate EEPROM
+
+Print -> APP: result
+deactivate Print
+
+@enduml
\ No newline at end of file
diff --git a/docs/resources/sequence_print_to_eeprom_mock.puml b/docs/resources/sequence_print_to_eeprom_mock.puml
new file mode 100644
index 0000000..ce394d4
--- /dev/null
+++ b/docs/resources/sequence_print_to_eeprom_mock.puml
@@ -0,0 +1,48 @@
+'-------------------------------------------------------------------------------
+' Copyright (c) 2019-2021, Arm Limited and Contributors. All rights reserved.
+'
+' SPDX-License-Identifier: BSD-3-Clause
+'
+'-------------------------------------------------------------------------------
+
+@startuml
+participant "Test case" as TC
+participant "Code under test" as CUT
+
+group Setting expectations
+	activate TC
+	TC -> Mock: expect_write("hello1hello2", 6)
+	activate Mock
+	deactivate Mock
+	TC -> Mock: expect_write("hello2", 6)
+	activate Mock
+	deactivate Mock
+end
+
+TC -> CUT: print_to_eeprom("hello%dhello%d", 1, 2)
+activate CUT
+
+	group Using mocked interface
+		CUT -> Mock: eeprom_write("hello1hello2")
+		activate Mock
+		Mock --> CUT: 6
+		deactivate Mock
+
+		CUT -> Mock: eeprom_write("hello2")
+		activate Mock
+		Mock --> CUT: 6
+		deactivate Mock
+	end
+
+CUT --> TC: 6 + 6 = 12
+deactivate CUT
+
+TC -> Mock: mock().checkExpectation()
+activate Mock
+deactivate Mock
+
+TC -> Mock: mock().clear()
+activate Mock
+deactivate Mock
+
+@enduml
\ No newline at end of file