8 QUIETLY = 1>/dev/null 2>/dev/null
\r
10 ##### sources, objects and libraries #####
\r
11 BINNAME = liblfds611
\r
12 AR_BINARY = $(BINDIR)/$(BINNAME).a
\r
13 SO_BINARY = $(BINDIR)/$(BINNAME).so
\r
14 SRCDIRS = lfds611_abstraction lfds611_freelist lfds611_liblfds lfds611_queue lfds611_ringbuffer lfds611_slist lfds611_stack
\r
15 # TRD : be aware - in the linux makefile, with the one-pass linking behaviour of the GNU linker, the order
\r
16 # of source files matters! this is because it leads to the ordering of objects in the library and
\r
17 # that in turn, since the data structures all use the freelist API and the abstraction API, has to be
\r
19 # TRD : lfds611_abstraction_cas.c lfds611_abstraction_dcas.c lfds611_abstraction_increment.c are inlined and are compiled by every C file
\r
20 SOURCES = lfds611_queue_delete.c lfds611_queue_new.c lfds611_queue_query.c lfds611_queue_queue.c \
\r
21 lfds611_ringbuffer_delete.c lfds611_ringbuffer_get_and_put.c lfds611_ringbuffer_new.c lfds611_ringbuffer_query.c \
\r
22 lfds611_slist_delete.c lfds611_slist_get_and_set.c lfds611_slist_link.c lfds611_slist_new.c \
\r
23 lfds611_stack_delete.c lfds611_stack_new.c lfds611_stack_push_pop.c lfds611_stack_query.c \
\r
24 lfds611_freelist_delete.c lfds611_freelist_get_and_set.c lfds611_freelist_new.c lfds611_freelist_query.c lfds611_freelist_pop_push.c \
\r
25 lfds611_liblfds_abstraction_test_helpers.c lfds611_liblfds_aligned_free.c lfds611_liblfds_aligned_malloc.c \
\r
26 lfds611_abstraction_free.c lfds611_abstraction_malloc.c
\r
27 OBJECTS = $(patsubst %.c,$(OBJDIR)/%.o,$(notdir $(SOURCES)))
\r
29 ##### CPU variants #####
\r
30 UNAME = $(shell uname -m)
\r
31 GCCARCH = -march=$(UNAME)
\r
33 ifeq ($(UNAME),x86_64)
\r
34 GCCARCH = -march=core2
\r
37 ifeq ($(findstring arm,$(UNAME)),arm)
\r
38 GCCARCH = -march=armv6k -marm
\r
46 DGFLAGS = -MM -std=c99 -I"$(SRCDIR)" -I"$(INCDIR)"
\r
49 CBASE = -Wall -Wno-unknown-pragmas -std=c99 $(GCCARCH) -pthread -c -I"$(SRCDIR)" -I"$(INCDIR)"
\r
50 CFREL = -O2 -finline-functions -Wno-strict-aliasing
\r
57 LFBASE = -Wall -std=c99 -shared
\r
61 ##### rel/dbg .a/.so variants #####
\r
62 ifeq ($(findstring so,$(MAKECMDGOALS)),so)
\r
63 CBASE := $(CBASE) -fpic
\r
66 CFLAGS = $(CBASE) $(CFDBG)
\r
67 LFLAGS = $(LFBASE) $(LFDBG)
\r
69 ifeq ($(findstring rel,$(MAKECMDGOALS)),rel)
\r
70 CFLAGS = $(CBASE) $(CFREL)
\r
71 LFLAGS = $(LFBASE) $(LFREL)
\r
74 ##### search paths #####
\r
75 vpath %.c $(patsubst %,$(SRCDIR)/%:,$(SRCDIRS))
\r
77 ##### implicit rules #####
\r
79 $(DG) $(DGFLAGS) $< >$(OBJDIR)/$*.d
\r
80 $(CC) $(CFLAGS) -o $@ $<
\r
82 ##### explicit rules #####
\r
83 $(AR_BINARY) : $(OBJECTS)
\r
84 $(AR) $(AFLAGS) $(AR_BINARY) $(OBJECTS)
\r
86 $(SO_BINARY) : $(OBJECTS)
\r
87 $(LD) $(LFLAGS) $(SYSLIBS) $(OBJECTS) -o $(SO_BINARY)
\r
90 .PHONY : clean arrel ardbg sorel sodbg
\r
93 @rm -f $(BINDIR)/$(BINNAME).* $(OBJDIR)/*.o $(OBJDIR)/*.d
\r
95 arrel : $(AR_BINARY)
\r
96 ardbg : $(AR_BINARY)
\r
98 sorel : $(SO_BINARY)
\r
99 sodbg : $(SO_BINARY)
\r
101 ##### dependencies #####
\r
102 -include $(DEPENDS)
\r
105 # TRD : we use -std=c99 purely to permit C++ style comments
\r