X-Git-Url: https://git.enpas.org/?a=blobdiff_plain;f=Makefile;h=5dbb7287d381368a36b4468f00b453a26cfc9af1;hb=HEAD;hp=9e07a474857cd578c5d18a1524aeb2f184db3a00;hpb=00109bea051ebb16f337c078c96e3492ea4a764b;p=centaur.git diff --git a/Makefile b/Makefile index 9e07a47..5dbb728 100644 --- a/Makefile +++ b/Makefile @@ -1,50 +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: default -default: $(EXE) +.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]\+\) .*$(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/