]> pd.if.org Git - liblfds/blob - liblfds/liblfds7.1.0/liblfds710/build/gcc_gnumake/Makefile
Initial import (all versions, including the new 7.1.0)
[liblfds] / liblfds / liblfds7.1.0 / liblfds710 / build / gcc_gnumake / Makefile
1 ##### notes #####
2 # TRD : -fno-strict-aliasing is needed because GCC has messed up type punning and __may_alias__ does absolutely nothing
3 #       -Wno-unused-but-set-variable and -Wno-uninitialized are needed because GCC seems confused by the atomic intrinsics
4 #       the code base for release has been compiled with those warnings enabled, to show any valid errors
5
6 ##### paths #####
7 BINDIR    := ../../bin
8 INCDIR    := ../../inc
9 OBJDIR    := ../../obj
10 SRCDIR    := ../../src
11 INSINCDIR := /usr/local/include/
12 INSLIBDIR := /usr/local/lib/
13
14 ##### misc #####
15 QUIETLY        := 1>/dev/null 2>/dev/null
16 VERSION_NUMBER := 1
17 MINOR_NUMBER   := 0
18 RELEASE_NUMBER := 0
19
20 ##### sources, objects and libraries #####
21 BINNAME    := liblfds710
22 ARFILENAME := $(BINNAME).a
23 ARPATHNAME := $(BINDIR)/$(ARFILENAME)
24 SOBASENAME := $(BINNAME).so
25 SONAME     := $(SOBASENAME).$(VERSION_NUMBER)
26 SOFILENAME := $(SONAME).$(MINOR_NUMBER).$(RELEASE_NUMBER)
27 SOPATHNAME := $(BINDIR)/$(SOFILENAME)
28 INCNAME    := $(INCDIR)/$(BINNAME).h
29 SRCDIRS    := lfds710_btree_addonly_unbalanced lfds710_freelist lfds710_hash_addonly lfds710_list_addonly_singlylinked_ordered lfds710_list_addonly_singlylinked_unordered lfds710_misc lfds710_prng lfds710_queue_bounded_manyproducer_manyconsumer lfds710_queue_bounded_singleproducer_singleconsumer lfds710_queue_unbounded_manyproducer_manyconsumer lfds710_ringbuffer lfds710_stack
30 SOURCES    := lfds710_hash_addonly_cleanup.c lfds710_hash_addonly_get.c lfds710_hash_addonly_init.c lfds710_hash_addonly_insert.c lfds710_hash_addonly_iterate.c lfds710_hash_addonly_query.c \
31               lfds710_list_addonly_singlylinked_ordered_cleanup.c lfds710_list_addonly_singlylinked_ordered_get.c lfds710_list_addonly_singlylinked_ordered_init.c lfds710_list_addonly_singlylinked_ordered_insert.c lfds710_list_addonly_singlylinked_ordered_query.c \
32               lfds710_list_addonly_singlylinked_unordered_cleanup.c lfds710_list_addonly_singlylinked_unordered_get.c lfds710_list_addonly_singlylinked_unordered_init.c lfds710_list_addonly_singlylinked_unordered_insert.c lfds710_list_addonly_singlylinked_unordered_query.c \
33               lfds710_btree_addonly_unbalanced_cleanup.c lfds710_btree_addonly_unbalanced_get.c lfds710_btree_addonly_unbalanced_init.c lfds710_btree_addonly_unbalanced_insert.c lfds710_btree_addonly_unbalanced_query.c \
34               lfds710_freelist_cleanup.c lfds710_freelist_init.c lfds710_freelist_pop.c lfds710_freelist_push.c lfds710_freelist_query.c \
35               lfds710_misc_internal_backoff_init.c lfds710_misc_globals.c lfds710_misc_query.c \
36               lfds710_prng_init.c \
37               lfds710_queue_bounded_manyproducer_manyconsumer_cleanup.c lfds710_queue_bounded_manyproducer_manyconsumer_dequeue.c lfds710_queue_bounded_manyproducer_manyconsumer_enqueue.c lfds710_queue_bounded_manyproducer_manyconsumer_init.c lfds710_queue_bounded_manyproducer_manyconsumer_query.c \
38               lfds710_queue_bounded_singleproducer_singleconsumer_cleanup.c lfds710_queue_bounded_singleproducer_singleconsumer_dequeue.c lfds710_queue_bounded_singleproducer_singleconsumer_enqueue.c lfds710_queue_bounded_singleproducer_singleconsumer_init.c lfds710_queue_bounded_singleproducer_singleconsumer_query.c \
39               lfds710_queue_unbounded_manyproducer_manyconsumer_cleanup.c lfds710_queue_unbounded_manyproducer_manyconsumer_dequeue.c lfds710_queue_unbounded_manyproducer_manyconsumer_enqueue.c lfds710_queue_unbounded_manyproducer_manyconsumer_init.c lfds710_queue_unbounded_manyproducer_manyconsumer_query.c \
40               lfds710_ringbuffer_cleanup.c lfds710_ringbuffer_init.c lfds710_ringbuffer_query.c lfds710_ringbuffer_read.c lfds710_ringbuffer_write.c \
41               lfds710_stack_cleanup.c lfds710_stack_init.c lfds710_stack_pop.c lfds710_stack_push.c lfds710_stack_query.c
42 OBJECTS    := $(patsubst %.c,$(OBJDIR)/%.o,$(notdir $(SOURCES)))
43 SYSLIBS    := -lgcc
44
45 ##### tools #####
46 DG                     := gcc
47 DGFLAGS_MANDATORY      := -MM
48 DGFLAGS_OPTIONAL       := -std=gnu89
49
50 CC                     := gcc
51 CFLAGS_MANDATORY       := -c -fno-strict-aliasing
52 CFLAGS_OPTIONAL        := -ffreestanding -nostdinc -std=gnu89 -Wall -Werror -Wno-unknown-pragmas -Wno-unused-but-set-variable -Wno-uninitialized
53 CFLAGS_MANDATORY_COV   := -O0 -ggdb -DCOVERAGE -fprofile-arcs -ftest-coverage
54 CFLAGS_MANDATORY_DBG   := -O0 -ggdb -D_DEBUG
55 CFLAGS_MANDATORY_PROF  := -O0 -ggdb -DPROF     -pg
56 CFLAGS_MANDATORY_REL   := -O2       -DNDEBUG
57 CFLAGS_MANDATORY_TSAN  := -O0 -ggdb -DTSAN     -fsanitize=thread -fPIC
58
59 AR                     := ar
60 ARFLAGS                :=
61 ARFLAGS_MANDATORY      := rcs
62 ARFLAGS_OPTIONAL       :=
63
64 LD                     := gcc
65 LDFLAGS_MANDATORY      := -shared -Wl,-soname,$(SONAME) -o $(SOPATHNAME)
66 LDFLAGS_OPTIONAL       := -nodefaultlibs -nostdlib -std=gnu89 -Wall -Werror
67 LDFLAGS_MANDATORY_COV  := -O0 -fprofile-arcs -ftest-coverage
68 LDFLAGS_MANDATORY_DBG  := -O0 -ggdb
69 LDFLAGS_MANDATORY_PROF := -O0 -pg
70 LDFLAGS_MANDATORY_REL  := -O2 -s
71 LDFLAGS_MANDATORY_TSAN := -O0 -fsanitize=thread -fPIC
72
73 ##### build variants #####
74 ifeq ($(findstring so,$(MAKECMDGOALS)),so)
75   CFLAGS_MANDATORY += -fPIC
76 endif
77
78 # TRD : default to debug
79 ifeq ($(MAKECMDGOALS),)
80   CFLAGS_MANDATORY  += $(CFLAGS_MANDATORY_DBG)
81   LDFLAGS_MANDATORY += $(LDFLAGS_MANDATORY_DBG)
82 endif
83
84 ifeq ($(findstring cov,$(MAKECMDGOALS)),cov)
85   CFLAGS_MANDATORY  += $(CFLAGS_MANDATORY_COV)
86   LDFLAGS_MANDATORY += $(LDFLAGS_MANDATORY_COV)
87   SYSLIBS += -lgcov
88 endif
89
90 ifeq ($(findstring dbg,$(MAKECMDGOALS)),dbg)
91   CFLAGS_MANDATORY  += $(CFLAGS_MANDATORY_DBG)
92   LDFLAGS_MANDATORY += $(LDFLAGS_MANDATORY_DBG)
93 endif
94
95 ifeq ($(findstring prof,$(MAKECMDGOALS)),prof)
96   CFLAGS_MANDATORY  += $(CFLAGS_MANDATORY_PROF)
97   LDFLAGS_MANDATORY += $(LDFLAGS_MANDATORY_PROF)
98 endif
99
100 ifeq ($(findstring rel,$(MAKECMDGOALS)),rel)
101   CFLAGS_MANDATORY  += $(CFLAGS_MANDATORY_REL)
102   LDFLAGS_MANDATORY += $(LDFLAGS_MANDATORY_REL)
103 endif
104
105 ifeq ($(findstring tsan,$(MAKECMDGOALS)),tsan)
106   CFLAGS_MANDATORY  += $(CFLAGS_MANDATORY_TSAN)
107   LDFLAGS_MANDATORY += $(LDFLAGS_MANDATORY_TSAN)
108 endif
109
110 ##### search paths #####
111 vpath %.c $(patsubst %,$(SRCDIR)/%:,$(SRCDIRS))
112
113 ##### implicit rules #####
114 $(OBJDIR)/%.o : %.c
115         $(DG) $(DGFLAGS_OPTIONAL) $(DGFLAGS) $(DGFLAGS_MANDATORY) $< >$(OBJDIR)/$*.d
116         $(CC) $(CFLAGS_OPTIONAL) $(CFLAGS) $(CFLAGS_MANDATORY) -o $@ $<
117
118 ##### explicit rules #####
119 $(ARPATHNAME) : $(OBJECTS)
120         $(AR) $(ARFLAGS_OPTIONAL) $(ARFLAGS) $(ARFLAGS_MANDATORY) $(ARPATHNAME) $(OBJECTS)
121
122 $(SOPATHNAME) : $(OBJECTS)
123         $(LD) $(LDFLAGS_OPTIONAL) $(LDFLAGS) $(LDFLAGS_MANDATORY) $(OBJECTS) -lgcov -lgcc -o $(SOPATHNAME)
124         @ln -fs $(SOFILENAME) $(BINDIR)/$(SONAME)
125         @ln -fs $(SOFILENAME) $(BINDIR)/$(SOBASENAME)
126
127 ##### phony #####
128 .PHONY : clean ar_cov ar_dbg ar_prof ar_rel ar_tsan ar_vanilla ar_install ar_uninstall so_dbg so_prof so_rel so_tsan so_vanilla so_install so_uninstall
129
130 clean : 
131         @rm -f $(BINDIR)/* $(OBJDIR)/*
132
133 ar_cov       : $(ARPATHNAME) # archive (.a), coverage
134 ar_dbg       : $(ARPATHNAME) # archive (.a), debug
135 ar_prof      : $(ARPATHNAME) # archive (.a), profiling
136 ar_rel       : $(ARPATHNAME) # archive (.a), release
137 ar_tsan      : $(ARPATHNAME) # archive (.a), thread sanitizer
138 ar_vanilla   : $(ARPATHNAME) # archive (.a), no specific-build arguments
139 ar_install   :
140   # TRD : leading backslash to use command rather than alias
141   #       as many Linux distros have a built-in alias to force
142   #       a prompt ("y/n?") on file overwrite - silent and
143   #       unexpected interference which breaks a makefile
144         @mkdir -p $(INSLIBDIR)
145         @\cp $(ARPATHNAME) $(INSLIBDIR)
146         @mkdir -p $(INSINCDIR)
147         @\cp -r $(INCDIR)/* $(INSINCDIR)
148 ar_uninstall :
149         @rm    $(INSLIBDIR)/$(ARFILENAME)
150         @rm -r $(INSINCDIR)/$(BINNAME)
151         @rm -r $(INSINCDIR)/$(BINNAME).h
152
153 # TRD : so_cov currently disabled as it cannot work with -nostdlib -nodefaultlibs
154 # so_cov       : $(SOPATHNAME) # shared (.so), coverage
155 so_dbg       : $(SOPATHNAME) # shared (.so), debug
156 so_prof      : $(SOPATHNAME) # shared (.so), profiling
157 so_rel       : $(SOPATHNAME) # shared (.so), release
158 so_tsan      : $(SOPATHNAME) # shared (.so), thread sanitizer
159 so_vanilla   : $(SOPATHNAME) # shared (.so), no specific-build arguments
160 so_install   : 
161         @mkdir -p $(INSINCDIR)
162         @\cp $(SOPATHNAME) $(INSLIBDIR)
163         @ldconfig -vn $(INSLIBDIR)
164         @ln -s $(SONAME) $(INSLIBDIR)/$(SOBASENAME)
165         @mkdir -p $(INSLIBDIR)
166         @\cp -r $(INCDIR)/* $(INSINCDIR)
167 so_uninstall : 
168         @rm -f $(INSLIBDIR)/$(SOFILENAME)
169         @rm -f $(INSLIBDIR)/$(SOBASENAME)
170         @rm -f $(INSLIBDIR)/$(SONAME)
171         @rm -r $(INSINCDIR)/$(BINNAME)
172         @rm -r $(INSINCDIR)/$(BINNAME).h
173
174 ##### dependencies #####
175 -include $(DEPENDS)
176