+XBT_PUBLIC void surf_host_model_init_ptask_L07();
+
+XBT_PUBLIC void surf_disk_model_init_default();
+
+/* --------------------
+ * Model Descriptions
+ * -------------------- */
+/** @brief Resource model description */
+struct surf_model_description_t {
+ const char* name;
+ const char* description;
+ std::function<void()> model_init_preparse;
+};
+
+XBT_PUBLIC const surf_model_description_t* find_model_description(const std::vector<surf_model_description_t>& table,
+ const std::string& name);
+XBT_PUBLIC void model_help(const char* category, const std::vector<surf_model_description_t>& table);
+
+#define SIMGRID_REGISTER_PLUGIN(id, desc, init) \
+ static void XBT_ATTRIB_CONSTRUCTOR(800) _XBT_CONCAT3(simgrid_, id, _plugin_register)() \
+ { \
+ surf_plugin_description().emplace_back(surf_model_description_t{_XBT_STRINGIFY(id), (desc), (init)}); \
+ }
+
+/** @brief The list of all available plugins */
+inline auto& surf_plugin_description() // Function to avoid static initialization order fiasco
+{
+ static std::vector<surf_model_description_t> plugin_description_table;
+ return plugin_description_table;
+}
+/** @brief The list of all available optimization modes (both for cpu and networks).
+ * These optimization modes can be set using --cfg=cpu/optim:... and --cfg=network/optim:... */
+XBT_PUBLIC_DATA const std::vector<surf_model_description_t> surf_optimization_mode_description;
+/** @brief The list of all cpu models (pick one with --cfg=cpu/model) */
+XBT_PUBLIC_DATA const std::vector<surf_model_description_t> surf_cpu_model_description;
+/** @brief The list of all network models (pick one with --cfg=network/model) */
+XBT_PUBLIC_DATA const std::vector<surf_model_description_t> surf_network_model_description;
+/** @brief The list of all disk models (pick one with --cfg=disk/model) */
+XBT_PUBLIC_DATA const std::vector<surf_model_description_t> surf_disk_model_description;
+/** @brief The list of all host models (pick one with --cfg=host/model:) */
+XBT_PUBLIC_DATA const std::vector<surf_model_description_t> surf_host_model_description;