Tool: Code size analyze tool and diff tool

Code size analyze tool with create a database to restructure map file's
code size data. Developers can get the information with an UI in
terminal to choose what they are interested. It also supplies same
features with terminal command line input options.

Code size diff tool can dump the code size change with different parts
between two different build results.

Signed-off-by: Jianliang Shen <jianliang.shen@arm.com>
Change-Id: Ic9a2c37ab8da599b0762b29a0ad795a33ddd028b
diff --git a/code-size-analyze-tool/README.rst b/code-size-analyze-tool/README.rst
new file mode 100644
index 0000000..31957bb
--- /dev/null
+++ b/code-size-analyze-tool/README.rst
@@ -0,0 +1,116 @@
+######################
+Code size analyze tool
+######################
+
+.. contents:: Table of Contents
+
+These are scripts to dump ARMCLANG complie map file detail information and get
+the change between two different build results. The features are:
+
+* Get a database to implement data tables from ARMCLANG or GNUARM map file.
+* Supply an UI for developers to scan sorted information of sections, libraries,
+  object files, functions and data. It can help analyze the biggest or smallest
+  targets in certain image. It can also help search functions or data to locate
+  their address and detail information.
+* Diff two databases to see the code size increasement or decreasement.
+
+***************
+Install sqlite3
+***************
+
+Linux
+=====
+Install sqlite3 for python.
+
+.. code-block:: bash
+
+    sudo apt-get install python3-dev libmysqlclient-dev
+    pip install mysqlclient
+
+
+*****
+Usage
+*****
+
+The command is:
+
+.. code-block:: bash
+
+    python3 code_size_analyze.py -i <map file path> --gnuarm
+    python3 code_size_analyze.py -i <map file path> --armcc
+    python3 code_size_analyze.py --ui
+
+It is required to input map file path for the script before show the UI. While
+input the map file, compiler information such as ``--gnuarm`` or ``--armcc``
+is required.
+
+keys
+====
+
+The script ui.py supplies a menu to choose what developers may be interested.
+There are several keys to move cursor.
+
+* UP: Move UP, mouse scrolling up is same.
+* DOWN: Move down, mouse scrolling down is same.
+* RIGHT: Move right.
+* LEFT: Move left.
+* Enter: Move to next page if it can be unfolded.
+* ``Q`` or ``q``: Escape to previous page or close script if it in top menu.
+
+Search
+======
+
+In ``Function detail`` and ``library detail`` pages, developers can search for
+specific target with key word of target name. Press ``:`` to start search and
+enter the name in the last line of window. All the targets with key word will
+be given.
+
+You can also search or dump the target in command line without Ui, for example:
+.. code-block:: bash
+
+    python3 code_size_analyze.py --search_func <func_name>
+
+All the features provided by UI can be used in command line too. Enter ``-h`` to
+get the help information and choose the option to use.
+
+Save
+====
+
+In any page, press ``s`` or ``S`` to start enter output file name to save the
+content of this page.
+
+Diff
+====
+
+Use ``code_size_diff.py`` to diff two diffrent build results with same compiler.
+Firstly, use ``code_size_analyze.py`` to prepare two different databases. For
+example:
+
+.. code-block:: bash
+
+    cd <TF-M workspace>
+    git checkout branch1
+    # Build with ARMCLANG
+    python3 code_size_analyze.py -i <map file 1> --armcc
+    mv data.db output/branch1.db
+
+    # Do the same steps to create branch2.db
+
+Then compare two database with the diff tool, the branch1 is base.
+
+.. code-block:: bash
+
+    python3 code_size_diff.py -i output/branch1.db output/branch2.db -a
+    Code size:  +++         48928   B               47.78   KB
+    RO data:    +++         29440   B               28.75   KB
+    RW data:    ---         64      B               0.06    KB
+    ZI data:    ---         500     B               0.49    KB
+    Flash size: +++         78304   B               76.47   KB
+    RAM size:   ---         564     B               0.55    KB
+
+The summary information change will be printed. Enter ``-h`` to get more usages
+of diff tool.
+
+--------------
+
+*Copyright (c) 2021, Arm Limited. All rights reserved.*