]> git.proxmox.com Git - mirror_frr.git/blobdiff - python/makefile.py
Merge pull request #12805 from karlquan/kquan_self_orig
[mirror_frr.git] / python / makefile.py
index 44658013b3f49e2826a5f9422aeb5e033bef399e..573871fb68c746678281cd89d3e3d2927e488232 100644 (file)
@@ -32,7 +32,12 @@ for clippy_file in clippy_scan:
     assert clippy_file.endswith(".c")
 
 xref_targets = []
-for varname in ["bin_PROGRAMS", "sbin_PROGRAMS", "lib_LTLIBRARIES", "module_LTLIBRARIES"]:
+for varname in [
+    "bin_PROGRAMS",
+    "sbin_PROGRAMS",
+    "lib_LTLIBRARIES",
+    "module_LTLIBRARIES",
+]:
     xref_targets.extend(mv[varname].strip().split())
 
 # check for files using clippy but not listed in clippy_scan
@@ -63,6 +68,9 @@ if args.dev_build:
             )
             sys.exit(1)
 
+# this additional-dependency rule is stuck onto all compile targets that
+# compile a file which uses clippy-generated input, so it has a dependency to
+# make that first.
 clippydep = Template(
     """
 ${clippybase}.$$(OBJEXT): ${clippybase}_clippy.c
@@ -70,6 +78,8 @@ ${clippybase}.lo: ${clippybase}_clippy.c
 ${clippybase}_clippy.c: $$(CLIPPY_DEPS)"""
 )
 
+# this one is used when one .c file is built multiple times with different
+# CFLAGS
 clippyauxdep = Template(
     """# clippy{
 # auxiliary clippy target
@@ -88,6 +98,7 @@ while lines:
     if line.startswith(autoderp):
         line = line[len(autoderp) :]
 
+    # allow rerunning on already-clippified Makefile
     if line == "# clippy{":
         while lines:
             line = lines.pop(0)
@@ -113,29 +124,64 @@ while lines:
 
     target, dep = m.group(1), m.group(2)
 
+    filename = os.path.basename(target)
+    if "-" in filename:
+        # dashes in output filename = building same .c with different CFLAGS
+        am_name, _ = filename.split("-", 1)
+        am_name = os.path.join(os.path.dirname(target), am_name)
+        am_name = am_name.replace("/", "_")
+        extraflags = " $(%s_CFLAGS)" % (am_name,)
+    else:
+        # this path isn't really triggered because automake is using a generic
+        # .c => .o rule unless CFLAGS are customized for a target
+        extraflags = ""
+
     if target.endswith(".lo") or target.endswith(".o"):
         if not dep.endswith(".h"):
+            # LLVM bitcode targets for analysis tools
             bcdeps.append("%s.bc: %s" % (target, target))
-            bcdeps.append("\t$(AM_V_LLVM_BC)$(COMPILE) -emit-llvm -c -o $@ %s" % (dep))
+            bcdeps.append(
+                "\t$(AM_V_LLVM_BC)$(COMPILE)%s -emit-llvm -c -o $@ %s"
+                % (extraflags, dep)
+            )
     if m.group(2) in clippy_scan:
+        # again - this is only hit for targets with custom CFLAGS, because
+        # automake uses a generic .c -> .o rule for standard CFLAGS
         out_lines.append(
             clippyauxdep.substitute(target=m.group(1), clippybase=m.group(2)[:-2])
         )
 
     out_lines.append(line)
 
+# now, cover all the .c files that don't have special build rules
 out_lines.append("# clippy{\n# main clippy targets")
 for clippy_file in clippy_scan:
     out_lines.append(clippydep.substitute(clippybase=clippy_file[:-2]))
 
+# combine daemon .xref files into frr.xref
 out_lines.append("")
-out_lines.append("xrefs = %s" % (" ".join(["%s.xref" % target for target in xref_targets])))
+xref_targets = [
+    target
+    for target in xref_targets
+    if target
+    not in [
+        "bgpd/rfp-example/rfptest/rfptest",
+        "pimd/mtracebis",
+        "tools/ssd",
+        "vtysh/vtysh",
+    ]
+]
+out_lines.append(
+    "xrefs = %s" % (" ".join(["%s.xref" % target for target in xref_targets]))
+)
 out_lines.append("frr.xref: $(xrefs)")
 out_lines.append("")
 
-#frr.xref: $(bin_PROGRAMS) $(sbin_PROGRAMS) $(lib_LTLIBRARIES) $(module_LTLIBRARIES)
-#      $(AM_V_XRELFO) $(CLIPPY) $(top_srcdir)/python/xrelfo.py -o $@ $^
+# analog but slower way to get the same frr.xref
+# frr.xref: $(bin_PROGRAMS) $(sbin_PROGRAMS) $(lib_LTLIBRARIES) $(module_LTLIBRARIES)
+#      $(AM_V_XRELFO) $(CLIPPY) $(top_srcdir)/python/xrelfo.py -o $@ $^
 
+# LLVM bitcode link targets creating a .bc file for whole daemon or lib
 out_lines.append("")
 out_lines.extend(bcdeps)
 out_lines.append("")