-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathMakefile
More file actions
75 lines (59 loc) · 1.93 KB
/
Copy pathMakefile
File metadata and controls
75 lines (59 loc) · 1.93 KB
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
# Compiler type: GNU or NVIDIA
COMPILER = NVIDIA
# Set SINGLE_PRECISION to 1 to use single precision, otherwise use double precision
SINGLE_PRECISION = 0
# SmartRedis installation directory
SMARTREDIS_INSTALL_DIR = /leonardo/home/userexternal/mxiao000/code/SmartFlow/dependencies/smartredis/install
# Set module flag based on compiler type
ifeq ($(COMPILER),GNU)
FC = mpifort
MODULE_FLAG = -J
else ifeq ($(COMPILER),NVIDIA)
FC = mpifort
MODULE_FLAG = -module
else
$(error Invalid COMPILER value. Must be GNU or NVIDIA)
endif
# For a library dealing with MPI communication and data processing,
# -O2 is typically sufficient and recommended for production use.
FCFLAGS = -O2 -fPIC -I$(SMARTREDIS_INSTALL_DIR)/include -cpp
# Add single precision flag if enabled, i.e. make SINGLE_PRECISION=1
ifeq ($(SINGLE_PRECISION),1)
FCFLAGS += -D_SINGLE_PRECISION
endif
# Add SmartRedis library paths and libraries
LDFLAGS = -L$(SMARTREDIS_INSTALL_DIR)/lib
LIBS = -lsmartredis -lsmartredis-fortran
# Directory structure
BUILD_DIR = build
OBJ_DIR = $(BUILD_DIR)
MOD_DIR = $(BUILD_DIR)/include
LIB_DIR = $(BUILD_DIR)/lib
FCFLAGS += -I$(MOD_DIR)
# Source files (adjust paths if necessary)
SRCS = src/precision.f90 src/smartredis_mpi.f90
OBJS = $(patsubst src/%.f90,$(OBJ_DIR)/%.o,$(SRCS))
# Library names
LIB_STATIC = $(LIB_DIR)/libsmartredis_mpi.a
LIB_SHARED = $(LIB_DIR)/libsmartredis_mpi.so
all: create_dirs $(LIB_STATIC) $(LIB_SHARED)
create_dirs:
mkdir -p $(OBJ_DIR)
mkdir -p $(MOD_DIR)
mkdir -p $(LIB_DIR)
$(OBJ_DIR)/%.o: src/%.f90
$(FC) $(FCFLAGS) $(MODULE_FLAG) $(MOD_DIR) -c $< -o $@
$(LIB_STATIC): $(OBJS)
ar rcs $@ $(OBJS)
$(LIB_SHARED): $(OBJS)
$(FC) -shared -o $@ $(OBJS) $(LDFLAGS) $(LIBS)
clean:
rm -rf $(BUILD_DIR)
# Debug targets to print variables
debug:
@echo "COMPILER_TYPE=$(COMPILER_TYPE)"
@echo "FC=$(FC)"
@echo "FCFLAGS=$(FCFLAGS)"
# Generic target to print any variable, usage: make print-VARIABLE_NAME
print-%:
@echo $*=$($*)