-
Notifications
You must be signed in to change notification settings - Fork 2
/
refl.mk
64 lines (45 loc) · 1.42 KB
/
refl.mk
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
OPENMP = #-fopenmp
TARGETS = librefl.so librefl++.so userefl userefl++
COMPILEFLAGS = -Wall $(OPENMP) -g -O2 -fPIC
CXXPPFLAGS = -DUSE_EXPECT $(CXXINCLUDES)
CXXFLAGS = -std=c++0x $(COMPILEFLAGS) $(CXXPPFLAGS)
CFLAGS = -std=c99 -pedantic $(COMPILEFLAGS)
LDFLAGS = $(OPENMP)
all: $(TARGETS)
userefl: LD = $(CC)
userefl: userefl.o librefl.so cosi.o
userefl++: LD = $(CXX)
userefl++: userefl++.o librefl++.so
refl-method.o: CFLAGS += $(shell pkg-config --cflags libffi)
librefl.a: refl.o refl-error.o refl-module.o refl-type.o refl-obj.o \
refl-method.o refl-die.o
librefl.so: LDFLAGS += -shared -ldw $(shell pkg-config --libs libffi) \
-Wl,--whole-archive,librefl.a,--no-whole-archive
librefl.so: LD = $(CC)
librefl.so: librefl.a
librefl++.so: LDFLAGS += -shared -ldw $(shell pkg-config --libs libffi)
librefl++.so: LD = $(CXX)
librefl++.so: refl++.o librefl.a
%.o: %.cc %.d
$(CXX) $(CXXFLAGS) -c $< -o $@
%.o: %.c %.d
$(CC) $(CFLAGS) -c $< -o $@
include $(wildcard *.d)
%.d: %.cc
$(CXX) $(CXXFLAGS) -MM -MT '$(<F:%.cc=%.o) $@' $< > $@
%.d: %.c
$(CC) $(CFLAGS) -MM -MT '$(<F:%.c=%.o) $@' $< > $@
test-%: %.o %.cc test.o
$(CXX) $(CXXFLAGS) $(LDFLAGS) -DSELFTEST $(@:test-%=%.cc) $(filter-out $<,$(filter %.o,$^)) -o $@
./$@ || (rm -f $@; exit 1)
%:
$(LD) $(LDFLAGS) $^ -o $@
%.a:
$(AR) cru $@ $^
clean:
rm -f *.o *.d *.a $(TARGETS)
distclean: clean
rm -f Makefile
.PHONY: all clean dist distclean
.PRECIOUS: %.d
Makefile:;