Fix Makefile for Red Hat's libelf that does not support pkg-config
[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 -fPIC $(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): $(LIBOBJS)
62         gcc -shared -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: clean
73 clean:
74         rm -rf $(BUILDDIR)/
75         make -C tests clean
76
77
78 .PHONY: distclean
79 distclean: clean
80         find . -xdev -name "*~" -exec rm {} \;
81         find . -xdev -name "core" -exec rm {} \;