@@ -2,127 +2,157 @@ MPI ?= 1
2
2
ADDUS ?= 1
3
3
USREXIT ?= 0
4
4
NBC ?= 0
5
- LIBNAME ?= gs
6
5
BLAS ?= 0
7
- DEBUG ?= 0
6
+
8
7
CFLAGS ?= -O2
9
8
FFLAGS ?= -O2
9
+ ARFLAGS ?= cr
10
+
11
+ LIBNAME ?= gs
10
12
CPREFIX ?= gslib_
11
13
FPREFIX ?= fgslib_
12
14
13
- SRCROOT =.
14
- TESTDIR =$(SRCROOT ) /tests
15
- FTESTDIR =$(TESTDIR ) /fortran
16
- SRCDIR =$(SRCROOT ) /src
17
- INCDIR =$(SRCROOT ) /src
18
- LIBDIR =$(SRCROOT ) /lib
15
+ STATIC ?= 1
16
+ SHARED ?= 0
17
+
18
+ SRCROOT = .
19
+ TESTDIR = $(SRCROOT ) /tests
20
+ FTESTDIR = $(TESTDIR ) /fortran
21
+ SRCDIR = $(SRCROOT ) /src
22
+ INCDIR = $(SRCROOT ) /src
23
+ LIBDIR = $(SRCROOT ) /lib
24
+
25
+ DARWIN := $(filter Darwin,$(shell uname -s) )
26
+ SO_EXT := $(if $(DARWIN ) ,dylib,so)
19
27
20
28
ifneq (,$(strip $(DESTDIR ) ) )
21
- INSTALL_ROOT = $(DESTDIR )
29
+ INSTALL_ROOT = $(DESTDIR )
22
30
else
23
- INSTALL_ROOT = $(SRCROOT ) /build
31
+ INSTALL_ROOT = $(SRCROOT ) /build
32
+ endif
33
+
34
+ ifneq (0,$(SHARED ) )
35
+ ifneq (0,$(STATIC))
36
+ $(warning Cannot build with both STATIC=1 and SHARED=1, setting SHARED=0)
37
+ override SHARED = 0
38
+ endif
39
+ endif
40
+
41
+ ifneq (0,$(SHARED ) )
42
+ ifeq ($(filter -fPIC,$(CFLAGS)),)
43
+ override CFLAGS += -fPIC
44
+ endif
45
+ ifneq ($(DARWIN),)
46
+ override LDFLAGS += -install_name @rpath/lib$(LIBNAME ) .$(SO_EXT )
47
+ endif
24
48
endif
25
49
26
50
$(shell >config.h)
27
51
ifneq (0,$(MPI ) )
28
- SN =GSLIB_USE_MPI
29
- G: =$(G ) -D$(SN )
52
+ SN = GSLIB_USE_MPI
53
+ G := $(G ) -D$(SN )
54
+ $(shell printf "# ifndef ${SN}\n#define ${SN}\n#endif\n" >>config.h)
30
55
ifeq ($(origin CC),default)
31
56
CC = mpicc
32
57
endif
33
58
ifeq ($(origin FC),default)
34
59
FC = mpif77
35
60
endif
36
- $(shell printf "# ifndef ${SN}\n#define ${SN}\n#endif\n" >>config.h)
37
61
endif
38
62
39
63
ifneq (0,$(ADDUS ) )
40
- SN = UNDERSCORE
41
- G: = $(G ) -D$(SN )
64
+ SN = UNDERSCORE
65
+ G := $(G ) -D$(SN )
42
66
$(shell printf "# ifndef ${SN}\n#define ${SN}\n#endif\n" >>config.h)
43
67
endif
44
68
45
- SN =GLOBAL_LONG_LONG
46
- G: =$(G ) -D$(SN )
47
- $(shell printf "# ifndef ${SN}\n#define ${SN}\n#endif\n" >>config.h)
48
-
49
- SN =PREFIX
50
- G: =$(G ) -D$(SN ) =$(CPREFIX )
69
+ SN = PREFIX
70
+ G := $(G ) -D$(SN ) =$(CPREFIX )
51
71
$(shell printf "# ifndef ${SN}\n#define ${SN} ${CPREFIX}\n#endif\n" >>config.h)
52
72
53
- SN = FPREFIX
54
- G: = $(G ) -D$(SN ) =$(FPREFIX )
73
+ SN = FPREFIX
74
+ G := $(G ) -D$(SN ) =$(FPREFIX )
55
75
$(shell printf "# ifndef ${SN}\n#define ${SN} ${FPREFIX}\n#endif\n" >>config.h)
56
76
77
+ SN = GLOBAL_LONG_LONG
78
+ G := $(G ) -D$(SN )
79
+ $(shell printf "# ifndef ${SN}\n#define ${SN}\n#endif\n" >>config.h)
80
+
57
81
ifneq (0,$(USREXIT ) )
58
- G+ = -DUSE_USR_EXIT
82
+ G += -DUSE_USR_EXIT
59
83
endif
60
84
61
85
ifneq (0,$(NBC ) )
62
- G+ = -DUSE_NBC
86
+ G += -DUSE_NBC
63
87
endif
64
88
65
89
ifeq (0,$(BLAS ) )
66
- SN = USE_NAIVE_BLAS
67
- G: = $(G ) -D$(SN )
90
+ SN = USE_NAIVE_BLAS
91
+ G := $(G ) -D$(SN )
68
92
$(shell printf "# ifndef ${SN}\n#define ${SN}\n#endif\n" >>config.h)
69
93
endif
70
94
71
95
ifeq (1,$(BLAS ) )
72
- G+ =-DUSE_CBLAS
96
+ SN = USE_CBLAS
97
+ G := $(G ) -D$(SN )
98
+ $(shell printf "# ifndef ${SN}\n#define ${SN}\n#endif\n" >>config.h)
73
99
endif
74
100
75
- ifneq (0,$(DEBUG ) )
76
- G+ =-DGSLIB_DEBUG
77
- CFLAGS+ =-g
78
- endif
101
+ CCCMD = $(CC ) $(CFLAGS ) -I$(INCDIR ) $(G )
102
+ FCCMD = $(FC ) $(FFLAGS ) -I$(INCDIR ) $(G )
79
103
80
- CCCMD =$(CC ) $(CFLAGS ) -I$(INCDIR ) $(G )
81
- FCCMD =$(FC ) $(FFLAGS ) -I$(INCDIR ) $(G )
104
+ TESTS = $(TESTDIR ) /sort_test $(TESTDIR ) /sort_test2 $(TESTDIR ) /sarray_sort_test \
105
+ $(TESTDIR ) /comm_test $(TESTDIR ) /crystal_test \
106
+ $(TESTDIR ) /sarray_transfer_test $(TESTDIR ) /gs_test \
107
+ $(TESTDIR ) /gs_test_gop_blocking $(TESTDIR ) /gs_test_gop_nonblocking \
108
+ $(TESTDIR ) /gs_unique_test \
109
+ $(TESTDIR ) /findpts_el_2_test \
110
+ $(TESTDIR ) /findpts_el_2_test2 $(TESTDIR ) /findpts_el_3_test \
111
+ $(TESTDIR ) /findpts_el_3_test2 $(TESTDIR ) /findpts_local_test \
112
+ $(TESTDIR ) /findpts_test $(TESTDIR ) /findpts_test_ms $(TESTDIR ) /poly_test \
113
+ $(TESTDIR ) /lob_bnd_test $(TESTDIR ) /obbox_test
82
114
83
- TESTS =$(TESTDIR ) /sort_test $(TESTDIR ) /sort_test2 $(TESTDIR ) /sarray_sort_test \
84
- $(TESTDIR ) /comm_test $(TESTDIR ) /crystal_test \
85
- $(TESTDIR ) /sarray_transfer_test $(TESTDIR ) /gs_test \
86
- $(TESTDIR ) /gs_test_gop_blocking $(TESTDIR ) /gs_test_gop_nonblocking \
87
- $(TESTDIR ) /gs_unique_test \
88
- $(TESTDIR ) /findpts_el_2_test \
89
- $(TESTDIR ) /findpts_el_2_test2 $(TESTDIR ) /findpts_el_3_test \
90
- $(TESTDIR ) /findpts_el_3_test2 $(TESTDIR ) /findpts_local_test \
91
- $(TESTDIR ) /findpts_test $(TESTDIR ) /findpts_test_ms $(TESTDIR ) /poly_test \
92
- $(TESTDIR ) /lob_bnd_test $(TESTDIR ) /obbox_test
115
+ FTESTS = $(FTESTDIR ) /f-igs
93
116
94
- FTESTS =$(FTESTDIR ) /f-igs
117
+ GS = $(SRCDIR ) /gs.o $(SRCDIR ) /sort.o $(SRCDIR ) /sarray_transfer.o \
118
+ $(SRCDIR ) /sarray_sort.o $(SRCDIR ) /gs_local.o $(SRCDIR ) /fail.o \
119
+ $(SRCDIR ) /crystal.o $(SRCDIR ) /comm.o $(SRCDIR ) /tensor.o
95
120
96
- GS =$(SRCDIR ) /gs.o $(SRCDIR ) /sort.o $(SRCDIR ) /sarray_transfer.o \
97
- $(SRCDIR ) /sarray_sort.o $(SRCDIR ) /gs_local.o $(SRCDIR ) /fail.o \
98
- $(SRCDIR ) /crystal.o $(SRCDIR ) /comm.o $(SRCDIR ) /tensor.o
121
+ FWRAPPER = $(SRCDIR ) /fcrystal.o $(SRCDIR ) /findpts.o
99
122
100
- FWRAPPER =$(SRCDIR ) /fcrystal.o $(SRCDIR ) /findpts.o
101
- INTP =$(SRCDIR ) /findpts_local.o $(SRCDIR ) /obbox.o $(SRCDIR ) /poly.o \
102
- $(SRCDIR ) /lob_bnd.o $(SRCDIR ) /findpts_el_3.o $(SRCDIR ) /findpts_el_2.o
123
+ INTP = $(SRCDIR ) /findpts_local.o $(SRCDIR ) /obbox.o $(SRCDIR ) /poly.o \
124
+ $(SRCDIR ) /lob_bnd.o $(SRCDIR ) /findpts_el_3.o $(SRCDIR ) /findpts_el_2.o
103
125
104
126
.PHONY : all lib install tests clean objects
105
127
106
128
all : lib install
107
129
108
- lib : $(GS ) $(FWRAPPER ) $(INTP )
109
- @$(AR ) cr $(SRCDIR ) /lib$(LIBNAME ) .a $?
110
- @ranlib $(SRCDIR ) /lib$(LIBNAME ) .a
130
+ lib : $(if $(filter-out 0,$(STATIC ) ) ,$(SRCDIR ) /lib$(LIBNAME ) .a) $(if $(filter-out 0,$(SHARED ) ) ,$(SRCDIR ) /lib$(LIBNAME ) .$(SO_EXT ) )
131
+
132
+ $(SRCDIR ) /lib$(LIBNAME ) .a : $(GS ) $(FWRAPPER ) $(INTP )
133
+ $(AR ) $(ARFLAGS ) $@ $^
134
+ ranlib $@
135
+
136
+ $(SRCDIR ) /lib$(LIBNAME ) .$(SO_EXT ) : $(GS ) $(FWRAPPER ) $(INTP )
137
+ $(CC ) $(CFLAGS ) -shared -o $@ $^ $(LDFLAGS )
111
138
112
139
install : lib
113
140
@mkdir -p $(INSTALL_ROOT ) /lib 2> /dev/null
114
- @cp -v $(SRCDIR ) /lib$(LIBNAME ) .a $(INSTALL_ROOT ) /lib 2> /dev/null
115
- @mkdir -p $(INSTALL_ROOT ) /include 2> /dev/null
116
- @cp $(SRCDIR ) /* .h $(INSTALL_ROOT ) /include 2> /dev/null
117
- @cp $(SRCDIR ) /* .h $(INSTALL_ROOT ) /include 2> /dev/null
118
- @mv config.h $(INSTALL_ROOT ) /include 2> /dev/null
141
+ $(if $(filter-out 0,$(STATIC ) ) ,cp $(SRCDIR ) /lib$(LIBNAME ) .a $(INSTALL_ROOT ) /lib)
142
+ $(if $(filter-out 0,$(SHARED ) ) ,cp $(SRCDIR ) /lib$(LIBNAME ) .$(SO_EXT ) $(INSTALL_ROOT ) /lib)
143
+ @mkdir -p $(INSTALL_ROOT ) /include/gslib 2> /dev/null
144
+ cp $(SRCDIR ) /* .h $(INSTALL_ROOT ) /include/gslib
145
+ mv config.h $(INSTALL_ROOT ) /include/gslib
146
+ @printf ' // Automatically generated file\n#include "gslib/gslib.h"\n' \
147
+ > $(INSTALL_ROOT ) /include/gslib.h && chmod 644 $(INSTALL_ROOT ) /include/gslib.h
119
148
120
149
tests : $(TESTS )
121
150
122
- clean : ; @$(RM ) config.h $(SRCDIR ) /* .o $(SRCDIR ) /* .s $(SRCDIR ) /* .a $(TESTDIR ) /* .o $(FTESTDIR ) /* .o $(TESTS )
151
+ clean :
152
+ $(RM ) config.h $(SRCDIR ) /* .o $(SRCDIR ) /* .s $(SRCDIR ) /* .a $(SRCDIR ) /* .$(SO_EXT ) $(TESTDIR ) /* .o $(FTESTDIR ) /* .o $(TESTS )
123
153
124
154
$(TESTS ) : % : % .c | lib install
125
- $(CC ) $(CFLAGS ) -I$(INSTALL_ROOT ) /include $< -o $@ -L$(INSTALL_ROOT ) /lib -l$(LIBNAME ) -lm $(LDFLAGS )
155
+ $(CC ) $(CFLAGS ) -I$(INSTALL_ROOT ) /include $< -o $@ -L$(INSTALL_ROOT ) /lib -l$(LIBNAME ) -lm $(LDFLAGS )
126
156
127
157
$(FTESTS ) : % : % .o | lib install
128
158
$(FCCMD ) $^ -o $@ -L$(SRCDIR ) -l$(LIBNAME )
0 commit comments