diff --git a/mcu/tools/genTargetFile/genTargetFile.py b/mcu/tools/genTargetFile/genTargetFile.py
new file mode 100644
index 0000000..9513aa1
--- /dev/null
+++ b/mcu/tools/genTargetFile/genTargetFile.py
@@ -0,0 +1,123 @@
+#!/usr/bin/python
+
+import sys
+import json
+import os
+import shutil
+import glob
+import re
+from collections import OrderedDict
+
+def check_file_exist (file):
+    if not os.path.exists(file):
+        printstr = "Error: " + file + " does not exist, please check!\n"
+        print(printstr)
+        exit (1)
+
+debug        = sys.argv[1] # True/False
+project      = sys.argv[2] # project name
+flavor       = sys.argv[3] # flavor name
+dsp_project  = sys.argv[4] # dsp project name
+dsp_flavor   = sys.argv[5] # dsp flavor name
+modis_uesim  = sys.argv[6] # check modis or uesim
+inputTarget    = sys.argv[7] # currect Target Name
+outputTarget   = sys.argv[8] # output Target Name
+chk_append_opt = sys.argv[9].split(',') # special option
+targetName     = os.path.basename(inputTarget)
+
+
+input_json = "tools/genTargetFile/all_dep.json"
+build_fdr  = "build/" + project + "/" + flavor
+if modis_uesim == 'target':
+    outputFdr  = build_fdr + "/bin/json"
+else:
+    outputFdr = build_fdr + "/" + modis_uesim + "/_BUILD_XGEN/bin/json"
+
+encode_enable = True
+if sys.version_info[0] >= 3:
+  encode_enable = False
+
+if debug:
+    print ("\n**********************************************************")
+    print("Project Name  = %s" % project)
+    print("Flavor Name   = %s" % flavor)
+    print("DSP Project Name  = %s" % dsp_project)
+    print("DSP Flavor Name   = %s" % dsp_flavor)
+    print("Input Target  = %s" % inputTarget)
+    print("Output Target = %s" % outputTarget)
+    print("Target NAme   = %s" % targetName)
+    print ("")
+
+input_target_jason = "tools/genTargetFile/json/" + targetName + ".json"
+TargetFileList   = []
+PrerequisiteList = []
+
+if targetName != "genJson.det":
+    check_file_exist(input_target_jason)
+    str = outputTarget + ': ' + input_target_jason
+    TargetFileList = [str]
+    PrerequisiteList = [input_target_jason]
+if debug:
+    InputFileList  = [input_target_jason]
+    OutputFileList = []
+with open(input_target_jason , 'r') as reader:
+    JsonData = json.loads(reader.read(), object_pairs_hook=OrderedDict)
+
+    for option in chk_append_opt:
+        for Script_List in JsonData[option]:
+            if Script_List != "NONE":
+                check_file_exist(Script_List)
+                str = outputTarget + ': ' + Script_List
+                TargetFileList.append(str)
+                PrerequisiteList.append(Script_List)
+            JsonInputList = JsonData[option][Script_List]['InputFile']['common']
+            if modis_uesim == 'target':
+                JsonInputList += JsonData[option][Script_List]['InputFile']['target']
+            else:
+                JsonInputList += JsonData[option][Script_List]['InputFile']['modis_uesim']
+            for File_List in JsonInputList:
+                File_List = File_List.replace('$proj',project).replace('$flavor',flavor).replace('$dsp_proj',dsp_project).replace('$dsp_flavor',dsp_flavor).replace('$modis_uesim',modis_uesim)
+                Glob_File_List = glob.glob(File_List)
+                if Glob_File_List:
+                    for file in Glob_File_List:
+                        FinalInput = file
+                        str = outputTarget + ': ' + FinalInput
+                        TargetFileList.append(str)
+                        PrerequisiteList.append(FinalInput)
+                        if debug:
+                            InputFileList.append(FinalInput)
+                else:
+                    check_file_exist(File_List)
+
+            if debug:
+                if modis_uesim == 'target':
+                    JsonOutputList = JsonData[option][Script_List]['OutputFile']['target']
+                else:
+                    JsonOutputList = JsonData[option][Script_List]['OutputFile']['modis_uesim']
+                for File_List in JsonOutputList:
+                    File_List = File_List.replace('$proj',project).replace('$flavor',flavor).replace('$dsp_proj',dsp_project).replace('$dsp_flavor',dsp_flavor).replace('$modis_uesim',modis_uesim)
+                    for file in glob.glob(File_List):
+                        FinalOutput = file
+                        OutputFileList.append(FinalOutput)
+
+with open(outputTarget , 'a+') as writer:
+    writer.write('\n')
+    for item in TargetFileList:
+        if debug:
+            print(item)
+        writer.write(item + '\n')
+    writer.write('\n')
+    for item in PrerequisiteList:
+        if debug:
+            print(item)
+        writer.write(item + ':\n')
+
+if debug:
+    print("\nInputFile:")
+    for item in InputFileList:
+        print(item)
+
+    print("\nOutputFile:")
+    for item in OutputFileList:
+        print(item)
+    print ("**********************************************************\n")
