X-Git-Url: https://git.enpas.org/?a=blobdiff_plain;f=Makefile;h=5dbb7287d381368a36b4468f00b453a26cfc9af1;hb=HEAD;hp=df5f59fc4e95f672bdfc7ba4ca52ea4433d5b21f;hpb=d9eb4398773cbda1dc185f4cf7b1b0e4cb9fb135;p=centaur.git diff --git a/Makefile b/Makefile index df5f59f..5dbb728 100644 --- a/Makefile +++ b/Makefile @@ -1,46 +1,91 @@ -PROJ := elfedit +LIBNAME := elfu +EXENAME := elfucli BUILDDIR := build INCLUDEDIR := include SRCDIR := src -EXE := $(BUILDDIR)/$(PROJ) +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") -SOURCES := $(shell find $(SRCDIR)/ -iname "*.c") -OBJS := $(patsubst %.c, $(BUILDDIR)/%.o, $(SOURCES)) +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) + -INCLUDES := $(patsubst %, -I%, $(INCLUDEDIR) $(SRCDIR)) -I /usr/include/libelf -CFLAGS := -g -Wall -LDFLAGS := -lelf +.PHONY: all +all: $(STATICLIB) $(SHAREDLIB) $(EXE) -.PHONY: default -default: $(EXE) +.PHONY: check +check: $(EXE) + make -C tests check -$(EXE): $(OBJS) - @if [ ! -d $(BUILDDIR) ] ; then echo "Error: Build dir '$(BUILDDIR)' does not exist." ; false ; fi - gcc $(LDFLAGS) -o $@ $^ +.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 -f $(STATICLIB) - rm -f $(OBJS) - rm -f $(TESTEXES) 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/