diff --git a/2026/md/gromacs/mac_install.md b/2026/md/gromacs/mac_install.md new file mode 100644 index 0000000..8b7b708 --- /dev/null +++ b/2026/md/gromacs/mac_install.md @@ -0,0 +1,193 @@ +--- +title: 在 macOS 上编译安装 GROMACS 2025.2 +date: 2026-05-17 +tags: [GROMACS, macOS, 分子动力学] +collections: [分子模拟] +summary: 记录在 macOS 上使用 GCC 12、OpenMPI、FFTW 和 OpenCL 编译安装 GROMACS 2025.2 的过程。 +draft: false +featured: false +--- + +# 在 macOS 上编译安装 GROMACS 2025.2 + +本文记录一次在 macOS 上编译 GROMACS 2025.2 的流程:使用 Homebrew 提供 GCC 12,自行编译 CMake、OpenMPI 和 FFTW,然后以 OpenCL + MPI 方式构建 GROMACS。 + +## 目录约定 + +源码压缩包统一放在 `$SOFT_ROOT/compressed` 下,安装结果放回各软件源码目录中的版本子目录。 + +```bash +export SOFT_ROOT=/path/to/biosoft + +export CMAKE_VERSION=4.0.2 +export OPENMPI_VERSION=5.0.8 +export FFTW_VERSION=3.3.10 +export GROMACS_VERSION=2025.2 + +export CMAKE_HOME="$SOFT_ROOT/cmake-$CMAKE_VERSION/v$CMAKE_VERSION" +export OPENMPI_HOME="$SOFT_ROOT/openmpi-$OPENMPI_VERSION/v$OPENMPI_VERSION" +export FFTW_HOME="$SOFT_ROOT/fftw-$FFTW_VERSION/v$FFTW_VERSION-float" +export GROMACS_HOME="$SOFT_ROOT/gromacs-$GROMACS_VERSION/v$GROMACS_VERSION" +``` + +## 安装 GCC 12 + +开始时尝试从源码编译 GCC 12.1.0: + +```bash +cd "$SOFT_ROOT" +tar -zxf compressed/gcc-12.1.0.tar.gz +cd gcc-12.1.0 +./contrib/download_prerequisites + +mkdir -p v12.1.0 build +cd build +../configure \ + --prefix="$SOFT_ROOT/gcc-12.1.0/v12.1.0" \ + --enable-languages=c,c++ \ + --disable-multilib +``` + +本次 `make -j5` 编译未通过,实际改用 Homebrew 安装 GCC 12: + +```bash +brew install gcc@12 +``` + +后续命令使用 Homebrew 的 GCC 路径: + +```bash +export CC=/opt/homebrew/bin/gcc-12 +export CXX=/opt/homebrew/bin/g++-12 +``` + +## 安装 CMake + +```bash +cd "$SOFT_ROOT" +tar -zxf "./compressed/cmake-$CMAKE_VERSION.tar.gz" +cd "cmake-$CMAKE_VERSION" + +mkdir -p "v$CMAKE_VERSION" +./bootstrap --prefix="$CMAKE_HOME" +make -j5 +make install +``` + +## 安装 OpenMPI + +```bash +cd "$SOFT_ROOT" +tar zxf "./compressed/openmpi-$OPENMPI_VERSION.tar.gz" +cd "openmpi-$OPENMPI_VERSION" + +mkdir -p "v$OPENMPI_VERSION" build +cd build + +export CC=/opt/homebrew/bin/gcc-12 +export CXX=/opt/homebrew/bin/g++-12 + +../configure --prefix="$OPENMPI_HOME" +make -j5 +make check +make install +``` + +## 安装 FFTW + +GROMACS 使用单精度 FFTW,因此这里打开 `--enable-float`,并使用 OpenMPI 提供的 `mpicc` 作为 C 编译器。 + +```bash +cd "$SOFT_ROOT" +tar -zxf "./compressed/fftw-$FFTW_VERSION.tar.gz" +cd "fftw-$FFTW_VERSION" + +mkdir -p "v$FFTW_VERSION" build +cd build + +export CC=/opt/homebrew/bin/gcc-12 +export MPICC="$OPENMPI_HOME/bin/mpicc" + +../configure \ + --prefix="$FFTW_HOME" \ + --enable-float \ + --enable-threads \ + --enable-openmp \ + --enable-mpi \ + CC="$MPICC" \ + CPPFLAGS="-I$OPENMPI_HOME/include" \ + LDFLAGS="-L$OPENMPI_HOME/lib" \ + LT_SYS_LIBRARY_PATH="$OPENMPI_HOME/lib" + +make -j5 +make check +make install +``` + +## 安装 GROMACS + +macOS 上使用 OpenCL 构建 GPU 版本,并打开 MPI 支持。 + +```bash +cd "$SOFT_ROOT" +tar zxf "./compressed/gromacs-$GROMACS_VERSION.tar.gz" +cd "gromacs-$GROMACS_VERSION" + +mkdir -p "v$GROMACS_VERSION" build +cd build + +export PATH="$OPENMPI_HOME/bin:$PATH" +export CPPFLAGS="-I$FFTW_HOME/include" +export LDFLAGS="-L$FFTW_HOME/lib" + +"$CMAKE_HOME/bin/cmake" .. \ + -DGMX_GPU=OpenCL \ + -DCMAKE_INSTALL_PREFIX="$GROMACS_HOME" \ + -DGMX_MPI=ON \ + -DCMAKE_C_COMPILER=/opt/homebrew/bin/gcc-12 \ + -DCMAKE_CXX_COMPILER=/opt/homebrew/bin/g++-12 \ + -DGMX_FFT_LIBRARY=fftw3 \ + -DGMX_BUILD_OWN_FFTW=OFF \ + -DMPI_C_COMPILER="$OPENMPI_HOME/bin/mpicc" + +make -j5 +make check +make install +``` + +安装完成后可先确认 `gmx_mpi` 是否可执行: + +```bash +"$GROMACS_HOME/bin/gmx_mpi" +``` + +## CUDA 构建参考 + +如果是在 Linux + CUDA 环境下构建,可以参考下面的参数形态,按实际 CUDA、GCC 和安装目录调整路径: + +```bash +export LD_LIBRARY_PATH="/path/to/gcc/lib64:$LD_LIBRARY_PATH" + +cmake .. \ + -DREGRESSIONTEST_DOWNLOAD=ON \ + -DGMX_GPU=CUDA \ + -DCMAKE_INSTALL_PREFIX=/path/to/gromacs/install \ + -DGMX_MPI=ON \ + -DCMAKE_CUDA_ARCHITECTURES=89 \ + -DCMAKE_CUDA_COMPILER=/usr/local/cuda/bin/nvcc \ + -DCMAKE_C_COMPILER=/path/to/gcc/bin/gcc \ + -DCMAKE_CXX_COMPILER=/path/to/gcc/bin/g++ +``` + +## 简单测试 + +准备好 `ions.mdp`、`mix_two_mol_solv.gro` 和 `topol.top` 后,可以用 `grompp` 生成测试输入文件。 + +```bash +cd /path/to/gromacs-test +"$GROMACS_HOME/bin/gmx_mpi" grompp \ + -f ions.mdp \ + -c mix_two_mol_solv.gro \ + -p topol.top \ + -o ion.tpr +```