Refactored fabric PipeconfLoader to automatically build pipeconfs

Fabric.p4 is evolving in a way that will allow multiple profiles (e.g.
fabric, fabric-spgw, fabric-int, etc). Moreover, we need to support
multiple targets (e.g. BMv2, Tofino, etc.) as well as platforms
(variant of a target). Maintaining a pipeconf for each
profile/target/platform is time-consuming.

The new PipeconfLoader automatically builds pipeconfs based on the
available p4c compiler outputs available in the 'resources' directory.
This approach removes the need to maintain separate pipeconfs like
fabric-pro. Those interested in using fabric.p4 with targets other than
BMv2, will simply need to place the appropriate target/platform-specific
P4 compiler outputs in the resource directory.

Change-Id: I58d208a1837e747357373b2296cb950f13799ed6
diff --git a/pipelines/fabric/src/main/resources/p4c-out/bmv2/fabric-spgw.json b/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw/bmv2/default/bmv2.json
similarity index 98%
rename from pipelines/fabric/src/main/resources/p4c-out/bmv2/fabric-spgw.json
rename to pipelines/fabric/src/main/resources/p4c-out/fabric-spgw/bmv2/default/bmv2.json
index 6db1e8c..f3439fe 100644
--- a/pipelines/fabric/src/main/resources/p4c-out/bmv2/fabric-spgw.json
+++ b/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw/bmv2/default/bmv2.json
@@ -1512,7 +1512,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 32,
+            "line" : 66,
             "column" : 31,
             "source_fragment" : "0x8100; ..."
           }
@@ -2258,7 +2258,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 33,
+            "line" : 67,
             "column" : 31,
             "source_fragment" : "0x8847; ..."
           }
@@ -2334,7 +2334,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 67,
+            "line" : 87,
             "column" : 32,
             "source_fragment" : "64; ..."
           }
@@ -2449,7 +2449,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 33,
+            "line" : 67,
             "column" : 31,
             "source_fragment" : "0x8847; ..."
           }
@@ -2525,7 +2525,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 67,
+            "line" : 87,
             "column" : 32,
             "source_fragment" : "64; ..."
           }
@@ -2640,7 +2640,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 33,
+            "line" : 67,
             "column" : 31,
             "source_fragment" : "0x8847; ..."
           }
@@ -2716,7 +2716,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 67,
+            "line" : 87,
             "column" : 32,
             "source_fragment" : "64; ..."
           }
@@ -2955,7 +2955,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 88,
+            "line" : 98,
             "column" : 31,
             "source_fragment" : "1w0; ..."
           }
@@ -3070,7 +3070,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 89,
+            "line" : 99,
             "column" : 33,
             "source_fragment" : "1w1; ..."
           }
@@ -3121,7 +3121,7 @@
                   "left" : null,
                   "right" : {
                     "type" : "bool",
-                    "value" : false
+                    "value" : true
                   }
                 }
               }
@@ -3131,7 +3131,7 @@
             "filename" : "include/spgw.p4",
             "line" : 146,
             "column" : 8,
-            "source_fragment" : "spgw_meta.do_spgw = false"
+            "source_fragment" : "spgw_meta.do_spgw = true"
           }
         }
       ]
@@ -3277,7 +3277,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 35,
+            "line" : 69,
             "column" : 31,
             "source_fragment" : "0x0800; ..."
           }
@@ -3296,7 +3296,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 35,
+            "line" : 69,
             "column" : 31,
             "source_fragment" : "0x0800; ..."
           }
@@ -3587,7 +3587,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 54,
+            "line" : 78,
             "column" : 28,
             "source_fragment" : "5; ..."
           }
@@ -3724,7 +3724,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 78,
+            "line" : 88,
             "column" : 32,
             "source_fragment" : "64; ..."
           }
@@ -3743,7 +3743,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 51,
+            "line" : 75,
             "column" : 25,
             "source_fragment" : "17; ..."
           }
@@ -5476,14 +5476,13 @@
             "filename" : "include/spgw.p4",
             "line" : 167,
             "column" : 12,
-            "source_fragment" : "!spgw_meta.do_spgw"
+            "source_fragment" : "spgw_meta.do_spgw == true"
           },
           "expression" : {
             "type" : "expression",
             "value" : {
-              "op" : "not",
-              "left" : null,
-              "right" : {
+              "op" : "==",
+              "left" : {
                 "type" : "expression",
                 "value" : {
                   "op" : "d2b",
@@ -5493,6 +5492,10 @@
                     "value" : ["userMetadata.spgw", "do_spgw"]
                   }
                 }
+              },
+              "right" : {
+                "type" : "bool",
+                "value" : true
               }
             }
           },
@@ -5989,7 +5992,7 @@
             "filename" : "include/control/packetio.p4",
             "line" : 43,
             "column" : 16,
-            "source_fragment" : "hdr.vlan_tag.isValid() && fabric_metadata.pop_vlan_when_packet_in"
+            "source_fragment" : "hdr.vlan_tag.isValid() && fabric_metadata.pop_vlan_when_packet_in == true"
           },
           "expression" : {
             "type" : "expression",
@@ -6009,11 +6012,21 @@
               "right" : {
                 "type" : "expression",
                 "value" : {
-                  "op" : "d2b",
-                  "left" : null,
+                  "op" : "==",
+                  "left" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "d2b",
+                      "left" : null,
+                      "right" : {
+                        "type" : "field",
+                        "value" : ["scalars", "fabric_metadata_t.pop_vlan_when_packet_in"]
+                      }
+                    }
+                  },
                   "right" : {
-                    "type" : "field",
-                    "value" : ["scalars", "fabric_metadata_t.pop_vlan_when_packet_in"]
+                    "type" : "bool",
+                    "value" : true
                   }
                 }
               }
