Skip to content

Commit 4ad7c27

Browse files
committed
Enable compatibility of GNU compilers + MKL
1 parent e97cf59 commit 4ad7c27

4 files changed

Lines changed: 221 additions & 21 deletions

File tree

cmake/FindMKL.cmake

Lines changed: 26 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,19 @@ if(NOT TARGET MKL::MKL)
99

1010
find_path(MKL_INCLUDE mkl_service.h HINTS ${MKLROOT}/include)
1111

12-
find_library(MKL_INTEL NAMES mkl_intel_lp64 HINTS ${MKLROOT}/lib ${MKLROOT}/lib/intel64)
13-
find_library(MKL_INTEL_THREAD NAMES mkl_intel_thread HINTS ${MKLROOT}/lib ${MKLROOT}/lib/intel64)
1412
find_library(MKL_CORE NAMES mkl_core HINTS ${MKLROOT}/lib ${MKLROOT}/lib/intel64)
15-
find_library(MKL_IOMP5 NAMES iomp5
16-
HINTS ENV CMPLR_ROOT
17-
PATH_SUFFIXES lib lib/intel64 linux/compiler/lib/intel64_lin
18-
)
13+
if(CMAKE_CXX_COMPILER_ID MATCHES "Intel")
14+
find_library(MKL_INTERFACE_LIB NAMES mkl_intel_lp64 HINTS ${MKLROOT}/lib ${MKLROOT}/lib/intel64)
15+
find_library(MKL_THREAD NAMES mkl_intel_thread HINTS ${MKLROOT}/lib ${MKLROOT}/lib/intel64)
16+
find_library(MKL_IOMP5 NAMES iomp5
17+
HINTS ENV CMPLR_ROOT
18+
PATH_SUFFIXES lib lib/intel64 linux/compiler/lib/intel64_lin
19+
)
20+
else()
21+
find_library(MKL_INTERFACE_LIB NAMES mkl_gf_lp64 HINTS ${MKLROOT}/lib ${MKLROOT}/lib/intel64)
22+
find_library(MKL_THREAD NAMES mkl_gnu_thread HINTS ${MKLROOT}/lib ${MKLROOT}/lib/intel64)
23+
# With GCC we use system-installed GNU OpenMP
24+
endif()
1925
if(ENABLE_MPI)
2026
find_library(MKL_SCALAPACK NAMES mkl_scalapack_lp64 HINTS ${MKLROOT}/lib ${MKLROOT}/lib/intel64)
2127
find_library(MKL_BLACS_INTELMPI NAMES mkl_blacs_intelmpi_lp64 HINTS ${MKLROOT}/lib ${MKLROOT}/lib/intel64)
@@ -26,22 +32,22 @@ include(FindPackageHandleStandardArgs)
2632
# if all listed variables are TRUE
2733

2834
if(ENABLE_MPI)
29-
find_package_handle_standard_args(MKL DEFAULT_MSG MKL_INTEL MKL_INTEL_THREAD MKL_CORE MKL_SCALAPACK MKL_BLACS_INTELMPI MKL_INCLUDE)
35+
find_package_handle_standard_args(MKL DEFAULT_MSG MKL_INTERFACE_LIB MKL_THREAD MKL_CORE MKL_SCALAPACK MKL_BLACS_INTELMPI MKL_INCLUDE)
3036
else()
31-
find_package_handle_standard_args(MKL MKL_INTEL MKL_INTEL_THREAD MKL_CORE MKL_INCLUDE)
37+
find_package_handle_standard_args(MKL MKL_INTERFACE_LIB MKL_THREAD MKL_CORE MKL_INCLUDE)
3238
endif()
3339

