-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathCMakeLists.txt
146 lines (118 loc) · 4.46 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
cmake_minimum_required(VERSION 3.23.0 FATAL_ERROR)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/")
project(TurboRVB_minicode LANGUAGES Fortran C)
find_package (Python COMPONENTS Interpreter)
include(CTest)
set(OFFLOAD_FLAGS "" CACHE STRING "Flags of openmp offload")
find_package(OpenMP COMPONENTS Fortran)
if (${OpenMP_Fortran_FOUND})
message(STATUS "OpenMP offload flags: ${OFFLOAD_FLAGS}")
if (NOT "${OFFLOAD_FLAGS}" STREQUAL "")
set(OpenMP_Fortran_FLAGS ${OFFLOAD_FLAGS})
endif()
endif()
message(STATUS "OpenMP Fortran flags: ${OpenMP_Fortran_FLAGS}")
# Set preprocessor directives
set(PPDIRECTIVES "")
if (OLD_QMCKL_GPU_INTERFACE)
list( APPEND PPDIRECTIVES _OLD_QMCKL_GPU_INTERFACE )
endif()
find_package(TREXIO)
if (TREXIO_FOUND)
list( APPEND PPDIRECTIVES _TREXIO )
endif()
find_package(QMCKL)
if (QMCKL_FOUND)
list( APPEND PPDIRECTIVES _QMCKL )
endif()
find_package(QMCKL_GPU)
if (QMCKL_GPU_FOUND)
list( APPEND PPDIRECTIVES _QMCKL_GPU )
endif()
# Make special target that will create src/makefun.F90 file
add_custom_command(
OUTPUT makefun.F90
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/src/assemble/
COMMAND ${CMAKE_COMMAND} -E env ${Python_EXECUTABLE} assemble.py > ${CMAKE_CURRENT_BINARY_DIR}/makefun.F90
COMMENT "Generating makefun.F90"
VERBATIM
DEPENDS ${CMAKE_SOURCE_DIR}/src/assemble/orb_*.f90 ${CMAKE_SOURCE_DIR}/src/assemble/assemble.py
)
list(APPEND EXECUTABLES qmckl_reader)
list(APPEND EXECUTABLES comparator)
list(APPEND EXECUTABLES comparator_with_pseudo)
list(APPEND EXECUTABLES makefun_tester)
add_library(turborvb_minicode_lib STATIC
src/provider_qmckl.F90
src/provider_qmckl_gpu.F90
src/provider_makefun.F90
src/provider_pseudo_makefun.F90
src/provider_pseudo_makefun_old.F90
src/provider_pseudo_qmckl.F90
src/constants.F90
src/qmckl.F90
src/qmckl_gpu.F90
src/trexio.F90
src/qmckl_helpers.F90
src/qmckl_gpu_helpers.F90
src/c_lister.h
src/c_lister.c
${CMAKE_CURRENT_BINARY_DIR}/makefun.F90
)
foreach(EXECUTABLE ${EXECUTABLES})
add_executable(${EXECUTABLE})
target_sources(${EXECUTABLE}
PRIVATE
src/${EXECUTABLE}.F90
)
target_link_libraries(${EXECUTABLE} PRIVATE turborvb_minicode_lib)
endforeach()
message(STATUS "Preprocessor directives: ${PPDIRECTIVES}")
list(APPEND EXECUTABLES turborvb_minicode_lib)
foreach(EXECUTABLE IN LISTS EXECUTABLES)
set_target_properties(${EXECUTABLE} PROPERTIES LINK_FLAGS "-g -O0 ${OpenMP_Fortran_FLAGS}")
if (OpenMP_Fortran_FOUND)
#target_link_libraries(${EXECUTABLE} PRIVATE OpenMP::OpenMP_Fortran)
endif()
if (TREXIO_FOUND)
target_link_libraries(${EXECUTABLE} PRIVATE ${TREXIO_LIBRARIES})
target_include_directories(${EXECUTABLE} PRIVATE ${TREXIO_INCLUDE_DIRS})
endif()
if (QMCKL_FOUND)
target_link_libraries(${EXECUTABLE} PRIVATE ${QMCKL_LIBRARIES})
target_include_directories(${EXECUTABLE} PRIVATE ${QMCKL_INCLUDE_DIRS})
endif()
if (QMCKL_GPU_FOUND)
target_link_libraries(${EXECUTABLE} PRIVATE ${QMCKL_GPU_LIBRARIES})
target_include_directories(${EXECUTABLE} PRIVATE ${QMCKL_GPU_INCLUDE_DIRS})
endif()
get_target_property(SRC_FILES ${EXECUTABLE} SOURCES)
foreach(SRC_FILE ${SRC_FILES})
foreach(PPDIRECTIVE ${PPDIRECTIVES})
set_property(SOURCE ${SRC_FILE} APPEND PROPERTY COMPILE_DEFINITIONS ${PPDIRECTIVE})
message(STATUS "Adding preprocessor directive ${PPDIRECTIVE} to ${SRC_FILE}")
endforeach()
set_source_files_properties(${SRC_FILE} PROPERTIES Fortran_PREPROCESS ON)
set_source_files_properties(${SRC_FILE} PROPERTIES Fortran_FREE ON)
# Flags for checking
# Set OpenMP flags for Fortran files, supporting GPU acceleration
set (COMPILE_FLAGS "-g -O0")
if (OpenMP_Fortran_FOUND)
message(STATUS "Adding OpenMP flags to ${SRC_FILE}: ${OpenMP_Fortran_FLAGS}")
set(COMPILE_FLAGS "${COMPILE_FLAGS} ${OpenMP_Fortran_FLAGS}")
endif()
set_source_files_properties(${SRC_FILE} PROPERTIES COMPILE_FLAGS ${COMPILE_FLAGS})
endforeach()
endforeach()
# Add tests ##############################################################
enable_testing()
#add_subdirectory(tests/with_qmckl_h)
#add_subdirectory(tests/makefun)
add_subdirectory(tests/reader)
add_subdirectory(tests/comparator)
add_subdirectory(tests/comparator_with_pseudo)
add_subdirectory(tests/makefun_tester)
#add_subdirectory(tests/gpu_cpu_compare)
if (NOT ${OFFLOAD_FLAGS} STREQUAL "")
#add_subdirectory(tests/openmp)
endif()