@@ -11,57 +11,109 @@ INCLUDES = -I$(INCLUDE_DIR) -I$(DEPS_DIR)/eigen3 -I$(DEPS_DIR)/xprec/include
11
11
# Compiler settings
12
12
CXX ?= g++
13
13
CXXFLAGS = -O2 -Wall -std=c++11 $(INCLUDES)
14
+ CXXFLAGS_PIC = $(CXXFLAGS) -fPIC
14
15
FC ?= gfortran
15
16
FFLAGS = -O2 -Wall
17
+ FFLAGS_PIC = $(FFLAGS) -fPIC
16
18
17
19
# Library settings
18
20
LIB_NAME = libsparseir
19
21
STATIC_LIB = $(LIB_NAME).a
22
+
23
+ # Determine shared library extension based on OS
24
+ UNAME_S := $(shell uname -s)
25
+ ifeq ($(UNAME_S),Darwin)
26
+ SHARED_EXT = .dylib
27
+ else ifeq ($(UNAME_S),Linux)
28
+ SHARED_EXT = .so
29
+ else ifneq (,$(findstring CYGWIN,$(UNAME_S)))
30
+ SHARED_EXT = .dll
31
+ else ifneq (,$(findstring MINGW,$(UNAME_S)))
32
+ SHARED_EXT = .dll
33
+ else ifneq (,$(findstring MSYS,$(UNAME_S)))
34
+ SHARED_EXT = .dll
35
+ else
36
+ SHARED_EXT = .so
37
+ endif
38
+
39
+ SHARED_LIB = $(LIB_NAME)$(SHARED_EXT)
20
40
FORTRAN_LIB = $(LIB_NAME)_fortran.a
41
+ FORTRAN_SHARED_LIB = $(LIB_NAME)_fortran$(SHARED_EXT)
21
42
22
43
# Source files
23
44
SRCS = $(wildcard $(SRC_DIR)/*.cpp)
24
45
OBJS = $(SRCS:.cpp=.o)
46
+ OBJS_PIC = $(SRCS:.cpp=.pic.o)
25
47
26
48
# Fortran source files
27
49
F90SRCS = $(FORTRAN_DIR)/sparseir.f90 $(FORTRAN_DIR)/sparseir_ext.f90
28
50
F90OBJS = $(F90SRCS:.f90=.o)
51
+ F90OBJS_PIC = $(F90SRCS:.f90=.pic.o)
29
52
MOD_FILES = sparseir.mod sparseir_ext.mod
30
53
31
54
# Header files to install
32
55
HEADERS = $(INCLUDE_DIR)/sparseir/sparseir.h \
33
56
$(INCLUDE_DIR)/sparseir/spir_status.h \
34
57
$(INCLUDE_DIR)/sparseir/version.h
35
58
36
- .PHONY: all clean install fortran
59
+ .PHONY: all clean install fortran shared shared-fortran install-shared install-shared-fortran
60
+
61
+ all: $(STATIC_LIB) $(SHARED_LIB)
37
62
38
- all : $(STATIC_LIB )
63
+ shared : $(SHARED_LIB )
39
64
40
65
fortran: $(FORTRAN_LIB)
41
66
67
+ shared-fortran: $(FORTRAN_SHARED_LIB)
68
+
42
69
$(STATIC_LIB): $(OBJS)
43
70
ar rcs $@ $^
44
71
72
+ $(SHARED_LIB): $(OBJS_PIC)
73
+ $(CXX) -shared -o $@ $^
74
+
45
75
$(FORTRAN_LIB): $(F90OBJS)
46
76
ar rcs $@ $^
47
77
78
+ $(FORTRAN_SHARED_LIB): $(F90OBJS_PIC)
79
+ $(FC) -shared -o $@ $^
80
+
48
81
%.o: %.cpp
49
82
$(CXX) $(CXXFLAGS) -c $< -o $@
50
83
84
+ %.pic.o: %.cpp
85
+ $(CXX) $(CXXFLAGS_PIC) -c $< -o $@
86
+
51
87
%.o: %.f90
52
88
$(FC) $(FFLAGS) -c $< -o $@
53
89
54
- install: $(STATIC_LIB)
90
+ %.pic.o: %.f90
91
+ $(FC) $(FFLAGS_PIC) -c $< -o $@
92
+
93
+ install: $(STATIC_LIB) $(SHARED_LIB)
55
94
@mkdir -p $(PREFIX)/include/sparseir
56
95
@mkdir -p $(PREFIX)/lib
57
96
cp $(HEADERS) $(PREFIX)/include/sparseir/
58
97
cp $(STATIC_LIB) $(PREFIX)/lib/
98
+ cp $(SHARED_LIB) $(PREFIX)/lib/
99
+
100
+ install-shared: $(SHARED_LIB)
101
+ @mkdir -p $(PREFIX)/include/sparseir
102
+ @mkdir -p $(PREFIX)/lib
103
+ cp $(HEADERS) $(PREFIX)/include/sparseir/
104
+ cp $(SHARED_LIB) $(PREFIX)/lib/
59
105
60
106
install-fortran: fortran
61
107
@mkdir -p $(PREFIX)/include/sparseir
62
108
@mkdir -p $(PREFIX)/lib
63
109
cp $(MOD_FILES) $(PREFIX)/include/sparseir/
64
110
cp $(FORTRAN_LIB) $(PREFIX)/lib/
65
111
112
+ install-shared-fortran: shared-fortran
113
+ @mkdir -p $(PREFIX)/include/sparseir
114
+ @mkdir -p $(PREFIX)/lib
115
+ cp $(MOD_FILES) $(PREFIX)/include/sparseir/
116
+ cp $(FORTRAN_SHARED_LIB) $(PREFIX)/lib/
117
+
66
118
clean:
67
- rm -f $(OBJS) $(F90OBJS) $(STATIC_LIB) $(FORTRAN_LIB) $(MOD_FILES)
119
+ rm -f $(OBJS) $(OBJS_PIC) $( F90OBJS) $(F90OBJS_PIC) $( STATIC_LIB) $(SHARED_LIB) $( FORTRAN_LIB) $(FORTRAN_SHARED_LIB) $(MOD_FILES)
0 commit comments