+\r
+# Submodules\r
+\r
+Submodule in EDK II is allowed but submodule chain should be avoided\r
+as possible as we can. Currently EDK II contains the following submodules\r
+\r
+- CryptoPkg/Library/OpensslLib/openssl\r
+- ArmPkg/Library/ArmSoftFloatLib/berkeley-softfloat-3\r
+- MdeModulePkg/Universal/RegularExpressionDxe/oniguruma\r
+- MdeModulePkg/Library/BrotliCustomDecompressLib/brotli\r
+- BaseTools/Source/C/BrotliCompress/brotli\r
+\r
+ArmSoftFloatLib is actually required by OpensslLib. It's inevitable\r
+in openssl-1.1.1 (since stable201905) for floating point parameter\r
+conversion, but should be dropped once there's no such need in future\r
+release of openssl.\r
+\r
+To get a full, buildable EDK II repository, use following steps of git\r
+command\r
+\r
+```\r
+$ git clone https://github.com/tianocore/edk2.git\r
+$ cd edk2\r
+$ git submodule update --init\r
+$ cd ..\r
+```\r
+\r
+If there's update for submodules, use following git commands to get the\r
+latest submodules code.\r
+\r
+```\r
+$ cd edk2\r
+$ git pull\r
+$ git submodule update\r
+```\r
+\r
+Note: When cloning submodule repos, '--recursive' option is not\r
+recommended. EDK II itself will not use any code/feature from\r
+submodules in above submodules. So using '--recursive' adds a\r
+dependency on being able to reach servers we do not actually want\r
+any code from, as well as needlessly downloading code we will not\r
+use.\r