X-Git-Url: https://git.enpas.org/?a=blobdiff_plain;f=Makefile;h=5dbb7287d381368a36b4468f00b453a26cfc9af1;hb=HEAD;hp=fc7c567fe1940daaec46a038d9702dc37b5c812b;hpb=602f9247d9fe8ce4625147d0da105a43c4d869a2;p=centaur.git diff --git a/Makefile b/Makefile index fc7c567..5dbb728 100644 --- a/Makefile +++ b/Makefile @@ -1,60 +1,91 @@ -PROJ := elfucli - -LIBRARIES := libelf +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)) $(shell pkg-config --cflags-only-I $(LIBRARIES)) -CFLAGS := -g -Wall $(shell pkg-config --cflags-only-other $(LIBRARIES)) -LDFLAGS := $(shell pkg-config --libs $(LIBRARIES)) +INCLUDES := $(patsubst %, -I%, $(INCLUDEDIR) $(SRCDIR)) $(LIBELF_INCLUDES) +CFLAGS := -g -Wall -std=gnu99 -pedantic $(LIBELF_CFLAGS) +LDFLAGS := $(LIBELF_LDFLAGS) -.PHONY: default -default: $(EXE) + +.PHONY: all +all: $(STATICLIB) $(SHAREDLIB) $(EXE) .PHONY: check check: $(EXE) - $(EXE) $(EXE) -o testexe - @cmp $(EXE) testexe - @rm testexe - @echo "Check successful." + make -C tests check .PHONY: debug debug: $(EXE) - gdb $(EXE) $(shell ps -e | sed "s/^ *\([0-9]\+\) .*$(PROJ).*$$/\1/g;te;d;:e") + gdb $(EXE) $(shell ps -e | sed "s/^ *\([0-9]\+\) .*$(EXENAME).*$$/\1/g;te;d;:e") -$(EXE): $(OBJS) - @if [ ! -d $(BUILDDIR) ] ; then echo "Error: Build dir '$(BUILDDIR)' does not exist." ; false ; fi +$(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/