README.md: x86-32/64 support
[centaur.git] / Makefile
1 LIBNAME := elfu
2 EXENAME := elfucli
3
4 BUILDDIR   := build
5 INCLUDEDIR := include
6 SRCDIR     := src
7
8 EXE       := $(BUILDDIR)/$(EXENAME)
9 STATICLIB := $(BUILDDIR)/lib$(LIBNAME).a
10
11 SHARED_VERMAJ := 0
12 SHARED_VERMIN := 0
13 SHARED_VERREV := 0
14 SHAREDLIB     := $(BUILDDIR)/lib$(LIBNAME).so.$(SHARED_VERMAJ).$(SHARED_VERMIN).$(SHARED_VERREV)
15
16 HEADERS := $(shell find $(INCLUDEDIR)/ -iname "*.h")
17 HEADERS += $(shell find $(SRCDIR)/ -iname "*.h")
18
19 ALLSRCS := $(shell find $(SRCDIR)/ -iname "*.c")
20 LIBSRCS := $(filter $(SRCDIR)/lib$(LIBNAME)/%.c, $(ALLSRCS))
21 EXESRCS := $(filter-out $(SRCDIR)/lib$(LIBNAME)/%.c, $(ALLSRCS))
22 LIBOBJS := $(patsubst %.c, $(BUILDDIR)/%.o, $(LIBSRCS))
23 EXEOBJS := $(patsubst %.c, $(BUILDDIR)/%.o, $(EXESRCS))
24
25
26 ifeq ($(shell pkg-config --exists libelf > /dev/null 2> /dev/null ; echo $$?),0)
27         LIBELF_INCLUDES := $(shell pkg-config --cflags-only-I libelf)
28         LIBELF_CFLAGS   := $(shell pkg-config --cflags-only-other libelf)
29         LIBELF_LDFLAGS  := $(shell pkg-config --libs libelf)
30 else
31         LIBELF_INCLUDES :=
32         LIBELF_CFLAGS   :=
33         LIBELF_LDFLAGS  := -lelf
34 endif
35
36
37 INCLUDES := $(patsubst %, -I%, $(INCLUDEDIR) $(SRCDIR)) $(LIBELF_INCLUDES)
38 CFLAGS   := -g -Wall -std=gnu99 -pedantic $(LIBELF_CFLAGS)
39 LDFLAGS  := $(LIBELF_LDFLAGS)
40
41
42
43
44 .PHONY: all
45 all: $(STATICLIB) $(SHAREDLIB) $(EXE)
46
47
48 .PHONY: check
49 check: $(EXE)
50         make -C tests check
51
52
53 .PHONY: debug
54 debug: $(EXE)
55         gdb $(EXE) $(shell ps -e | sed "s/^ *\([0-9]\+\) .*$(EXENAME).*$$/\1/g;te;d;:e")
56
57
58 $(EXE): $(EXEOBJS) $(STATICLIB)
59         gcc -o $@ $^ $(LDFLAGS)
60
61 $(SHAREDLIB): $(LIBSRCS)
62         gcc $(INCLUDES) $(CFLAGS) -shared -fPIC -Wl,-soname,lib$(LIBNAME).so.$(SHARED_VERMAJ) -o $@ $^ $(LDFLAGS)
63
64 $(STATICLIB): $(LIBOBJS)
65         ar rcs $@ $^
66
67 $(BUILDDIR)/$(SRCDIR)/%.o: $(SRCDIR)/%.c $(HEADERS)
68         @if [ ! -d $(dir $@) ] ; then mkdir -p $(dir $@) ; fi
69         gcc $(INCLUDES) $(CFLAGS) -c -o $@ $<
70
71
72 .PHONY: docs
73 docs: doxygen-doc
74
75 .PHONY: doxygen-doc
76 doxygen-doc:
77         mkdir -p docs
78         doxygen
79
80
81 .PHONY: clean
82 clean:
83         rm -rf $(BUILDDIR)/
84         make -C tests clean
85
86
87 .PHONY: distclean
88 distclean: clean
89         find . -xdev -name "*~" -exec rm {} \;
90         find . -xdev -name "core" -exec rm {} \;
91         rm -rf docs/doxygen/