diff --git a/meta-phosphor/classes/license_static.bbclass b/meta-phosphor/classes/license_static.bbclass
new file mode 100644
index 0000000..dd73017
--- /dev/null
+++ b/meta-phosphor/classes/license_static.bbclass
@@ -0,0 +1,64 @@
+####
+# Copyright 2021 Intel Corporation
+#
+# Add a class to support serving license info through bmcweb.
+#
+# bmcweb serves static content from the /usr/share/www folder, so this class
+# copies the license info from /usr/share/common-licenses to
+# /usr/share/www/common-licenses so it will be statically served by bmcweb.
+#
+# Requires 'COPY_LIC_DIRS' to be enabled to create /usr/share/common-licenses.
+#
+# Class can be inherited in a project bbclass to copy the license info.
+#
+# Example:
+# inherit license_static
+####
+
+STATIC_LICENSE_DIR = "${IMAGE_ROOTFS}/usr/share/www/common-licenses"
+
+
+def add_index_html_header(f):
+    f.write("<!DOCTYPE html>")
+    f.write("<html>")
+    f.write("<body>")
+    f.write("<p>")
+
+
+def add_index_html_footer(f):
+    f.write("</p>")
+    f.write("</body>")
+    f.write("</html>")
+
+
+def create_index_files(d):
+    import os
+
+    static_license_dir = d.getVar('STATIC_LICENSE_DIR')
+    for dirpath, dirnames, filenames in os.walk(static_license_dir):
+        with open(os.path.join(dirpath, "index.html"), "w") as f:
+            add_index_html_header(f)
+            full_list = filenames+dirnames
+            full_list.sort()
+            f.write("<br>".join(full_list))
+            add_index_html_footer(f)
+
+
+def copy_license_files(d):
+    import shutil
+
+    rootfs_license_dir = d.getVar('ROOTFS_LICENSE_DIR')
+    static_license_dir = d.getVar('STATIC_LICENSE_DIR')
+    shutil.copytree(rootfs_license_dir, static_license_dir)
+
+
+python do_populate_static_lic() {
+    copy_lic_dirs = d.getVar('COPY_LIC_DIRS')
+    if copy_lic_dirs == "1":
+        copy_license_files(d)
+        create_index_files(d)
+    else:
+        bb.warn("Static licenses not copied because 'COPY_LIC_DIRS' is disabled.")
+}
+
+ROOTFS_POSTPROCESS_COMMAND:append = "do_populate_static_lic; "
