Skip to content

Commit e3457f9

Browse files
author
Mathieu Taillefumier
committed
[cmake] More work
1 parent 7315eae commit e3457f9

32 files changed

+156
-358
lines changed

.ci/uenv-recipes/tmlqcd/daint-gh200/repo/packages/lemonio/package.py

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,13 @@
22
#
33
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
44

5-
from spack_repo.builtin.build_systems.autotools import AutotoolsPackage
5+
from spack_repo.builtin.build_systems import cmake
6+
from spack_repo.builtin.build_systems.cmake import CMakePackage, generator
67

78

89
from spack.package import *
910

10-
class Lemonio(AutotoolsPackage):
11+
class Lemonio(AutotoolsPackage, CMakePackage):
1112
"""LEMON: Lightweight Parallel I/O library for Lattice QCD."""
1213

1314
homepage = "https://github.com/etmc/lemon"
@@ -16,13 +17,18 @@ class Lemonio(AutotoolsPackage):
1617

1718
version('master', branch='master')
1819

19-
depends_on("autoconf", type="build", when="@master build_system=autotools")
20-
depends_on("automake", type="build", when="@master build_system=autotools")
21-
depends_on("libtool", type="build", when="@master build_system=autotools")
20+
depends_on("libtool", type="build", when="@master build_system=cmake")
21+
depends_on("cmake", type="build", when="master build_system=cmake")
2222

2323
depends_on('mpi')
2424

25-
def configure_args(self):
26-
args = []
27-
args.append('CC={0}'.format(self.spec['mpi'].mpicc))
25+
generator("ninja")
26+
27+
class CMakeBuilder(cmake.CMakeBuilder):
28+
def cmake_args(self):
29+
spec = self.spec
30+
args = [
31+
self.define_from_variant("DBUILD_SHARED_LIBS" "shared"),
32+
]
2833
return args
34+

.github/workflows/basic-build.yaml

Lines changed: 11 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -61,20 +61,19 @@ jobs:
6161
repository: etmc/lemon
6262
path: lemon
6363

64-
- name: autogen_lemon
64+
- name: create_builddir_lemon
6565
working-directory: ${{github.workspace}}/lemon
6666
run: |
67-
autoreconf -i -f
6867
mkdir build
6968
7069
- name: build_lemon
7170
working-directory: ${{github.workspace}}/lemon/build
7271
run: |
7372
CC=mpicc \
7473
CFLAGS="-march=haswell -mtune=haswell -O2" \
75-
../configure --prefix=$(pwd)/install_dir
74+
cmake -DCMAKE_INSTALL_PREFIX=$(pwd)/install_dir ..
7675
make -j
77-
make install
76+
make install > config.log
7877
7978
- name: Archive lemon config.log
8079
if: ${{ always() }}
@@ -92,28 +91,19 @@ jobs:
9291
shell: bash
9392
run: mkdir ${{github.workspace}}/main/build
9493

95-
- name: autogen_tmlqcd
96-
working-directory: ${{github.workspace}}/main
97-
run: autoconf
98-
9994
- name: configure_and_build
10095
shell: bash
10196
working-directory: ${{github.workspace}}/main/build
10297
run: |
103-
CC=mpicc CXX=mpicxx \
104-
LDFLAGS="-fopenmp" \
10598
CFLAGS="-O2 -mtune=haswell -march=haswell -mavx2 -mfma -DOMPI_SKIP_MPICXX -fopenmp" \
10699
CXXFLAGS="-O2 -mtune=haswell -march=haswell -mavx2 -mfma -DOMPI_SKIP_MPICXX -fopenmp" \
107-
../configure \
108-
--enable-mpi \
109-
--with-mpidimension=4 \
110-
--enable-omp \
111-
--disable-sse2 \
112-
--disable-sse3 \
113-
--with-limedir=${{github.workspace}}/lime/build/install_dir \
114-
--with-lemondir=${{github.workspace}}/lemon/build/install_dir \
115-
--with-lapack="-lblas -llapack" || cat config.log
116-
make -j
100+
cmake -DCMAKE_PREFIX_PATH="${{github.workspace}}/lime/build/install_dir;${{github.workspace}}/lemon/build/install_dir" \
101+
-DTM_USE_MPI=ON \
102+
-DTM_USE_OMP=ON \
103+
-DTM_USE_LEMON=ON \
104+
.. > config.log
105+
cat config.log
106+
make -j
117107
118108
- name: Archive tmLQCD config.log
119109
if: ${{ always() }}
@@ -125,7 +115,7 @@ jobs:
125115
- name: nf2_rgmixedcg_hmc_tmcloverdetratio
126116
working-directory: ${{github.workspace}}/main/build
127117
run: |
128-
mpirun -np 2 ./hmc_tm \
118+
mpirun -np 2 src/bin/hmc_tm \
129119
-f ../doc/sample-input/sample-hmc-rgmixedcg-tmcloverdetratio.input
130120
131121
- name: Archive nf2_rgmixedcg_hmc_tmcloverdetratio output

