1PRODUCTNAME = ou
2MODE ?= DEVELOP
3BITS ?= 32
4
5include makefile.os
6
7CXX = gcc
8AR = ar
9LD = gcc
10
11CXXFLAGS = -fno-exceptions -fno-rtti -Wall -g
12ARFLAGS = -r
13LDFLAGS = -fno-exceptions -fno-rtti -g
14
15ifeq ($(OS_PLATFORM), i386)
16ifneq ($(BITS), 64)
17
18CXXFLAGS += -malign-double
19
20endif
21endif
22
23ifeq ($(MODE), DEBUG)
24
25CXXFLAGS += -D_DEBUG
26CXXFLAGS += -O0
27
28else
29ifeq ($(MODE), RELEASE)
30
31CXXFLAGS += -DNDEBUG
32CXXFLAGS += -O3 -funroll-loops
33
34else
35
36CXXFLAGS += -O2
37
38endif
39endif
40
41ifeq ($(BITS), 64)
42
43CXXFLAGS += -m64
44LDFLAGS += -m64
45
46else
47
48CXXFLAGS += -m32
49LDFLAGS += -m32
50
51endif
52
53
54SRCEXT=.cpp
55OBJEXT=$(OS_OBJ_EXT)
56
57OUTNAME := $(PRODUCTNAME)
58OUTDIR = ../../lib/
59OUTEXT=$(OS_LIB_EXT)
60
61TESTNAME := $(PRODUCTNAME)test
62TESTDIR = ../../bin/
63TESTEXT=$(OS_EXE_EXT)
64
65REFINEDCXX = $(notdir $(CXX))
66OUTINTDIR := ../../intermediate/$(REFINEDCXX)/
67TESTINTDIR := ../../intermediate/$(REFINEDCXX)_$(TESTNAME)/
68
69
70ifeq ($(MODE), DEBUG)
71
72OUTINTDIR := $(OUTINTDIR)debug
73TESTINTDIR := $(TESTINTDIR)debug
74
75else
76ifeq ($(MODE), RELEASE)
77
78OUTINTDIR := $(OUTINTDIR)release
79TESTINTDIR := $(TESTINTDIR)release
80
81else
82
83OUTINTDIR := $(OUTINTDIR)develop
84TESTINTDIR := $(TESTINTDIR)develop
85
86endif
87endif
88
89ifeq ($(BITS), 64)
90
91OUTINTDIR := $(OUTINTDIR)64
92TESTINTDIR := $(TESTINTDIR)64
93
94
95OUTNAME := $(OUTNAME)64
96TESTNAME := $(TESTNAME)64
97
98endif
99
100ifeq ($(MODE), DEBUG)
101
102OUTNAME := $(OUTNAME)_debug
103TESTNAME := $(TESTNAME)_debug
104
105endif
106
107ifeq ($(MODE), RELEASE)
108
109OUTNAME := $(OUTNAME)_release
110TESTNAME := $(TESTNAME)_release
111
112endif
113
114OUTINTDIR := $(OUTINTDIR)/
115TESTINTDIR := $(TESTINTDIR)/
116
117OUTPATH = $(OUTDIR)$(OS_LIB_PRE)$(OUTNAME)$(OUTEXT)
118TESTPATH = $(TESTDIR)$(TESTNAME)$(TESTEXT)
119
120ININCDIR = ../../include
121INDIR = ../../src/ou/
122
123INFILES = \
124	atomic \
125	customization \
126	malloc \
127	threadlocalstorage
128
129INOBJS = $(addprefix $(OUTINTDIR), $(addsuffix $(OBJEXT), $(INFILES)))
130
131
132TESTINCDIR = $(ININCDIR)
133TESTLIBDIR = $(OUTDIR)
134TESTLIBS = $(OUTNAME)
135TESTSRCDIR = ../../test/
136
137ifeq ($(OS_TYPE), Linux)
138TESTLIBS += pthread
139endif
140
141ifeq ($(OS_TYPE), SUN)
142TESTLIBS += pthread c
143endif
144
145
146TESTFILES = outest
147
148TESTOBJS = $(addprefix $(TESTINTDIR), $(addsuffix $(OBJEXT), $(TESTFILES)))
149
150
151.PHONY: develop debug release develop64 debug64 release64 all ou
152
153all: develop
154
155develop:
156	$(MAKE) ou MODE=DEVELOP BITS=32
157
158debug:
159	$(MAKE) ou MODE=DEBUG BITS=32
160
161release:
162	$(MAKE) ou MODE=RELEASE BITS=32
163
164develop64:
165	$(MAKE) ou MODE=DEVELOP BITS=64
166
167debug64:
168	$(MAKE) ou MODE=DEBUG BITS=64
169
170release64:
171	$(MAKE) ou MODE=RELEASE BITS=64
172
173ou: $(OUTPATH) $(TESTPATH)
174
175
176.PHONY: mkoutintpath mkoutpath mktestintpath mktestpath
177
178$(OUTPATH): mkoutintpath mkoutpath $(INOBJS)
179	$(OS_VP)echo BUILDING $(notdir $(OUTPATH))...
180	$(OS_VP)$(AR) $(ARFLAGS) $(OUTPATH) $(INOBJS)
181
182$(TESTPATH): mktestintpath mktestpath $(OUTPATH) $(TESTOBJS)
183	$(OS_VP)echo LINKING $(notdir $(TESTPATH))...
184	$(OS_VP)$(LD) $(LDFLAGS) $(LDADDFLAGS) -o $(TESTPATH) \
185		$(addprefix -I, $(TESTINCDIR) $(OS_INCLUDE_PATH)) \
186		$(addprefix -L, $(TESTLIBDIR) $(OS_LIB_PATH)) \
187		$(TESTOBJS) \
188		$(addprefix -l, $(TESTLIBS))
189
190$(OUTINTDIR)%$(OBJEXT): $(INDIR)%$(SRCEXT)
191	$(OS_VP)echo Compiling $(notdir $@)...
192	$(OS_VP)$(CXX) $(CXXFLAGS) $(CXXADDFLAGS) -c -o $@ \
193		$(addprefix -I, $(ININCDIR) $(OS_INCLUDE_PATH)) \
194		$<
195
196$(TESTINTDIR)%$(OBJEXT): $(TESTSRCDIR)%$(SRCEXT)
197	$(OS_VP)echo Compiling $(notdir $@)...
198	$(OS_VP)$(CXX) $(CXXFLAGS) $(CXXADDFLAGS) -c -o $@ \
199		$(addprefix -I, $(TESTINCDIR) $(OS_INCLUDE_PATH)) \
200		$<
201
202
203mkoutintpath:
204	$(call FN_MKDIR, $(OUTINTDIR))
205
206mktestintpath:
207	$(call FN_MKDIR, $(TESTINTDIR))
208
209mkoutpath:
210	$(call FN_MKDIR, $(OUTDIR))
211
212mktestpath:
213	$(call FN_MKDIR, $(TESTDIR))
214
215
216.PHONY: runtest
217
218runtest: $(TESTPATH)
219	$(TESTPATH)
220