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