@@ -6029,7 +6042,7 @@
             "filename" : "include/spgw.p4",
             "line" : 249,
             "column" : 12,
-            "source_fragment" : "spgw_meta.do_spgw && spgw_meta.direction == DIR_DOWNLINK"
+            "source_fragment" : "spgw_meta.do_spgw == true && spgw_meta.direction == DIR_DOWNLINK"
           },
           "expression" : {
             "type" : "expression",
@@ -6038,11 +6051,21 @@
               "left" : {
                 "type" : "expression",
                 "value" : {
-                  "op" : "d2b",
-                  "left" : null,
+                  "op" : "==",
+                  "left" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "d2b",
+                      "left" : null,
+                      "right" : {
+                        "type" : "field",
+                        "value" : ["userMetadata.spgw", "do_spgw"]
+                      }
+                    }
+                  },
                   "right" : {
-                    "type" : "field",
-                    "value" : ["userMetadata.spgw", "do_spgw"]
+                    "type" : "bool",
+                    "value" : true
                   }
                 }
               },
diff --git a/pipelines/fabric/src/main/resources/p4c-out/bmv2/fabric-spgw.p4info b/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw/bmv2/default/p4info.txt
similarity index 100%
rename from pipelines/fabric/src/main/resources/p4c-out/bmv2/fabric-spgw.p4info
rename to pipelines/fabric/src/main/resources/p4c-out/fabric-spgw/bmv2/default/p4info.txt
diff --git a/pipelines/fabric/src/main/resources/p4c-out/bmv2/fabric.json b/pipelines/fabric/src/main/resources/p4c-out/fabric/bmv2/default/bmv2.json
similarity index 98%
rename from pipelines/fabric/src/main/resources/p4c-out/bmv2/fabric.json
rename to pipelines/fabric/src/main/resources/p4c-out/fabric/bmv2/default/bmv2.json
index 8aad592..52fab79 100644
--- a/pipelines/fabric/src/main/resources/p4c-out/bmv2/fabric.json
+++ b/pipelines/fabric/src/main/resources/p4c-out/fabric/bmv2/default/bmv2.json
@@ -1088,7 +1088,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 32,
+            "line" : 66,
             "column" : 31,
             "source_fragment" : "0x8100; ..."
           }
@@ -1834,7 +1834,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 33,
+            "line" : 67,
             "column" : 31,
             "source_fragment" : "0x8847; ..."
           }
@@ -1910,7 +1910,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 67,
+            "line" : 87,
             "column" : 32,
             "source_fragment" : "64; ..."
           }
@@ -2025,7 +2025,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 33,
+            "line" : 67,
             "column" : 31,
             "source_fragment" : "0x8847; ..."
           }
@@ -2101,7 +2101,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 67,
+            "line" : 87,
             "column" : 32,
             "source_fragment" : "64; ..."
           }
@@ -2216,7 +2216,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 33,
+            "line" : 67,
             "column" : 31,
             "source_fragment" : "0x8847; ..."
           }
@@ -2292,7 +2292,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 67,
+            "line" : 87,
             "column" : 32,
             "source_fragment" : "64; ..."
           }
@@ -2359,7 +2359,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 35,
+            "line" : 69,
             "column" : 31,
             "source_fragment" : "0x0800; ..."
           }
@@ -2378,7 +2378,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 35,
+            "line" : 69,
             "column" : 31,
             "source_fragment" : "0x0800; ..."
           }
@@ -3737,7 +3737,7 @@
             "filename" : "include/control/packetio.p4",
             "line" : 43,
             "column" : 16,
-            "source_fragment" : "hdr.vlan_tag.isValid() && fabric_metadata.pop_vlan_when_packet_in"
+            "source_fragment" : "hdr.vlan_tag.isValid() && fabric_metadata.pop_vlan_when_packet_in == true"
           },
           "expression" : {
             "type" : "expression",
@@ -3757,11 +3757,21 @@
               "right" : {
                 "type" : "expression",
                 "value" : {
-                  "op" : "d2b",
-                  "left" : null,
+                  "op" : "==",
+                  "left" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "d2b",
+                      "left" : null,
+                      "right" : {
+                        "type" : "field",
+                        "value" : ["scalars", "fabric_metadata_t.pop_vlan_when_packet_in"]
+                      }
+                    }
+                  },
                   "right" : {
-                    "type" : "field",
-                    "value" : ["scalars", "fabric_metadata_t.pop_vlan_when_packet_in"]
+                    "type" : "bool",
+                    "value" : true
                   }
                 }
               }
diff --git a/pipelines/fabric/src/main/resources/p4c-out/bmv2/fabric.p4info b/pipelines/fabric/src/main/resources/p4c-out/fabric/bmv2/default/p4info.txt
similarity index 100%
rename from pipelines/fabric/src/main/resources/p4c-out/bmv2/fabric.p4info
rename to pipelines/fabric/src/main/resources/p4c-out/fabric/bmv2/default/p4info.txt