makefile 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. PRODUCTNAME = ou
  2. MODE ?= DEVELOP
  3. BITS ?= 32
  4. include makefile.os
  5. CXX = gcc
  6. AR = ar
  7. LD = gcc
  8. CXXFLAGS = -fno-exceptions -fno-rtti -Wall -g
  9. ARFLAGS = -r
  10. LDFLAGS = -fno-exceptions -fno-rtti -g
  11. ifeq ($(OS_PLATFORM), i386)
  12. ifneq ($(BITS), 64)
  13. CXXFLAGS += -malign-double
  14. endif
  15. endif
  16. ifeq ($(MODE), DEBUG)
  17. CXXFLAGS += -D_DEBUG
  18. CXXFLAGS += -O0
  19. else
  20. ifeq ($(MODE), RELEASE)
  21. CXXFLAGS += -DNDEBUG
  22. CXXFLAGS += -O3 -funroll-loops
  23. else
  24. CXXFLAGS += -O2
  25. endif
  26. endif
  27. ifeq ($(BITS), 64)
  28. CXXFLAGS += -m64
  29. LDFLAGS += -m64
  30. else
  31. CXXFLAGS += -m32
  32. LDFLAGS += -m32
  33. endif
  34. SRCEXT=.cpp
  35. OBJEXT=$(OS_OBJ_EXT)
  36. OUTNAME := $(PRODUCTNAME)
  37. OUTDIR = ../../lib/
  38. OUTEXT=$(OS_LIB_EXT)
  39. TESTNAME := $(PRODUCTNAME)test
  40. TESTDIR = ../../bin/
  41. TESTEXT=$(OS_EXE_EXT)
  42. REFINEDCXX = $(notdir $(CXX))
  43. OUTINTDIR := ../../intermediate/$(REFINEDCXX)/
  44. TESTINTDIR := ../../intermediate/$(REFINEDCXX)_$(TESTNAME)/
  45. ifeq ($(MODE), DEBUG)
  46. OUTINTDIR := $(OUTINTDIR)debug
  47. TESTINTDIR := $(TESTINTDIR)debug
  48. else
  49. ifeq ($(MODE), RELEASE)
  50. OUTINTDIR := $(OUTINTDIR)release
  51. TESTINTDIR := $(TESTINTDIR)release
  52. else
  53. OUTINTDIR := $(OUTINTDIR)develop
  54. TESTINTDIR := $(TESTINTDIR)develop
  55. endif
  56. endif
  57. ifeq ($(BITS), 64)
  58. OUTINTDIR := $(OUTINTDIR)64
  59. TESTINTDIR := $(TESTINTDIR)64
  60. OUTNAME := $(OUTNAME)64
  61. TESTNAME := $(TESTNAME)64
  62. endif
  63. ifeq ($(MODE), DEBUG)
  64. OUTNAME := $(OUTNAME)_debug
  65. TESTNAME := $(TESTNAME)_debug
  66. endif
  67. ifeq ($(MODE), RELEASE)
  68. OUTNAME := $(OUTNAME)_release
  69. TESTNAME := $(TESTNAME)_release
  70. endif
  71. OUTINTDIR := $(OUTINTDIR)/
  72. TESTINTDIR := $(TESTINTDIR)/
  73. OUTPATH = $(OUTDIR)$(OS_LIB_PRE)$(OUTNAME)$(OUTEXT)
  74. TESTPATH = $(TESTDIR)$(TESTNAME)$(TESTEXT)
  75. ININCDIR = ../../include
  76. INDIR = ../../src/ou/
  77. INFILES = \
  78. atomic \
  79. customization \
  80. malloc \
  81. threadlocalstorage
  82. INOBJS = $(addprefix $(OUTINTDIR), $(addsuffix $(OBJEXT), $(INFILES)))
  83. TESTINCDIR = $(ININCDIR)
  84. TESTLIBDIR = $(OUTDIR)
  85. TESTLIBS = $(OUTNAME)
  86. TESTSRCDIR = ../../test/
  87. ifeq ($(OS_TYPE), Linux)
  88. TESTLIBS += pthread
  89. endif
  90. ifeq ($(OS_TYPE), SUN)
  91. TESTLIBS += pthread c
  92. endif
  93. TESTFILES = outest
  94. TESTOBJS = $(addprefix $(TESTINTDIR), $(addsuffix $(OBJEXT), $(TESTFILES)))
  95. .PHONY: develop debug release develop64 debug64 release64 all ou
  96. all: develop
  97. develop:
  98. $(MAKE) ou MODE=DEVELOP BITS=32
  99. debug:
  100. $(MAKE) ou MODE=DEBUG BITS=32
  101. release:
  102. $(MAKE) ou MODE=RELEASE BITS=32
  103. develop64:
  104. $(MAKE) ou MODE=DEVELOP BITS=64
  105. debug64:
  106. $(MAKE) ou MODE=DEBUG BITS=64
  107. release64:
  108. $(MAKE) ou MODE=RELEASE BITS=64
  109. ou: $(OUTPATH) $(TESTPATH)
  110. .PHONY: mkoutintpath mkoutpath mktestintpath mktestpath
  111. $(OUTPATH): mkoutintpath mkoutpath $(INOBJS)
  112. $(OS_VP)echo BUILDING $(notdir $(OUTPATH))...
  113. $(OS_VP)$(AR) $(ARFLAGS) $(OUTPATH) $(INOBJS)
  114. $(TESTPATH): mktestintpath mktestpath $(OUTPATH) $(TESTOBJS)
  115. $(OS_VP)echo LINKING $(notdir $(TESTPATH))...
  116. $(OS_VP)$(LD) $(LDFLAGS) $(LDADDFLAGS) -o $(TESTPATH) \
  117. $(addprefix -I, $(TESTINCDIR) $(OS_INCLUDE_PATH)) \
  118. $(addprefix -L, $(TESTLIBDIR) $(OS_LIB_PATH)) \
  119. $(TESTOBJS) \
  120. $(addprefix -l, $(TESTLIBS))
  121. $(OUTINTDIR)%$(OBJEXT): $(INDIR)%$(SRCEXT)
  122. $(OS_VP)echo Compiling $(notdir $@)...
  123. $(OS_VP)$(CXX) $(CXXFLAGS) $(CXXADDFLAGS) -c -o $@ \
  124. $(addprefix -I, $(ININCDIR) $(OS_INCLUDE_PATH)) \
  125. $<
  126. $(TESTINTDIR)%$(OBJEXT): $(TESTSRCDIR)%$(SRCEXT)
  127. $(OS_VP)echo Compiling $(notdir $@)...
  128. $(OS_VP)$(CXX) $(CXXFLAGS) $(CXXADDFLAGS) -c -o $@ \
  129. $(addprefix -I, $(TESTINCDIR) $(OS_INCLUDE_PATH)) \
  130. $<
  131. mkoutintpath:
  132. $(call FN_MKDIR, $(OUTINTDIR))
  133. mktestintpath:
  134. $(call FN_MKDIR, $(TESTINTDIR))
  135. mkoutpath:
  136. $(call FN_MKDIR, $(OUTDIR))
  137. mktestpath:
  138. $(call FN_MKDIR, $(TESTDIR))
  139. .PHONY: runtest
  140. runtest: $(TESTPATH)
  141. $(TESTPATH)