]> pd.if.org Git - liblfds/blob - liblfds/liblfds6.1.0/liblfds610/makefile.linux
Initial import (all versions, including the new 7.1.0)
[liblfds] / liblfds / liblfds6.1.0 / liblfds610 / makefile.linux
1 ##### paths #####
2 BINDIR  = bin
3 INCDIR  = inc
4 OBJDIR  = obj
5 SRCDIR  = src
6
7 ##### misc #####
8 QUIETLY = 1>/dev/null 2>/dev/null
9
10 ##### sources, objects and libraries #####
11 BINNAME = liblfds610
12 AR_BINARY = $(BINDIR)/$(BINNAME).a
13 SO_BINARY = $(BINDIR)/$(BINNAME).so
14 SRCDIRS = lfds610_abstraction lfds610_freelist lfds610_liblfds lfds610_queue lfds610_ringbuffer lfds610_slist lfds610_stack
15 # TRD : be aware - in the linux makefile, with the one-pass linking behaviour of the GNU linker, the order
16 #       of source files matters!  this is because it leads to the ordering of objects in the library and
17 #       that in turn, since the data structures all use the freelist API and the abstraction API, has to be
18 #       correct 
19 # TRD : lfds610_abstraction_cas.c lfds610_abstraction_dcas.c lfds610_abstraction_increment.c are inlined and are compiled by every C file
20 SOURCES = lfds610_queue_delete.c lfds610_queue_new.c lfds610_queue_query.c lfds610_queue_queue.c \
21           lfds610_ringbuffer_delete.c lfds610_ringbuffer_get_and_put.c lfds610_ringbuffer_new.c lfds610_ringbuffer_query.c \
22           lfds610_slist_delete.c lfds610_slist_get_and_set.c lfds610_slist_link.c lfds610_slist_new.c \
23           lfds610_stack_delete.c lfds610_stack_new.c lfds610_stack_push_pop.c lfds610_stack_query.c \
24           lfds610_freelist_delete.c lfds610_freelist_get_and_set.c lfds610_freelist_new.c lfds610_freelist_query.c lfds610_freelist_pop_push.c \
25           lfds610_liblfds_abstraction_test_helpers.c lfds610_liblfds_aligned_free.c lfds610_liblfds_aligned_malloc.c \
26           lfds610_abstraction_free.c lfds610_abstraction_malloc.c
27 OBJECTS = $(patsubst %.c,$(OBJDIR)/%.o,$(notdir $(SOURCES)))
28
29 ##### CPU variants #####
30 UNAME   = $(shell uname -m)
31 GCCARCH = -march=$(UNAME)
32
33 ifeq ($(UNAME),x86_64)
34   GCCARCH = -march=core2
35 endif
36
37 ifeq ($(findstring arm,$(UNAME)),arm)
38   GCCARCH = -march=armv6k -marm
39 endif
40
41 ##### tools #####
42 MAKE    = make
43 MFLAGS  = 
44
45 DG      = gcc
46 DGFLAGS = -MM -std=c99 -I"$(SRCDIR)" -I"$(INCDIR)"
47
48 CC      = gcc
49 CBASE   = -Wall -Wno-unknown-pragmas -std=c99 $(GCCARCH) -pthread -c -I"$(SRCDIR)" -I"$(INCDIR)"
50 CFREL   = -O2 -finline-functions -Wno-strict-aliasing
51 CFDBG   = -O0 -g
52
53 AR      = ar
54 AFLAGS  = -rcs
55
56 LD      = gcc
57 LFBASE  = -Wall -std=c99 -shared
58 LFREL   = -O2 -s
59 LFDBG   = -O0 -g
60
61 ##### rel/dbg .a/.so variants #####
62 ifeq ($(findstring so,$(MAKECMDGOALS)),so)
63   CBASE := $(CBASE) -fpic
64 endif
65
66 CFLAGS  = $(CBASE) $(CFDBG)
67 LFLAGS  = $(LFBASE) $(LFDBG)
68
69 ifeq ($(findstring rel,$(MAKECMDGOALS)),rel)
70   CFLAGS  = $(CBASE) $(CFREL)
71   LFLAGS  = $(LFBASE) $(LFREL)
72 endif
73
74 ##### search paths #####
75 vpath %.c $(patsubst %,$(SRCDIR)/%:,$(SRCDIRS))
76
77 ##### implicit rules #####
78 $(OBJDIR)/%.o : %.c
79         $(DG) $(DGFLAGS) $< >$(OBJDIR)/$*.d
80         $(CC) $(CFLAGS) -o $@ $<
81
82 ##### explicit rules #####
83 $(AR_BINARY) : $(OBJECTS)
84         $(AR) $(AFLAGS) $(AR_BINARY) $(OBJECTS)
85
86 $(SO_BINARY) : $(OBJECTS)
87         $(LD) $(LFLAGS) $(SYSLIBS) $(OBJECTS) -o $(SO_BINARY)
88
89 ##### phony #####
90 .PHONY : clean arrel ardbg sorel sodbg
91
92 clean : 
93         @rm -f $(BINDIR)/$(BINNAME).* $(OBJDIR)/*.o $(OBJDIR)/*.d
94
95 arrel : $(AR_BINARY)
96 ardbg : $(AR_BINARY)
97
98 sorel : $(SO_BINARY)
99 sodbg : $(SO_BINARY)
100
101 ##### dependencies #####
102 -include $(DEPENDS)
103
104 ##### notes #####
105 # TRD : we use -std=c99 purely to permit C++ style comments
106