Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
assume mmap is not functional for us on macos>=11 as memory accesses are restricted...
[simgrid.git] / src / smpi / internals / smpi_config.cpp
index e459692..4fe4b7a 100644 (file)
@@ -1,12 +1,31 @@
-/* Copyright (c) 2008-2022. The SimGrid Team. All rights reserved.          */
+/* Copyright (c) 2008-2023. The SimGrid Team. All rights reserved.          */
 
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
-#include "smpi_config.hpp"
+
+#if defined(_GNU_SOURCE)
+  #define DEFINED_GNUSOURCE 1
+#else
+  #define _GNU_SOURCE
+#endif
+
+#if defined(__linux__)
+  #include <features.h>
+//inspired by https://stackoverflow.com/a/70211227
+  #if not defined(__USE_GNU)
+    #define __MUSL__
+  #endif
+#endif
+
+#ifndef DEFINED_GNUSOURCE
+  #undef _GNU_SOURCE
+#endif
+
 #include "include/xbt/config.hpp"
-#include "mc/mc.h"
 #include "private.hpp"
 #include "smpi_coll.hpp"
+#include "smpi_config.hpp"
+#include "src/mc/mc.h"
 #include "xbt/ex.h"
 #include "xbt/parse_units.hpp"
 
 # ifndef MAC_OS_X_VERSION_10_12
 #   define MAC_OS_X_VERSION_10_12 101200
 # endif
-constexpr bool HAVE_WORKING_MMAP = (MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_12);
-#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__sun) || defined(__HAIKU__)
+# ifndef __MAC_11_0
+#   define __MAC_11_0 110000
+# endif
+
+constexpr bool HAVE_WORKING_MMAP = ((MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_12) && (MAC_OS_X_VERSION_MIN_REQUIRED < __MAC_11_0));
+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__sun) || defined(__HAIKU__) || defined(__MUSL__)
 constexpr bool HAVE_WORKING_MMAP = false;
 #else
 constexpr bool HAVE_WORKING_MMAP = true;
@@ -41,7 +64,7 @@ simgrid::config::Flag<std::string> _smpi_cfg_host_speed_string{
     [](const std::string& str) {
       _smpi_cfg_host_speed = xbt_parse_get_speed("smpi/host-speed", 1, str, "option smpi/host-speed");
       xbt_assert(_smpi_cfg_host_speed > 0.0, "Invalid value (%s) for 'smpi/host-speed': it must be positive.",
-                 _smpi_cfg_host_speed_string.get().c_str());
+                 str.c_str());
     }};
 
 simgrid::config::Flag<bool> _smpi_cfg_simulate_computation{
@@ -272,7 +295,12 @@ void smpi_init_options_internal(bool called_by_smpi_main)
   simgrid::config::declare_flag<std::string>(
       "smpi/or", "Small messages timings (MPI_Recv minimum time for small messages)", "0:0:0:0:0");
 
-  simgrid::config::declare_flag<bool>("smpi/finalization-barrier", "Do we add a barrier in MPI_Finalize or not", false);
+  simgrid::config::declare_flag<bool>("smpi/barrier-finalization", {"smpi/finalization-barrier"},
+                                      "Do we add a barrier in MPI_Finalize or not", false);
+  simgrid::config::declare_flag<bool>("smpi/barrier-collectives",
+                                      "Inject a barrier in each colllective operation, to detect some deadlocks in "
+                                      "incorrect MPI codes, which may not be triggered in all cases",
+                                      false);
 
   smpi_options_initialized = true;
 }