3440
if(MKL_FOUND)
35-
if(NOT TARGET MKL::INTEL)
36-
add_library(MKL::INTEL UNKNOWN IMPORTED)
37-
set_target_properties(MKL::INTEL PROPERTIES
38-
IMPORTED_LOCATION "${MKL_INTEL}"
41+
if(NOT TARGET MKL::INTERFACE_LIB)
42+
add_library(MKL::INTERFACE_LIB UNKNOWN IMPORTED)
43+
set_target_properties(MKL::INTERFACE_LIB PROPERTIES
44+
IMPORTED_LOCATION "${MKL_INTERFACE_LIB}"
3945
INTERFACE_INCLUDE_DIRECTORIES "${MKL_INCLUDE}")
4046
endif()
41-
if(NOT TARGET MKL::INTEL_THREAD)
42-
add_library(MKL::INTEL_THREAD UNKNOWN IMPORTED)
43-
set_target_properties(MKL::INTEL_THREAD PROPERTIES
44-
IMPORTED_LOCATION "${MKL_INTEL_THREAD}"
47+
if(NOT TARGET MKL::THREAD)
48+
add_library(MKL::THREAD UNKNOWN IMPORTED)
49+
set_target_properties(MKL::THREAD PROPERTIES
50+
IMPORTED_LOCATION "${MKL_THREAD}"
4551
INTERFACE_INCLUDE_DIRECTORIES "${MKL_INCLUDE}")
4652
endif()
4753
if(NOT TARGET MKL::CORE)
@@ -72,14 +78,14 @@ if(MKL_FOUND)
7278
set_property(TARGET MKL::MKL PROPERTY
7379
INTERFACE_LINK_LIBRARIES
7480
"-Wl,--start-group"
75-
MKL::INTEL MKL::INTEL_THREAD MKL::CORE MKL::MKL_SCALAPACK MKL::BLACS_INTELMPI
81+
MKL::INTERFACE_LIB MKL::THREAD MKL::CORE MKL::MKL_SCALAPACK MKL::BLACS_INTELMPI
7682
"-Wl,--end-group"
7783
)
7884
else()
7985
set_property(TARGET MKL::MKL PROPERTY
8086
INTERFACE_LINK_LIBRARIES
8187
"-Wl,--start-group"
82-
MKL::INTEL MKL::INTEL_THREAD MKL::CORE
88+
MKL::INTERFACE_LIB MKL::THREAD MKL::CORE
8389
"-Wl,--end-group"
8490
)
8591
endif()
@@ -90,9 +96,9 @@ if(MKL_FOUND)
9096
endif()
9197

9298
if(ENABLE_MPI)
93-
mark_as_advanced(MKL_INCLUDE MKL_INTEL MKL_INTEL_THREAD MKL_CORE MKL_SCALAPACK MKL_BLACS_INTELMPI)
99+
mark_as_advanced(MKL_INCLUDE MKL_INTERFACE_LIB MKL_THREAD MKL_CORE MKL_SCALAPACK MKL_BLACS_INTELMPI)
94100
else()
95-
mark_as_advanced(MKL_INCLUDE MKL_INTEL MKL_INTEL_THREAD MKL_CORE)
101+
mark_as_advanced(MKL_INCLUDE MKL_INTERFACE_LIB MKL_THREAD MKL_CORE)
96102
endif()
97103

98104
endif() # MKL::MKL

toolchain/build_abacus_gcc-mkl.sh

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
#!/bin/bash -e
2+
#SBATCH -J build_abacus_aocl
3+
#SBATCH -N 1
4+
#SBATCH -n 16
5+
#SBATCH -o install.log
6+
#SBATCH -e install.err
7+
8+
# Build ABACUS by gcc-mkl toolchain
9+
10+
# load system env modules at first
11+
# module load mkl compiler mpi
12+
# source path/to/setvars.sh
13+
14+
ABACUS_DIR=..
15+
TOOL=$(pwd)
16+
INSTALL_DIR=$TOOL/install
17+
source $INSTALL_DIR/setup
18+
cd $ABACUS_DIR
19+
ABACUS_DIR=$(pwd)
20+
21+
BUILD_DIR=build_abacus_gcc_mkl
22+
rm -rf $BUILD_DIR
23+
24+
PREFIX=$ABACUS_DIR
25+
ELPA=$INSTALL_DIR/elpa-2025.06.001/cpu
26+
# ELPA=$INSTALL_DIR/elpa-2025.06.001/nvidia # for elpa-gpu
27+
CEREAL=$INSTALL_DIR/cereal-master/include/cereal
28+
LIBXC=$INSTALL_DIR/libxc-7.0.0
29+
RAPIDJSON=$INSTALL_DIR/rapidjson-master
30+
LIBRI=$INSTALL_DIR/LibRI-master
31+
LIBCOMM=$INSTALL_DIR/LibComm-master
32+
USE_CUDA=OFF # set ON to enable gpu-abacus
33+
# NEP_DIR=$INSTALL_DIR/NEP_CPU-main
34+
# LIBTORCH=$INSTALL_DIR/libtorch-2.1.2/share/cmake/Torch
35+
# LIBNPY=$INSTALL_DIR/libnpy-1.0.1/include
36+
# DEEPMD=$HOME/apps/anaconda3/envs/deepmd
37+
38+
cmake -B $BUILD_DIR -DCMAKE_INSTALL_PREFIX=$PREFIX \
39+
-DCMAKE_CXX_COMPILER=g++ \
40+
-DMPI_CXX_COMPILER=mpicxx \
41+
-DMKLROOT=$MKLROOT \
42+
-DELPA_DIR=$ELPA \
43+
-DCEREAL_INCLUDE_DIR=$CEREAL \
44+
-DLibxc_DIR=$LIBXC \
45+
-DENABLE_LCAO=ON \
46+
-DENABLE_LIBXC=ON \
47+
-DUSE_OPENMP=ON \
48+
-DUSE_ELPA=ON \
49+
-DENABLE_RAPIDJSON=ON \
50+
-DRapidJSON_DIR=$RAPIDJSON \
51+
-DENABLE_LIBRI=ON \
52+
-DLIBRI_DIR=$LIBRI \
53+
-DLIBCOMM_DIR=$LIBCOMM \
54+
-DUSE_CUDA=$USE_CUDA \
55+
# -DCMAKE_CUDA_COMPILER=/path/to/cuda/bin/nvcc \
56+
# -DNEP_DIR=$NEP_DIR \
57+
# -DENABLE_MLALGO=1 \
58+
# -DTorch_DIR=$LIBTORCH \
59+
# -Dlibnpy_INCLUDE_DIR=$LIBNPY \
60+
# -DDeePMD_DIR=$DEEPMD \
61+
# -DENABLE_CUSOLVERMP=ON \
62+
63+
cmake --build $BUILD_DIR -j `nproc`
64+
cmake --install $BUILD_DIR 2>/dev/null
65+
66+
# generate abacus_env.sh
67+
cat << EOF > "${TOOL}/abacus_env.sh"
68+
#!/bin/bash
69+
source $INSTALL_DIR/setup
70+
export PATH="${PREFIX}/bin":\${PATH}
71+
EOF
72+
73+
# generate information
74+
cat << EOF
75+
========================== usage =========================
76+
Done!
77+
To use the installed ABACUS version
78+
You need to source ${TOOL}/abacus_env.sh first !
79+
EOF

toolchain/install_abacus_toolchain_new.sh

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,7 @@ EOF
201201
ui_print_color "${UI_GREEN}${UI_BOLD}" "🚀 Build ABACUS with your preferred toolchain:"
202202
ui_print_color "${UI_WHITE}" " ./build_abacus_gnu.sh # GNU toolchain (GCC + OpenBLAS)"
203203
ui_print_color "${UI_WHITE}" " ./build_abacus_intel.sh # Intel toolchain (ICC + MKL)"
204+
ui_print_color "${UI_WHITE}" " ./build_abacus_gcc-mkl.sh # GCC + MKL"
204205
ui_print_color "${UI_WHITE}" " ./build_abacus_gcc-aocl.sh # AMD GCC + AOCL"
205206
ui_print_color "${UI_WHITE}" " ./build_abacus_aocc-aocl.sh # AMD AOCC + AOCL"
206207
echo ""
@@ -220,4 +221,4 @@ EOF
220221
}
221222

222223
# Run main function with all arguments
223-
main "$@"
224+
main "$@"

toolchain/toolchain_gcc-mkl.sh

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
#!/bin/bash
2+
#SBATCH -J install
3+
#SBATCH -N 1
4+
#SBATCH -n 16
5+
#SBATCH -o compile.log
6+
#SBATCH -e compile.err
7+
8+
# Users can easily modify these parameters to customize the build
9+
# Before running this script, ensure you have loaded your system packages
10+
11+
# Compiler Configuration
12+
TOOLCHAIN_COMPILER="gcc-mkl"
13+
WITH_GCC="system"
14+
WITH_AMD="no"
15+
WITH_INTEL="no"
16+
17+
# Math Libraries (Intel MKL recommended)
18+
MATH_MODE="mkl"
19+
WITH_MKL="system"
20+
21+
# MPI Implementation (OpenMPI recommended)
22+
MPI_MODE="openmpi"
23+
WITH_OPENMPI="install"
24+
WITH_4TH_OPENMPI="no" # Set to "yes" for OpenMPI v4, deprecated
25+
WITH_MPICH="no"
26+
27+
# Core Dependencies
28+
WITH_CMAKE="install"
29+
WITH_SCALAPACK="system" # MKL provides ScaLAPACK
30+
WITH_FFTW="system" # MKL provides FFTW
31+
WITH_LIBXC="install"
32+
WITH_ELPA="install"
33+
34+
# Utility Libraries
35+
WITH_CEREAL="install"
36+
WITH_RAPIDJSON="install"
37+
38+
# Advanced Features (EXX calculations)
39+
WITH_LIBRI="install"
40+
WITH_LIBCOMM="install"
41+
42+
# Optional Features (MLALGO support)
43+
WITH_LIBTORCH="no"
44+
WITH_LIBNPY="no"
45+
WITH_NEP="no"
46+
47+
# ELPA-GPU Support (uncomment and modify as needed)
48+
# ENABLE_CUDA="yes"
49+
# GPU_VERSION="75" # Check your GPU compute capability
50+
# export CUDA_PATH="/usr/local/cuda"
51+
52+
# ============================================================================
53+
# Execution Mode Control
54+
# ============================================================================
55+
# Dry-run mode: Show what would be done without actually executing
56+
DRY_RUN_MODE="no" # Set to "yes" to enable dry-run mode
57+
58+
# Pack-run mode: Only check and install required packages
59+
PACK_RUN_MODE="no" # Set to "yes" to enable pack-run mode
60+
61+
# ============================================================================
62+
# Package Version Selection (main/alt versions)
63+
# ============================================================================
64+
# Choose between main (latest stable) and alt (alternative/legacy) versions
65+
# Refer to scripts/package_versions.sh for specific version numbers
66+
67+
CMAKE_VERSION="main" # main=3.31.7, alt=3.30.5
68+
OPENMPI_VERSION="main" # main=5.0.8, alt=4.1.6
69+
ELPA_VERSION="main" # main=2025.06.001, alt=2024.05.001
70+
LIBXC_VERSION="main" # main=7.0.0, alt=6.2.2
71+
# Optional Libraries
72+
LIBTORCH_VERSION="main" # main=2.1.2, alt=1.12.1 (use alt for older GLIBC)
73+
# Note: main(2.1.2) version of LibTorch need glibc > 2.27
74+
# Note: alt(1.12.1) version of LibTorch cannot support DeePMD-Torch for DPA
75+
76+
# Note: GCC-MKL toolchain uses MKL for math libraries (FFTW, ScaLAPACK)
77+
# so OpenBLAS and ScaLAPACK version selections are not applicable
78+
79+
# ============================================================================
80+
# Execute Installation (DO NOT MODIFY BELOW THIS LINE)
81+
# ============================================================================
82+
83+
# Call the main installation script with configured parameters
84+
exec ./install_abacus_toolchain_new.sh \
85+
--with-gcc="$WITH_GCC" \
86+
--math-mode="$MATH_MODE" \
87+
--mpi-mode="$MPI_MODE" \
88+
--with-mkl="$WITH_MKL" \
89+
--with-openmpi="$WITH_OPENMPI" \
90+
--with-mpich="$WITH_MPICH" \
91+
--with-cmake="$WITH_CMAKE" \
92+
--with-scalapack="$WITH_SCALAPACK" \
93+
--with-libxc="$WITH_LIBXC" \
94+
--with-fftw="$WITH_FFTW" \
95+
--with-elpa="$WITH_ELPA" \
96+
--with-cereal="$WITH_CEREAL" \
97+
--with-rapidjson="$WITH_RAPIDJSON" \
98+
--with-libtorch="$WITH_LIBTORCH" \
99+
--with-nep="$WITH_NEP" \
100+
--with-libnpy="$WITH_LIBNPY" \
101+
--with-libri="$WITH_LIBRI" \
102+
--with-libcomm="$WITH_LIBCOMM" \
103+
--with-4th-openmpi="$WITH_4TH_OPENMPI" \
104+
--package-version cmake:"$CMAKE_VERSION" \
105+
--package-version openmpi:"$OPENMPI_VERSION" \
106+
--package-version elpa:"$ELPA_VERSION" \
107+
--package-version libxc:"$LIBXC_VERSION" \
108+
--package-version libtorch:"$LIBTORCH_VERSION" \
109+
${DRY_RUN_MODE:+$([ "$DRY_RUN_MODE" = "yes" ] && echo "--dry-run")} \
110+
${PACK_RUN_MODE:+$([ "$PACK_RUN_MODE" = "yes" ] && echo "--pack-run")} \
111+
${ENABLE_CUDA:+--enable-cuda} \
112+
${GPU_VERSION:+--gpu-ver="$GPU_VERSION"} \
113+
"$@" \
114+
| tee compile.log

0 commit comments

Comments
 (0)