@@ -11,41 +11,41 @@ if (MINGW)
1111elseif (MSVC )
1212 message (STATUS "Detected MSVC — using MSVC settings" )
1313 set (USING_MSVC TRUE )
14+ elseif (APPLE )
15+ message (STATUS "Detected macOS — limited MPI support" )
16+ set (USING_APPLE TRUE )
17+ elseif (UNIX )
18+ message (STATUS "Detected Linux/UNIX — using standard settings" )
19+ set (USING_UNIX TRUE )
1420endif ()
1521
1622# ============================
1723# Options
1824# ============================
1925option (NEXT_FP32 "Use 32-bit floats (scalar)" OFF )
2026option (NEXT_FP64 "Use 64-bit floats (scalar)" ON )
27+ option (NEXT_MPI "Enable MPI support" OFF )
2128
22- # Option: copy final executable to source dir
2329option (NEXT_COPY_TO_CMAKE_SOURCE_DIR "Copy final executable from build dir to source dir" ON )
2430
2531# ============================
2632# Precision modes
2733# ============================
28- set (NEXT_MODES
29- NEXT_FP32
30- NEXT_FP64
31- )
34+ set (NEXT_MODES NEXT_FP32 NEXT_FP64)
3235
33- # Count enabled modes
3436set (NEXT_MODE_COUNT 0)
3537foreach (m ${NEXT_MODES} )
3638 if (${m} )
3739 math (EXPR NEXT_MODE_COUNT "${NEXT_MODE_COUNT} + 1" )
3840 endif ()
3941endforeach ()
4042
41- # Enforce exactly one mode
4243if (NEXT_MODE_COUNT EQUAL 0)
4344 message (FATAL_ERROR "You must enable NEXT_FP64 or NEXT_FP32." )
4445elseif (NEXT_MODE_COUNT GREATER 1)
4546 message (FATAL_ERROR "Enable only one precision mode." )
4647endif ()
4748
48- # Apply compile definitions
4949if (NEXT_FP32)
5050 add_compile_definitions (NEXT_FP32 )
5151elseif (NEXT_FP64)
@@ -62,7 +62,10 @@ file(GLOB ARGPARSE_FILES ${CMAKE_SOURCE_DIR}/argparse/*.cpp)
6262
6363add_executable (next ${SRC_FILES} ${ARGPARSE_FILES} )
6464
65- option (ENABLE_VEC_REPORT "Enable compiler vectorization reports" ON )
65+ # ============================
66+ # Vectorization reports
67+ # ============================
68+ option (ENABLE_VEC_REPORT "Enable compiler vectorization reports" OFF )
6669
6770if (ENABLE_VEC_REPORT)
6871 if (CMAKE_CXX_COMPILER_ID MATCHES "IntelLLVM" )
@@ -74,38 +77,56 @@ if(ENABLE_VEC_REPORT)
7477 endif ()
7578endif ()
7679
77-
7880# ============================
7981# OpenMP
8082# ============================
8183find_package (OpenMP QUIET )
8284if (OpenMP_CXX_FOUND)
8385 message (STATUS "OpenMP detected — enabling multithreading." )
84-
8586 if (MSVC )
86- # Force MSVC to use the modern LLVM backend (supports OpenMP 3.0+ and size_t)
87- # We add it as a compiler option because MSVC's default find_package
88- # often defaults to the legacy /openmp flag.
8987 target_compile_options (next PRIVATE /openmp:llvm )
9088 else ()
9189 target_link_libraries (next PRIVATE OpenMP::OpenMP_CXX )
9290 endif ()
93-
9491else ()
9592 message (STATUS "OpenMP not found — building in single-threaded mode." )
9693endif ()
9794
95+ # ============================
96+ # MPI detection
97+ # ============================
98+ if (NEXT_MPI)
99+ if (USING_UNIX)
100+ # Linux: standard OpenMPI
101+ find_package (MPI REQUIRED )
102+ message (STATUS "MPI (OpenMPI) detected — enabling distributed memory parallelism." )
103+ target_compile_definitions (next PRIVATE NEXT_MPI )
104+ target_link_libraries (next PRIVATE MPI::MPI_CXX )
105+
106+ elseif (USING_MSVC OR USING_MINGW)
107+ # Windows: Microsoft MPI
108+ find_package (MPI REQUIRED )
109+ message (STATUS "MPI (MS-MPI) detected — enabling distributed memory parallelism." )
110+ target_compile_definitions (next PRIVATE NEXT_MPI )
111+ target_link_libraries (next PRIVATE MPI::MPI_CXX )
112+
113+ elseif (USING_APPLE)
114+ message (WARNING "MPI requested, but macOS does not ship MPI by default. Please install OpenMPI via Homebrew (brew install open-mpi)." )
115+ find_package (MPI REQUIRED )
116+ target_compile_definitions (next PRIVATE NEXT_MPI )
117+ target_link_libraries (next PRIVATE MPI::MPI_CXX )
118+ endif ()
119+ endif ()
120+
98121# ============================
99122# HDF5 detection
100123# ============================
101- # MSVC: use vcpkg or prebuilt binaries
102124if (USING_MSVC AND DEFINED ENV{HDF5_DIR})
103125 set (HDF5_ROOT "$ENV{HDF5_DIR} " )
104126 set (CMAKE_PREFIX_PATH "${HDF5_ROOT} ;${CMAKE_PREFIX_PATH} " )
105127endif ()
106128
107129if (USING_MINGW)
108- # MSYS2 MinGW installs HDF5 here
109130 set (CMAKE_PREFIX_PATH "C:/tools/msys64/mingw64" )
110131 message (STATUS "Using MSYS2 MinGW HDF5 path: ${CMAKE_PREFIX_PATH} " )
111132endif ()
0 commit comments