layers: Setup for Best Practices Val object

Change-Id: I3641e2d69b1f6874c7c6eed70d2690476ac300ef
diff --git a/scripts/layer_chassis_generator.py b/scripts/layer_chassis_generator.py
index bc53398..1b6e9d9 100644
--- a/scripts/layer_chassis_generator.py
+++ b/scripts/layer_chassis_generator.py
@@ -239,6 +239,7 @@
     LayerObjectTypeParameterValidation,         // Instance or device parameter validation layer object
     LayerObjectTypeObjectTracker,               // Instance or device object tracker layer object
     LayerObjectTypeCoreValidation,              // Instance or device core validation layer object
+    LayerObjectTypeBestPractices,               // Instance or device best practices layer object
 };
 
 struct TEMPLATE_STATE {
@@ -289,6 +290,7 @@
 struct CHECK_ENABLED {
     bool gpu_validation;
     bool gpu_validation_reserve_binding_slot;
+    bool best_practices;
 
     void SetAll(bool value) { std::fill(&gpu_validation, &gpu_validation_reserve_binding_slot + 1, value); }
 };
@@ -475,6 +477,9 @@
 #if BUILD_CORE_VALIDATION
 #include "core_validation.h"
 #endif
+#if BUILD_BEST_PRACTICES
+#include "best_practices.h"
+#endif
 
 namespace vulkan_layer_chassis {
 
@@ -840,6 +845,14 @@
     core_checks->container_type = LayerObjectTypeCoreValidation;
     core_checks->api_version = api_version;
 #endif
+#if BUILD_BEST_PRACTICES
+    auto best_practices = new BestPractices;
+    if (local_enables.best_practices) {
+        local_object_dispatch.emplace_back(best_practices);
+    }
+    best_practices->container_type = LayerObjectTypeBestPractices;
+    best_practices->api_version = api_version;
+#endif
 
     // If handle wrapping is disabled via the ValidationFeatures extension, override build flag
     if (local_disables.handle_wrapping) {
@@ -899,6 +912,12 @@
     core_checks->disabled = framework->disabled;
     core_checks->instance_state = core_checks;
 #endif
+#if BUILD_BEST_PRACTICES
+    best_practices->report_data = framework->report_data;
+    best_practices->instance_dispatch_table = framework->instance_dispatch_table;
+    best_practices->enabled = framework->enabled;
+    best_practices->disabled = framework->disabled;
+#endif
 
     for (auto intercept : framework->object_dispatch) {
         intercept->PostCallRecordCreateInstance(pCreateInfo, pAllocator, pInstance, result);
@@ -1039,6 +1058,13 @@
         device_interceptor->object_dispatch.emplace_back(core_checks);
     }
 #endif
+#if BUILD_BEST_PRACTICES
+    auto best_practices = new BestPractices;
+    best_practices->container_type = LayerObjectTypeBestPractices;
+    if (instance_interceptor->enabled.best_practices) {
+        device_interceptor->object_dispatch.emplace_back(best_practices);
+    }
+#endif
 
     // Set per-intercept common data items
     for (auto dev_intercept : device_interceptor->object_dispatch) {