Support compiling fabric.p4 with arbitrary table sizes

By using preprocessor macros. Also, change expected location of tofino
compiler outputs when building the pipeconf.

Change-Id: I98ea95b61d57e725c88e52a3bfd95618f3c407cb
diff --git a/pipelines/fabric/src/main/resources/include/control/acl.p4 b/pipelines/fabric/src/main/resources/include/control/acl.p4
index 9eece9a..5b8718b 100644
--- a/pipelines/fabric/src/main/resources/include/control/acl.p4
+++ b/pipelines/fabric/src/main/resources/include/control/acl.p4
@@ -82,7 +82,7 @@
         }
 
         const default_action = nop_acl();
-        size = 128;
+        size = ACL_TABLE_SIZE;
         counters = acl_counter;
     }
 
diff --git a/pipelines/fabric/src/main/resources/include/control/filtering.p4 b/pipelines/fabric/src/main/resources/include/control/filtering.p4
index 638d9a1..cc8e313 100644
--- a/pipelines/fabric/src/main/resources/include/control/filtering.p4
+++ b/pipelines/fabric/src/main/resources/include/control/filtering.p4
@@ -61,6 +61,7 @@
         }
         const default_action = deny();
         counters = ingress_port_vlan_counter;
+        size = PORT_VLAN_TABLE_SIZE;
     }
 
     /*
@@ -94,6 +95,7 @@
         }
         const default_action = set_forwarding_type(FWD_BRIDGING);
         counters = fwd_classifier_counter;
+        size = FWD_CLASSIFIER_TABLE_SIZE;
     }
 
     apply {
diff --git a/pipelines/fabric/src/main/resources/include/control/forwarding.p4 b/pipelines/fabric/src/main/resources/include/control/forwarding.p4
index e5f89cb..89544ea 100644
--- a/pipelines/fabric/src/main/resources/include/control/forwarding.p4
+++ b/pipelines/fabric/src/main/resources/include/control/forwarding.p4
@@ -40,6 +40,9 @@
         bridging_counter.count();
     }
 
+    // FIXME: using ternary for eth_dst prevents our ability to scale in
+    //  bridging heavy environments. Do we really need ternary? Can we come up
+    //  with a multi-table/algorithmic approach?
     table bridging {
         key = {
             fabric_metadata.vlan_id: exact @name("vlan_id");
@@ -51,6 +54,7 @@
         }
         const default_action = nop();
         counters = bridging_counter;
+        size = BRIDGING_TABLE_SIZE;
     }
 
     /*
@@ -74,6 +78,7 @@
         }
         const default_action = nop();
         counters = mpls_counter;
+        size = MPLS_TABLE_SIZE;
     }
 
     /*
@@ -90,6 +95,9 @@
         routing_v4_counter.count();
     }
 
+    #ifdef _ROUTING_V4_TABLE_ANNOT
+    _ROUTING_V4_TABLE_ANNOT
+    #endif
     table routing_v4 {
         key = {
             hdr.ipv4.dst_addr: lpm @name("ipv4_dst");
@@ -101,6 +109,7 @@
         }
         const default_action = nop();
         counters = routing_v4_counter;
+        size = ROUTING_V4_TABLE_SIZE;
     }
 
 #ifdef WITH_IPV6
@@ -124,6 +133,7 @@
         }
         const default_action = nop();
         counters = routing_v6_counter;
+        size = ROUTING_V6_TABLE_SIZE;
     }
 #endif // WITH_IPV6
 
diff --git a/pipelines/fabric/src/main/resources/include/control/next.p4 b/pipelines/fabric/src/main/resources/include/control/next.p4
index 98b3812..88e870c 100644
--- a/pipelines/fabric/src/main/resources/include/control/next.p4
+++ b/pipelines/fabric/src/main/resources/include/control/next.p4
@@ -81,6 +81,7 @@
         }
         const default_action = nop();
         counters = next_vlan_counter;
+        size = NEXT_VLAN_TABLE_SIZE;
     }
 
 #ifdef WITH_XCONNECT
@@ -112,6 +113,7 @@
         }
         counters = xconnect_counter;
         const default_action = nop();
+        size = XCONNECT_NEXT_TABLE_SIZE;
     }
 #endif // WITH_XCONNECT
 
@@ -150,6 +152,7 @@
         }
         const default_action = nop();
         counters = simple_counter;
+        size = SIMPLE_NEXT_TABLE_SIZE;
     }
 #endif // WITH_SIMPLE_NEXT
 
@@ -158,7 +161,8 @@
      * Hashed table.
      * Execute an action profile selector based on next id.
      */
-    action_selector(HashAlgorithm.crc16, 32w64, 32w16) hashed_selector;
+    @max_group_size(HASHED_SELECTOR_MAX_GROUP_SIZE)
+    action_selector(HashAlgorithm.crc16, HASHED_ACT_PROFILE_SIZE, 32w16) hashed_selector;
     direct_counter(CounterType.packets_and_bytes) hashed_counter;
 
     action output_hashed(port_num_t port_num) {
@@ -195,6 +199,7 @@
         implementation = hashed_selector;
         counters = hashed_counter;
         const default_action = nop();
+        size = HASHED_NEXT_TABLE_SIZE;
     }
 #endif // WITH_HASHED_NEXT
 
@@ -220,6 +225,7 @@
         }
         counters = multicast_counter;
         const default_action = nop();
+        size = MULTICAST_NEXT_TABLE_SIZE;
     }
 
     apply {
@@ -293,6 +299,7 @@
         }
         const default_action = nop();
         counters = egress_vlan_counter;
+        size = EGRESS_VLAN_TABLE_SIZE;
     }
 
     apply {