]> pd.if.org Git - liblfds/blob - liblfds/liblfds6.1.1/liblfds611/makefile.linux
Initial import (all versions, including the new 7.1.0)
[liblfds] / liblfds / liblfds6.1.1 / liblfds611 / makefile.linux
1 ##### paths #####\r
2 BINDIR  = bin\r
3 INCDIR  = inc\r
4 OBJDIR  = obj\r
5 SRCDIR  = src\r
6 \r
7 ##### misc #####\r
8 QUIETLY = 1>/dev/null 2>/dev/null\r
9 \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
18 #       correct \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
28 \r
29 ##### CPU variants #####\r
30 UNAME   = $(shell uname -m)\r
31 GCCARCH = -march=$(UNAME)\r
32 \r
33 ifeq ($(UNAME),x86_64)\r
34   GCCARCH = -march=core2\r
35 endif\r
36 \r
37 ifeq ($(findstring arm,$(UNAME)),arm)\r
38   GCCARCH = -march=armv6k -marm\r
39 endif\r
40 \r
41 ##### tools #####\r
42 MAKE    = make\r
43 MFLAGS  = \r
44 \r
45 DG      = gcc\r
46 DGFLAGS = -MM -std=c99 -I"$(SRCDIR)" -I"$(INCDIR)"\r
47 \r
48 CC      = gcc\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
51 CFDBG   = -O0 -g\r
52 \r
53 AR      = ar\r
54 AFLAGS  = -rcs\r
55 \r
56 LD      = gcc\r
57 LFBASE  = -Wall -std=c99 -shared\r
58 LFREL   = -O2 -s\r
59 LFDBG   = -O0 -g\r
60 \r
61 ##### rel/dbg .a/.so variants #####\r
62 ifeq ($(findstring so,$(MAKECMDGOALS)),so)\r
63   CBASE := $(CBASE) -fpic\r
64 endif\r
65 \r
66 CFLAGS  = $(CBASE) $(CFDBG)\r
67 LFLAGS  = $(LFBASE) $(LFDBG)\r
68 \r
69 ifeq ($(findstring rel,$(MAKECMDGOALS)),rel)\r
70   CFLAGS  = $(CBASE) $(CFREL)\r
71   LFLAGS  = $(LFBASE) $(LFREL)\r
72 endif\r
73 \r
74 ##### search paths #####\r
75 vpath %.c $(patsubst %,$(SRCDIR)/%:,$(SRCDIRS))\r
76 \r
77 ##### implicit rules #####\r
78 $(OBJDIR)/%.o : %.c\r
79         $(DG) $(DGFLAGS) $< >$(OBJDIR)/$*.d\r
80         $(CC) $(CFLAGS) -o $@ $<\r
81 \r
82 ##### explicit rules #####\r
83 $(AR_BINARY) : $(OBJECTS)\r
84         $(AR) $(AFLAGS) $(AR_BINARY) $(OBJECTS)\r
85 \r
86 $(SO_BINARY) : $(OBJECTS)\r
87         $(LD) $(LFLAGS) $(SYSLIBS) $(OBJECTS) -o $(SO_BINARY)\r
88 \r
89 ##### phony #####\r
90 .PHONY : clean arrel ardbg sorel sodbg\r
91 \r
92 clean : \r
93         @rm -f $(BINDIR)/$(BINNAME).* $(OBJDIR)/*.o $(OBJDIR)/*.d\r
94 \r
95 arrel : $(AR_BINARY)\r
96 ardbg : $(AR_BINARY)\r
97 \r
98 sorel : $(SO_BINARY)\r
99 sodbg : $(SO_BINARY)\r
100 \r
101 ##### dependencies #####\r
102 -include $(DEPENDS)\r
103 \r
104 ##### notes #####\r
105 # TRD : we use -std=c99 purely to permit C++ style comments\r
106 \r