Skip to content

Commit aaa56c6

Browse files
Merge pull request #342 from SpM-lab/terasaki/makefile-bundle-support-shared-lib
Add shared library support to bundle Makefile
2 parents 64158a4 + c04c1fe commit aaa56c6

File tree

2 files changed

+61
-4
lines changed

2 files changed

+61
-4
lines changed

bundle/.gitignore

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
fortran
2+
src
3+
include
4+
deps
5+
dist

bundle/Makefile.bundle

Lines changed: 56 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,57 +11,109 @@ INCLUDES = -I$(INCLUDE_DIR) -I$(DEPS_DIR)/eigen3 -I$(DEPS_DIR)/xprec/include
1111
# Compiler settings
1212
CXX ?= g++
1313
CXXFLAGS = -O2 -Wall -std=c++11 $(INCLUDES)
14+
CXXFLAGS_PIC = $(CXXFLAGS) -fPIC
1415
FC ?= gfortran
1516
FFLAGS = -O2 -Wall
17+
FFLAGS_PIC = $(FFLAGS) -fPIC
1618

1719
# Library settings
1820
LIB_NAME = libsparseir
1921
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)
2040
FORTRAN_LIB = $(LIB_NAME)_fortran.a
41+
FORTRAN_SHARED_LIB = $(LIB_NAME)_fortran$(SHARED_EXT)
2142

2243
# Source files
2344
SRCS = $(wildcard $(SRC_DIR)/*.cpp)
2445
OBJS = $(SRCS:.cpp=.o)
46+
OBJS_PIC = $(SRCS:.cpp=.pic.o)
2547

2648
# Fortran source files
2749
F90SRCS = $(FORTRAN_DIR)/sparseir.f90 $(FORTRAN_DIR)/sparseir_ext.f90
2850
F90OBJS = $(F90SRCS:.f90=.o)
51+
F90OBJS_PIC = $(F90SRCS:.f90=.pic.o)
2952
MOD_FILES = sparseir.mod sparseir_ext.mod
3053

3154
# Header files to install
3255
HEADERS = $(INCLUDE_DIR)/sparseir/sparseir.h \
3356
$(INCLUDE_DIR)/sparseir/spir_status.h \
3457
$(INCLUDE_DIR)/sparseir/version.h
3558

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)
3762

38-
all: $(STATIC_LIB)
63+
shared: $(SHARED_LIB)
3964

4065
fortran: $(FORTRAN_LIB)
4166

67+
shared-fortran: $(FORTRAN_SHARED_LIB)
68+
4269
$(STATIC_LIB): $(OBJS)
4370
ar rcs $@ $^
4471

72+
$(SHARED_LIB): $(OBJS_PIC)
73+
$(CXX) -shared -o $@ $^
74+
4575
$(FORTRAN_LIB): $(F90OBJS)
4676
ar rcs $@ $^
4777

78+
$(FORTRAN_SHARED_LIB): $(F90OBJS_PIC)
79+
$(FC) -shared -o $@ $^
80+
4881
%.o: %.cpp
4982
$(CXX) $(CXXFLAGS) -c $< -o $@
5083

84+
%.pic.o: %.cpp
85+
$(CXX) $(CXXFLAGS_PIC) -c $< -o $@
86+
5187
%.o: %.f90
5288
$(FC) $(FFLAGS) -c $< -o $@
5389

54-
install: $(STATIC_LIB)
90+
%.pic.o: %.f90
91+
$(FC) $(FFLAGS_PIC) -c $< -o $@
92+
93+
install: $(STATIC_LIB) $(SHARED_LIB)
5594
@mkdir -p $(PREFIX)/include/sparseir
5695
@mkdir -p $(PREFIX)/lib
5796
cp $(HEADERS) $(PREFIX)/include/sparseir/
5897
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/
59105

60106
install-fortran: fortran
61107
@mkdir -p $(PREFIX)/include/sparseir
62108
@mkdir -p $(PREFIX)/lib
63109
cp $(MOD_FILES) $(PREFIX)/include/sparseir/
64110
cp $(FORTRAN_LIB) $(PREFIX)/lib/
65111

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+
66118
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

Comments
 (0)