-
Notifications
You must be signed in to change notification settings - Fork 25
/
Copy pathmakefile
80 lines (61 loc) · 1.65 KB
/
makefile
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
SRC=src
DIST=dist
BUILD=build
TEST=tests
LIB_DIR=$(HOME)/lib
INCL_DIR=$(HOME)/include
TESTPROG=fson_test_driver
F95=.f90
OBJ=.o
SO=.so
MOD=.mod
EXE=
LIBTARGET=$(DIST)/libfson$(SO)
FC = gfortran
FCFLAGS = -O2
LDFLAGS=
FRUIT=-L$(LIB_DIR) -lfruit
FRUITINCLS=-I$(INCL_DIR)
# "make" builds all
all: lib examples
# List of example programs
EXAMPLES = basic example1 example2
examples: $(patsubst %, $(DIST)/examples/%$(EXE), $(EXAMPLES)) json
JSON = $(shell find src -name '*.json')
json: $(patsubst $(SRC)%, $(DIST)%, $(JSON))
FSON = fson_string_m fson_value_m fson_path_m fson
OBJECTS = $(patsubst %, $(BUILD)/%$(OBJ), $(FSON))
TESTS = fson_test fson_test2
TESTOBJS = $(patsubst %, $(BUILD)/$(TEST)/%$(OBJ), $(TESTS))
$(LIBTARGET) : $(OBJECTS)
mkdir -p `dirname $@`
$(FC) -shared -o $(LIBTARGET) $^
lib: $(LIBTARGET)
$(DIST)/%.json : $(SRC)/%.json
mkdir -p $(@D)
cp -f $< $@
# build test program
$(DIST)/$(TEST)/$(TESTPROG)$(EXE) : $(BUILD)/$(TEST)/$(TESTPROG)$(OBJ) $(TESTOBJS) $(OBJECTS)
mkdir -p `dirname $@`
$(FC) $(FCFLAGS) -I$(BUILD) $(FRUIT) -o $@ $^ $(LDFLAGS)
# test dependencies
$(BUILD)/$(TEST)/$(TESTPROG)$(OBJ): $(TESTOBJS)
# build test objects
$(BUILD)/$(TEST)/%$(OBJ): $(SRC)/$(TEST)/%$(F95)
mkdir -p `dirname $@`
$(FC) $(FCFLAGS) $(FRUITINCLS) -J$(BUILD)/$(TEST) -c $< -o $@
# build fson objects
$(BUILD)/%$(OBJ): $(SRC)/%$(F95)
mkdir -p `dirname $@`
$(FC) $(FCFLAGS) -fpic -J$(BUILD) -c $< -o $@
$(DIST)/%$(EXE) : $(BUILD)/%$(OBJ) $(OBJECTS)
mkdir -p `dirname $@`
$(FC) $(FCFLAGS) -o $@ $^ $(LDFLAGS)
clean:
rm -rf $(BUILD)
rm -rf *$(MOD)
clobber: clean
rm -rf $(DIST)
install :
cp $(LIBTARGET) $(LIB_DIR)
cp $(BUILD)/*$(MOD) $(INCL_DIR)