blob: 5dbb7287d381368a36b4468f00b453a26cfc9af1 (
plain)
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
81
82
83
84
85
86
87
88
89
90
91
|
LIBNAME := elfu
EXENAME := elfucli
BUILDDIR := build
INCLUDEDIR := include
SRCDIR := src
EXE := $(BUILDDIR)/$(EXENAME)
STATICLIB := $(BUILDDIR)/lib$(LIBNAME).a
SHARED_VERMAJ := 0
SHARED_VERMIN := 0
SHARED_VERREV := 0
SHAREDLIB := $(BUILDDIR)/lib$(LIBNAME).so.$(SHARED_VERMAJ).$(SHARED_VERMIN).$(SHARED_VERREV)
HEADERS := $(shell find $(INCLUDEDIR)/ -iname "*.h")
HEADERS += $(shell find $(SRCDIR)/ -iname "*.h")
ALLSRCS := $(shell find $(SRCDIR)/ -iname "*.c")
LIBSRCS := $(filter $(SRCDIR)/lib$(LIBNAME)/%.c, $(ALLSRCS))
EXESRCS := $(filter-out $(SRCDIR)/lib$(LIBNAME)/%.c, $(ALLSRCS))
LIBOBJS := $(patsubst %.c, $(BUILDDIR)/%.o, $(LIBSRCS))
EXEOBJS := $(patsubst %.c, $(BUILDDIR)/%.o, $(EXESRCS))
ifeq ($(shell pkg-config --exists libelf > /dev/null 2> /dev/null ; echo $$?),0)
LIBELF_INCLUDES := $(shell pkg-config --cflags-only-I libelf)
LIBELF_CFLAGS := $(shell pkg-config --cflags-only-other libelf)
LIBELF_LDFLAGS := $(shell pkg-config --libs libelf)
else
LIBELF_INCLUDES :=
LIBELF_CFLAGS :=
LIBELF_LDFLAGS := -lelf
endif
INCLUDES := $(patsubst %, -I%, $(INCLUDEDIR) $(SRCDIR)) $(LIBELF_INCLUDES)
CFLAGS := -g -Wall -std=gnu99 -pedantic $(LIBELF_CFLAGS)
LDFLAGS := $(LIBELF_LDFLAGS)
.PHONY: all
all: $(STATICLIB) $(SHAREDLIB) $(EXE)
.PHONY: check
check: $(EXE)
make -C tests check
.PHONY: debug
debug: $(EXE)
gdb $(EXE) $(shell ps -e | sed "s/^ *\([0-9]\+\) .*$(EXENAME).*$$/\1/g;te;d;:e")
$(EXE): $(EXEOBJS) $(STATICLIB)
gcc -o $@ $^ $(LDFLAGS)
$(SHAREDLIB): $(LIBSRCS)
gcc $(INCLUDES) $(CFLAGS) -shared -fPIC -Wl,-soname,lib$(LIBNAME).so.$(SHARED_VERMAJ) -o $@ $^ $(LDFLAGS)
$(STATICLIB): $(LIBOBJS)
ar rcs $@ $^
$(BUILDDIR)/$(SRCDIR)/%.o: $(SRCDIR)/%.c $(HEADERS)
@if [ ! -d $(dir $@) ] ; then mkdir -p $(dir $@) ; fi
gcc $(INCLUDES) $(CFLAGS) -c -o $@ $<
.PHONY: docs
docs: doxygen-doc
.PHONY: doxygen-doc
doxygen-doc:
mkdir -p docs
doxygen
.PHONY: clean
clean:
rm -rf $(BUILDDIR)/
make -C tests clean
.PHONY: distclean
distclean: clean
find . -xdev -name "*~" -exec rm {} \;
find . -xdev -name "core" -exec rm {} \;
rm -rf docs/doxygen/
|