Files
axmd/2026/md/gromacs/mac_install.md
T
2026-05-17 12:03:00 +08:00

194 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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
```