X-Git-Url: https://git.enpas.org/?a=blobdiff_plain;f=Makefile;h=c027c3645a06e5b42a335297fd8f29d4524130b5;hb=16cb3c59381ffa9ea5d9cc5c70be4851ef8f17b9;hp=726b92af7935ac51716def9c993676bf0b522457;hpb=e0510e4c926c48e89aee352ac09af007d1bec5d1;p=centaur.git diff --git a/Makefile b/Makefile index 726b92a..c027c36 100644 --- a/Makefile +++ b/Makefile @@ -1,35 +1,68 @@ -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)) -I /usr/include/libelf -CFLAGS := -g -Wall -LDFLAGS := -lelf +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) + 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): $(EXEOBJS) $(STATICLIB) + gcc -o $@ $^ $(LDFLAGS) -$(EXE): $(OBJS) - @if [ ! -d $(BUILDDIR) ] ; then echo "Error: Build dir '$(BUILDDIR)' does not exist." ; false ; fi - gcc $(LDFLAGS) -o $@ $^ +$(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 @@ -38,10 +71,8 @@ $(BUILDDIR)/$(SRCDIR)/%.o: $(SRCDIR)/%.c $(HEADERS) .PHONY: clean clean: - rm -f $(STATICLIB) - rm -f $(OBJS) - rm -f $(TESTEXES) rm -rf $(BUILDDIR)/ + make -C tests clean .PHONY: distclean