CMakeLists.txt

Lines changed: 26 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,6 @@ endif()
2323
# =================================================================================================
2424
# PROJECT AND VERSION
2525
include(CMakeDependentOption)
26-
include(CheckSymbolExists)
27-
include(CheckLibraryExists)
28-
include(CheckFunctionExists)
2926
include(GNUInstallDirs)
3027

3128
cmake_policy(SET CMP0048 NEW)
@@ -56,16 +53,18 @@ endif()
5653

5754
find_package(PkgConfig)
5855

59-
# ##############################################################################
60-
# Define the paths for static libraries and executables
61-
# ##############################################################################
62-
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY
63-
${cp2k_BINARY_DIR}/lib
64-
CACHE PATH "Single output directory for building all libraries.")
65-
6656
# Search for rocm in common locations
67-
foreach(__var ROCM_ROOT CRAY_ROCM_ROOT ORNL_ROCM_ROOT CRAY_ROCM_PREFIX
68-
ROCM_PREFIX CRAY_ROCM_DIR)
57+
foreach(
58+
__var
59+
ROCM_ROOT
60+
HIP_ROOT
61+
HIP_PATH
62+
CRAY_ROCM_ROOT
63+
ORNL_ROCM_ROOT
64+
CRAY_ROCM_PREFIX
65+
ROCM_PREFIX
66+
CRAY_ROCM_DIR
67+
ROCM_PATH)
6968
if($ENV{${__var}})
7069
list(APPEND CMAKE_PREFIX_PATH $ENV{__var})
7170
set(ROCM_PATH
@@ -75,7 +74,7 @@ foreach(__var ROCM_ROOT CRAY_ROCM_ROOT ORNL_ROCM_ROOT CRAY_ROCM_PREFIX
7574
endforeach()
7675

7776
option(CMAKE_POSITION_INDEPENDENT_CODE "Enable position independent code" ON)
78-
option(BUILD_SHARED_LIBS "Enable shared library" ON)
77+
option(BUILD_SHARED_LIBS "Enable shared library" OFF)
7978
option(TM_USE_FFTW "Enable fftw support" OFF)
8079
option(TM_USE_MPI "Enable MPI support" OFF)
8180
option(TM_USE_CUDA "Enable QUDA support" OFF)
@@ -93,15 +92,13 @@ set(TM_ENABLE_ALIGNMENT
9392
set_property(CACHE TM_ENABLE_ALIGNMENT PROPERTY STRINGS "auto" "none" "16" "32"
9493
"64")
9594

96-
option(TM_BGL_DRAM "use BGL dram window (BGL only!)" ON)
9795
option(TM_USE_OPTIMIZATION "enable optimisation" ON)
9896
option(TM_USE_GAUGECOPY "Enable use of a copy of the gauge field" ON)
9997
option(TM_USE_HALFSPINOR "Use a Dirac Op. with halfspinor exchange" ON)
10098
option(TM_USE_TSPLITPAR "Enable timeslice-splitted communications" ON)
10199
option(TM_USE_QPHIX "enable QPhiX" OFF)
102100
option(TM_USE_SHMEM "Use shmem API" OFF)
103101
option(TM_USE_QUDA "Enable QUDA support" OFF)
104-
option(TM_USE_GPROF "Enable gprof profiler" OFF)
105102
option(TM_ENABLE_WARNINGS "Enable all warnings" ON)
106103
option(TM_ENABLE_TESTS "Enable tests" OFF)
107104

@@ -203,7 +200,7 @@ if(TM_USE_HDF5)
203200
endif()
204201

205202
if(TM_USE_LEMON)
206-
find_package(Clemon REQUIRED)
203+
find_package(lemon REQUIRED)
207204
endif()
208205

209206
find_package(CLime REQUIRED)
@@ -231,18 +228,20 @@ endif()
231228

232229
if(TM_USE_CUDA OR QUDA_TARGET_CUDA)
233230
enable_language(CUDA)
231+
232+
# placeholder for nvhpc for future use
234233
if(TM_USE_NVHPC)
235234
find_package(NVHPC REQUIRED COMPONENTS CUDA MATH HOSTUTILS NCCL)
236235
else()
237236
find_package(CUDAToolkit REQUIRED)
238237
endif()
239238
endif()
240239

240+
# We may want to use hip-cuda for development or debugging purposes especially
241+
# if AMD GPU access is not possible. So allow it
242+
241243
if(TM_USE_HIP OR QUDA_TARGET_HIP)
242244
enable_language(hip)
243-
244-
# we may want to use hip-cuda for development or debugging purposes especially
245-
# if AMD GPU access is not possible. So allow it
246245
if(TM_USE_CUDA_HIP)
247246
find_package(CUDA)
248247
endif()
@@ -274,49 +273,34 @@ if(TM_USE_FFTW)
274273
endif()
275274

276275
if(TM_USE_DDalphaAMG)
277-
find_package(DDAlphaAMG REQUIRED)
278-
endif()
279-
280-
# gprofiler
281-
282-
if(TM_USE_GPROF)
283-
set(PROFILE_FLAGS "-pg;-g")
284-
if(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "powerpc|powerpc64")
285-
list(APPEND PROFILE_FLAGS "-qfullpath")
286-
endif()
287-
add_compile_options($<BOOL:$<COMPILE_LANGUAGE:C>:$PROFILE_FLAGS>)
276+
find_package(DDalphaAMG REQUIRED)
288277
endif()
289278

290279
if(TM_ENABLE_WARNINGS)
291280
add_compile_options($<$<COMPILE_LANG_AND_ID:C,GNU>:-Wall>
292281
$<$<COMPILE_LANG_AND_ID:CXX,GNU>:-Wall>)
293282
endif()
294283

295-
# check for the presence of clock_gettime in libc or librt
296-
check_symbol_exists(clock_gettime "time.h" TM_CLOCK_GETTIME)
297-
check_library_exists(rt clock_gettime "" TM_CLOCK_GETTIME_IN_RT)
298-
check_function_exists(fseeko TM_FSEEKO)
299-
300284
# set the parallelization
301285

302286
if(TM_USE_MPI)
303-
if(TM_MPI_DIMENSION EQUAL "1")
287+
if(TM_MPI_DIMENSION STREQUAL "1")
304288
# T parallelisation
305289
set(TM_PARALLELT ON)
306-
elseif(TM_MPI_DIMENSION EQUAL "2")
290+
elseif(TM_MPI_DIMENSION STREQUAL "2")
307291
# XT parallelisation
308292
set(TM_PARALLELXT ON)
309-
elseif(TM_MPI_DIMENSION EQUAL "3")
293+
elseif(TM_MPI_DIMENSION STREQUAL "3")
310294
set(TM_PARALLELXYT ON)
311295
# XYZ parallelisation
312-
elseif(TM_MPI_DIMENSION EQUAL "4")
296+
elseif(TM_MPI_DIMENSION STREQUAL "4")
313297
# timeslice-splitted communications
314298
set(TM_PARALLELXYZT ON)
315-
elseif(TM_MPI_DIMENSION EQUAL "X")
299+
elseif(TM_MPI_DIMENSION STREQUAL "X")
316300
set(TM_PARALLELX ON)
317-
elseif(TM_MPI_DIMENSION EQUAL "XY")
301+
elseif(TM_MPI_DIMENSION STREQUAL "XY")
318302
set(TM_PARALLELXY ON)
319-
elseif(TM_MPI_DIMENSION EQUAL "XYZ")
303+
elseif(TM_MPI_DIMENSION STREQUAL "XYZ")
320304
set(TM_PARALLELXYZ ON)
321305
else()
322306
set(TM_PARALLELXYZT ON)
@@ -346,7 +330,6 @@ if(DEFINED GIT_EXE AND EXISTS "${PROJECT_SOURCE_DIR}/.git")
346330
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
347331
message(STATUS "git hash ${TM_SHA}")
348332
else()
349-
# set(TM_GIT_BRANCH "release v${SIRIUS_VERSION}")
350333
set(TM_SHA
351334
"https://github.com/etmc/tmLQCD/releases/tag/rel-${TMLQCD_VERSION_MAJOR}-${TMLQCD_VERSION_MINOR}"
352335
)

cmake/FindDDAlphaAMG.cmake

Lines changed: 0 additions & 29 deletions
This file was deleted.

cmake/FindDDalphaAMG.cmake

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
include(FindPackageHandleStandardArgs)
2+
3+
find_library(
4+
TM_DDALPHAAMG_LIBRARIES
5+
NAMES DDalphaAMG DDalphaAMG_devel
6+
PATH_SUFFIXES "lib" "lib64")
7+
8+
find_path(
9+
TM_DDALPHAAMG_INCLUDE_DIRS
10+
NAMES DDalphaAMG.h
11+
PATH_SUFFIXES "include")
12+
13+
find_package_handle_standard_args(
14+
DDalphaAMG DEFAULT_MSG TM_DDALPHAAMG_LIBRARIES TM_DDALPHAAMG_INCLUDE_DIRS)
15+
16+
if(TM_DDALPHAAMG_LIBRARIES
17+
AND TM_DDALPHAAMG_INCLUDE_DIRS
18+
AND NOT TARGET tmlqcd::DDalphaAMG)
19+
message("INCLUDE: ${TM_DDALPHAAMG_INCLUDE_DIRS}")
20+
add_library(tmlqcd::DDalphaAMG INTERFACE IMPORTED)
21+
set_property(TARGET tmlqcd::DDalphaAMG PROPERTY INTERFACE_LINK_LIBRARIES
22+
"${TM_DDALPHAAMG_LIBRARIES}")
23+
set_property(
24+
TARGET tmlqcd::DDalphaAMG PROPERTY INTERFACE_INCLUDE_DIRECTORIES
25+
"${TM_DDALPHAAMG_INCLUDE_DIRS}")
26+
endif()
27+
28+
mark_as_advanced(TM_DDALPHAAMG_LIBRARIES TM_DDALPHAAMG_INCLUDE_DIRS)

cmake/tmlqcd_config_internal.h.in

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,6 @@
1212
/* Define to 1 if you have the `lemon' library (-llemon). */
1313
#cmakedefine TM_USE_LEMON
1414

15-
/* 1 if clock_gettime is available for use in benchmark */
16-
#cmakedefine TM_CLOCK_GETTIME
17-
1815
/* Compile with MPI support */
1916
#cmakedefine TM_USE_MPI
2017

@@ -31,9 +28,9 @@
3128
#define PACKAGE_BUGREPORT "@PACKAGE_BUGREPORT@"
3229

3330
/* Define to the full name of this package. */
34-
#define PACKAGE_NAME "@PROJECT_DESCRIPTION@"
31+
#define PACKAGE_NAME "@tmlqcd_DESCRIPTION@"
3532
/* Define to the full name and version of this package. */
36-
#define PACKAGE_STRING "@PROJECT_VERSION@"
33+
#define PACKAGE_STRING "@tmlqcd_VERSION@"
3734

3835
/* Define to the one symbol short name of this package. */
3936
#define PACKAGE_TARNAME "@PACKAGE_TARNAME@"
@@ -65,9 +62,6 @@
6562
/* Fixed volume at compiletime */
6663
#cmakedefine TM_FIXEDVOLUME
6764

68-
/* Define to 1 if fseeko (and presumably ftello) exists and is declared. */
69-
#cmakedefine TM_FSEEKO
70-
7165
/* Alignment for arrays -- necessary for SSE and automated vectorization */
7266
#define ALIGN_BASE @ALIGN_BASE@
7367

0 commit comments

Comments
 (0)