##### paths ##### BINDIR = bin INCDIR = inc OBJDIR = obj SRCDIR = src ##### misc ##### QUIETLY = 1>/dev/null 2>/dev/null ##### sources, objects and libraries ##### BINNAME = liblfds600 AR_BINARY = $(BINDIR)/$(BINNAME).a SO_BINARY = $(BINDIR)/$(BINNAME).so SRCDIRS = lfds600_abstraction lfds600_freelist lfds600_queue lfds600_ringbuffer lfds600_slist lfds600_stack # TRD : be aware - in the linux makefile, with the one-pass linking behaviour of the GNU linker, the order # of source files matters! this is because it leads to the ordering of objects in the library and # that in turn, since the data structures all use the freelist API and the abstraction API, has to be # correct SOURCES = lfds600_queue_delete.c lfds600_queue_new.c lfds600_queue_query.c lfds600_queue_queue.c \ lfds600_ringbuffer_delete.c lfds600_ringbuffer_get_and_put.c lfds600_ringbuffer_new.c lfds600_ringbuffer_query.c \ lfds600_slist_delete.c lfds600_slist_get_and_set.c lfds600_slist_link.c lfds600_slist_new.c \ lfds600_stack_delete.c lfds600_stack_new.c lfds600_stack_push_pop.c lfds600_stack_query.c \ lfds600_freelist_delete.c lfds600_freelist_get_and_set.c lfds600_freelist_new.c lfds600_freelist_query.c lfds600_freelist_pop_push.c \ lfds600_abstraction_aligned_free.c lfds600_abstraction_aligned_malloc.c lfds600_abstraction_cas.c lfds600_abstraction_dcas.c lfds600_abstraction_increment.c OBJECTS = $(patsubst %.c,$(OBJDIR)/%.o,$(notdir $(SOURCES))) ##### CPU variants ##### GCCARCH = $(shell uname -m) ifeq ($(GCCARCH),x86_64) GCCARCH = core2 endif ifeq ($(findstring arm,$(GCCARCH)),arm) GCCARCH = armv6k endif ##### tools ##### MAKE = make MFLAGS = DG = gcc DGFLAGS = -MM -std=c99 -I"$(SRCDIR)" -I"$(INCDIR)" CC = gcc CBASE = -Wall -Wno-unknown-pragmas -std=c99 -march=$(GCCARCH) -c -I"$(SRCDIR)" -I"$(INCDIR)" CFREL = -O2 -finline-functions -Wno-strict-aliasing CFDBG = -O0 -g AR = ar AFLAGS = -rcs LD = gcc LFBASE = -Wall -std=c99 -shared LFREL = -O2 -s LFDBG = -O0 -g ##### rel/dbg .a/.so variants ##### ifeq ($(findstring so,$(MAKECMDGOALS)),so) CBASE := $(CBASE) -fpic endif CFLAGS = $(CBASE) $(CFDBG) LFLAGS = $(LFBASE) $(LFDBG) ifeq ($(findstring rel,$(MAKECMDGOALS)),rel) CFLAGS = $(CBASE) $(CFREL) LFLAGS = $(LFBASE) $(LFREL) endif ##### search paths ##### vpath %.c $(patsubst %,$(SRCDIR)/%:,$(SRCDIRS)) ##### implicit rules ##### $(OBJDIR)/%.o : %.c $(DG) $(DGFLAGS) $< >$(OBJDIR)/$*.d $(CC) $(CFLAGS) -o $@ $< ##### explicit rules ##### $(AR_BINARY) : $(OBJECTS) $(AR) $(AFLAGS) $(AR_BINARY) $(OBJECTS) $(SO_BINARY) : $(OBJECTS) $(LD) $(LFLAGS) $(SYSLIBS) $(OBJECTS) -o $(SO_BINARY) ##### phony ##### .PHONY : clean arrel ardbg sorel sodbg clean : @rm -f $(BINDIR)/$(BINNAME).* $(OBJDIR)/*.o $(OBJDIR)/*.d arrel : $(AR_BINARY) ardbg : $(AR_BINARY) sorel : $(SO_BINARY) sodbg : $(SO_BINARY) ##### dependencies ##### -include $(DEPENDS) ##### notes ##### # TRD : we use -std=c99 purely to permit C++ style comments