build 和 arch 配置链

输入范围

LMDZ.COMMON-6.3\LMDZ.COMMON\arch
LMDZ.COMMON-6.3\LMDZ.COMMON\makelmdz
LMDZ.COMMON-6.3\LMDZ.COMMON\makelmdz_fcm
LMDZ.COMMON-6.3\LMDZ.COMMON\create_make_gcm
LMDZ.COMMON-6.3\LMDZ.COMMON\build_gcm
LMDZ.COMMON-6.3\LMDZ.COMMON\bld.cfg

Mars 运行参与度:构建期必经/条件经过。Mars 可执行文件本身运行时不经过这些脚本;但编译 Mars 目标、选择 phymars、并行宏、IOIPSL/XIOS、NetCDF 和 FFT/MKL 等能力时,这些配置决定源码如何预处理、编译和链接。

顶层文件

文件 作用
makelmdz 旧 makefile 构建入口:解析维度、物理包、并行、I/O 和 CPP key,生成源码列表和 makefile,再调用 make。
create_make_gcm 扫描传入源码目录,生成 makefile 规则、库依赖、include 路径和主程序链接规则。
makelmdz_fcm 主构建入口:解析选项,支持 -clean,生成 FCM config,生成 libf/misc/version_control.F90,并驱动 bld.cfg
bld.cfg FCM build 配置模板,声明 source groups、toolchain、CPP/FPP keys、外部依赖排除和输出。
build_gcm 简短 bash wrapper,检查 dimensions.h 防止并发编译冲突后调用构建。

arch 目录约定

arch/ 下每个目标平台通常有同名前缀的三类文件:

后缀 内容
.fcm FCM/编译变量:%COMPILER%LINK%MAKE%CPP_FLAGS%CPP_DEF%BASE_FFLAGS%PROD_FFLAGS%DEBUG_FFLAGS%MPI_FFLAGS%OMP_FFLAGS、link flags 等。
.path 环境路径:NETCDF_*IOIPSL_*XIOS_* include/lib 路径和库名。
.env 机器环境初始化,如 module load 或导出 NetCDF/HDF5 路径;不是每个 arch 都有。

例如 arch-gfortran.fcm 使用 gfortran/gcc/make,定义 CPP_DEF LAPACKFPP_DEF NC_DOUBLE 和 real*8 默认编译参数;arch-gfortran.path$NETCDF$PWD/ioipsl../XIOS 组织库路径。

makelmdz 旧构建链

  1. 解析 -d 维度、-p 物理包、-parallel none/mpi/omp/mpi_omp-io ioipsl/mix/xios-cpp-arch 等选项。
  2. 依据物理包名计算 phys_root,例如 mars 归为 Mars 物理根。
  3. 根据物理包和选项追加 CPP_PHYSCPP_EARTHCPP_PARACPP_MPICPP_OMPCPP_IOIPSLCPP_XIOS 等 key。
  4. newstart/start2archive 禁止并行编译;对 1D 目标禁止并行。
  5. 调用 grid/dimension/makdim 生成 dimensions.h,可对某些物理包生成 bands/scatterers include。
  6. 按维度选择 dyn3ddyn3dpardyn3d_commonfiltrezphy_commonphy<physique> 等源码目录。
  7. 若配置或源码列表变化,调用 ./create_make_gcm $src_dirs 重新生成 makefile。
  8. CPP_KEY 转成 -D... 加入编译 flag,调用 make 构建目标主程序或库。

create_make_gcm

create_make_gcm 从传入目录扫描 .F/.F90/.h,生成静态库和可执行文件规则。它设置:

FCM 构建链

makelmdz_fcmbld.cfg 使用 FCM 配置:

  1. makelmdz_fcm -arch <name>arch/arch-<name>.path.env.fcm 链接为当前工作目录的 arch.path/env/fcm
  2. source arch.envarch.path,得到 NetCDF、IOIPSL、XIOS 等路径。
  3. 解析物理、并行、I/O、维度和 CPP key,生成 config.fcmarch.opt 等 FCM 输入。
  4. bld.cfg include arch.fcmconfig.fcm,声明 %LIBF 下的 source groups:dynphysdyn_physgridfiltrezmiscdyn3d_commonphy_commonaerono 等;当前源码已移除 src::evolution %EVOLUTION
  5. bld.cfg 指定 bld::tool::fc/cc/ld/ar/makecppflags/fppflagscppkeys/fppkeys,并排除外部依赖如 netcdfioipslxiosmpif.h

Mars 相关选择点

复现要点

待确认

相关页面