forked from cp2k/cp2k
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Linux-gnu-x86_64-static.ssmp
163 lines (145 loc) · 5.33 KB
/
Linux-gnu-x86_64-static.ssmp
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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
#!/bin/bash
#
# CP2K (GNU) arch file for a serial static x86_64 binary
#
# Tested with: GNU 13.1.0, FFTW 3.3.10, LIBINT 2.6.0, LIBVORI 220621,
# LIBXC 6.2.2, OpenBLAS 0.3.25, SPGLIB 1.16.2
#
# Usage: Source this arch file and then run make as instructed.
#
# Last update: 22.09.2023
#
# \
if [[ "${0}" == "${BASH_SOURCE}" ]]; then \
echo "ERROR: Script ${0##*/} must be sourced"; \
echo "Usage: source ${0##*/}"; \
exit 1; \
fi; \
this_file=${BASH_SOURCE##*/}; \
cd tools/toolchain; \
[[ -z "${target_cpu}" ]] && target_cpu="native"; \
./install_cp2k_toolchain.sh -j${maxtasks} --mpi-mode=no --no-arch-files --target-cpu=${target_cpu} --with-gcc; \
source ./install/setup; \
cd ../..; \
echo; \
echo "Check the output above for error messages and consistency!"; \
echo; \
echo "If everything is OK, you can build a CP2K production binary with"; \
echo " make -j ARCH=${this_file%.*} VERSION=${this_file##*.}"; \
echo "Further checks are performed, if DO_CHECKS=yes is added, but this disables static linking."; \
echo; \
return
# Set options
DO_CHECKS := no
TARGET_CPU := native
USE_FFTW := 3.3.10
USE_LIBINT := 2.6.0
USE_LIBVORI := 220621
USE_LIBXC := 6.2.2
USE_OPENBLAS := 0.3.25
USE_SPGLIB := 1.16.2
LMAX := 5
MAX_CONTR := 4
CC := gcc
CXX := g++
FC := gfortran
LD := gfortran
AR := ar -r
CFLAGS := -O2 -fopenmp -fopenmp-simd -ftree-vectorize -funroll-loops -g -mtune=$(TARGET_CPU)
DFLAGS += -D__MAX_CONTR=$(strip $(MAX_CONTR))
INSTALL_PATH := $(PWD)/tools/toolchain/install
# Settings for regression testing
ifeq ($(DO_CHECKS), yes)
DFLAGS += -D__CHECK_DIAG
# CFLAGS_DEBUG := -fsanitize=address
CFLAGS_DEBUG := -fsanitize=leak
FCFLAGS_DEBUG := -fcheck=bounds,do,recursion,pointer
FCFLAGS_DEBUG += -fcheck=all,no-array-temps
FCFLAGS_DEBUG += -ffpe-trap=invalid,overflow,zero
FCFLAGS_DEBUG += -fimplicit-none
FCFLAGS_DEBUG += -finit-derived
FCFLAGS_DEBUG += -finit-real=snan
FCFLAGS_DEBUG += -finit-integer=-42
FCFLAGS_DEBUG += -finline-matmul-limit=0
WFLAGS := -Werror=aliasing
WFLAGS += -Werror=ampersand
WFLAGS += -Werror=c-binding-type
WFLAGS += -Werror=conversion
WFLAGS += -Werror=intrinsic-shadow
WFLAGS += -Werror=intrinsics-std
WFLAGS += -Werror=line-truncation
WFLAGS += -Wrealloc-lhs
WFLAGS += -Werror=tabs
WFLAGS += -Werror=target-lifetime
WFLAGS += -Werror=underflow
WFLAGS += -Werror=unused-but-set-variable
WFLAGS += -Werror=unused-dummy-argument
WFLAGS += -Werror=unused-variable
endif
ifneq ($(USE_LIBVORI),)
USE_LIBVORI := $(strip $(USE_LIBVORI))
LIBVORI_LIB := $(INSTALL_PATH)/libvori-$(USE_LIBVORI)/lib
DFLAGS += -D__LIBVORI
LIBS += $(LIBVORI_LIB)/libvori.a
endif
ifneq ($(USE_LIBXC),)
USE_LIBXC := $(strip $(USE_LIBXC))
LIBXC_INC := $(INSTALL_PATH)/libxc-$(USE_LIBXC)/include
LIBXC_LIB := $(INSTALL_PATH)/libxc-$(USE_LIBXC)/lib
CFLAGS += -I$(LIBXC_INC)
DFLAGS += -D__LIBXC
LIBS += $(LIBXC_LIB)/libxcf03.a
LIBS += $(LIBXC_LIB)/libxc.a
endif
ifneq ($(USE_LIBINT),)
USE_LIBINT := $(strip $(USE_LIBINT))
LMAX := $(strip $(LMAX))
LIBINT_INC := $(INSTALL_PATH)/libint-v$(USE_LIBINT)-cp2k-lmax-$(LMAX)/include
LIBINT_LIB := $(INSTALL_PATH)/libint-v$(USE_LIBINT)-cp2k-lmax-$(LMAX)/lib
CFLAGS += -I$(LIBINT_INC)
DFLAGS += -D__LIBINT
LIBS += $(LIBINT_LIB)/libint2.a
LIBS += $(LIBINT_LIB)/libint2.a
endif
ifneq ($(USE_SPGLIB),)
USE_SPGLIB := $(strip $(USE_SPGLIB))
SPGLIB_INC := $(INSTALL_PATH)/spglib-$(USE_SPGLIB)/include
SPGLIB_LIB := $(INSTALL_PATH)/spglib-$(USE_SPGLIB)/lib
CFLAGS += -I$(SPGLIB_INC)
DFLAGS += -D__SPGLIB
LIBS += $(SPGLIB_LIB)/libsymspg.a
endif
ifneq ($(USE_FFTW),)
USE_FFTW := $(strip $(USE_FFTW))
FFTW_INC := $(INSTALL_PATH)/fftw-$(USE_FFTW)/include
FFTW_LIB := $(INSTALL_PATH)/fftw-$(USE_FFTW)/lib
CFLAGS += -I$(FFTW_INC)
DFLAGS += -D__FFTW3
LIBS += $(FFTW_LIB)/libfftw3_omp.a
LIBS += $(FFTW_LIB)/libfftw3.a
endif
ifneq ($(USE_OPENBLAS),)
USE_OPENBLAS := $(strip $(USE_OPENBLAS))
OPENBLAS_INC := $(INSTALL_PATH)/openblas-$(USE_OPENBLAS)/include
OPENBLAS_LIB := $(INSTALL_PATH)/openblas-$(USE_OPENBLAS)/lib
CFLAGS += -I$(OPENBLAS_INC)
LIBS += $(OPENBLAS_LIB)/libopenblas.a
endif
CFLAGS += $(DFLAGS) $(CFLAGS_DEBUG)
FCFLAGS := $(CFLAGS) $(FCFLAGS_DEBUG) $(WFLAGS)
ifeq ($(shell [ $(shell gcc -dumpversion | cut -d. -f1) -gt 9 ] && echo yes), yes)
FCFLAGS += -fallow-argument-mismatch
endif
FCFLAGS += -fbacktrace
FCFLAGS += -ffree-form
FCFLAGS += -ffree-line-length-none
FCFLAGS += -fno-omit-frame-pointer
FCFLAGS += -std=f2008
# The LeakSanitizer does not work with static linking
ifeq ($(DO_CHECKS), yes)
LDFLAGS += $(FCFLAGS)
else
LDFLAGS += $(FCFLAGS) -static
endif
LIBS += -Wl,--whole-archive -lpthread -ldl -Wl,--no-whole-archive -lstdc++
# End