Makefile 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. #
  2. # Makefile
  3. #
  4. ROOTPATH := /opt/build/PresenceDetection
  5. COMMANDLINE := $(shell ps -o args= $$PPID)
  6. ARCHS := $(shell ls $(ROOTPATH)/Makefile.conf.* | grep -v base | sed 's/.*Makefile\.conf\.//g')
  7. ARCH := $(filter $(ARCHS),$(MAKECMDGOALS))
  8. ifeq ($(ARCH),)
  9. ARCH := x86-64
  10. endif
  11. ifeq (,$(findstring -S,$(COMMANDLINE)))
  12. $(info ARCH: $(ARCH))
  13. endif
  14. -include $(ROOTPATH)/Makefile.conf.$(ARCH)
  15. -include $(ROOTPATH)/Makefile.conf.base
  16. PID := $(shell echo $$$$)
  17. PREFIX = nice -n 19 /usr/bin/time --format='%E (%U)' -o /dev/shm/t-$(PID)
  18. POSTFIX = && cat /dev/shm/t-$(PID) | xargs -I "%" echo -en '\033[1A\033[100D\033[60C' "%\n" && rm -f /dev/shm/t-$(PID)
  19. ARNAME = $(notdir $(CURDIR)).a.$(ARCH)
  20. SUBDIRS := $(wildcard */.)
  21. SUBDIRS := $(foreach dir,$(SUBDIRS),$(subst /.,,$(dir)))
  22. FILTER = crash%
  23. SUBDIRS := $(filter-out $(FILTER),$(SUBDIRS))
  24. FILTER = doc%
  25. SUBDIRS := $(filter-out $(FILTER),$(SUBDIRS))
  26. FILTER = Libraries%
  27. SUBDIRS := $(filter-out $(FILTER),$(SUBDIRS))
  28. SUBDIRARS = $(foreach dir,$(SUBDIRS),$(dir)/$(dir).a)
  29. LOCALSOURCES = $(wildcard *.cpp *.cc)
  30. LOCALOBJECTS := $(LOCALSOURCES:.cpp=.o.$(ARCH))
  31. LOCALOBJECTS := $(LOCALOBJECTS:.cc=.o.$(ARCH))
  32. LOCALDEPENDS = $(LOCALOBJECTS:.o.$(ARCH)=.d.$(ARCH))
  33. SOURCES = $(wildcard *.cpp */*.cpp */*/*.cpp */*/*/*.cpp)
  34. OBJECTS = $(SOURCES:.cpp=.o.$(ARCH))
  35. DEPENDS = $(OBJECTS:.o.$(ARCH)=.d.$(ARCH))
  36. TARGETS =
  37. define target
  38. $(eval $@_DATETIME := $(DATETIME))
  39. @echo -n " [LD] $(1)\n"
  40. @$(PREFIX) $(CC) -o $(1) $(2) $(LFLAGS) $(CFLAGS) $(POSTFIX)
  41. @$(OBJCOPY) --only-keep-debug $(1) $(DEBUGDIR)/$(1)-$($@_DATETIME).debug
  42. @$(STRIP) $(SFLAGS) $(1)
  43. @$(OBJCOPY) --add-gnu-debuglink="$(DEBUGDIR)/$(1)-$($@_DATETIME).debug" $(1)
  44. @chmod -x $(DEBUGDIR)/$(1)-$($@_DATETIME).debug
  45. endef
  46. $(LOCALOBJECTS): | $(SUBDIRS)
  47. $(OBJECTS): | $(SUBDIRS)
  48. artifacts: $(LOCALOBJECTS)
  49. .DEFAULT_GOAL := artifacts
  50. -include Makefile.target
  51. ifneq ($(MAKECMDGOALS),clean)
  52. -include $(LOCALDEPENDS)
  53. endif
  54. %.d.$(ARCH): %.cpp
  55. @depth=$(MAKELEVEL); \
  56. while [ $${depth} -gt 0 ] ; do \
  57. echo -n " "; \
  58. depth=`expr $$depth - 1`; \
  59. done; \
  60. true
  61. @echo -n " [MM] $@\n"
  62. @$(PREFIX) $(CC) $(CFLAGS) $< -MM -MT $(@:.d.$(ARCH)=.o.$(ARCH)) >$@ $(POSTFIX)
  63. %.o.$(ARCH): %.cpp
  64. @depth=$(MAKELEVEL); \
  65. while [ $${depth} -gt 0 ] ; do \
  66. echo -n " "; \
  67. depth=`expr $$depth - 1`; \
  68. done; \
  69. true
  70. @echo -n " [CC] $@\n"
  71. @$(PREFIX) $(CC) -c $(CFLAGS) $< -o $@ $(POSTFIX)
  72. %.d.$(ARCH): %.cc
  73. @depth=$(MAKELEVEL); \
  74. while [ $${depth} -gt 0 ] ; do \
  75. echo -n " "; \
  76. depth=`expr $$depth - 1`; \
  77. done; \
  78. true
  79. @echo -n " [MM] $@\n"
  80. @$(PREFIX) $(CC) $(CFLAGS) $< -MM -MT $(@:.d.$(ARCH)=.o.$(ARCH)) >$@ $(POSTFIX)
  81. %.o.$(ARCH): %.cc
  82. @depth=$(MAKELEVEL); \
  83. while [ $${depth} -gt 0 ] ; do \
  84. echo -n " "; \
  85. depth=`expr $$depth - 1`; \
  86. done; \
  87. true
  88. @echo -n " [CC] $@\n"
  89. @$(PREFIX) $(CC) -c $(CFLAGS) $< -o $@ $(POSTFIX)
  90. $(ARNAME): $(SUBDIRS) $(LOCALOBJECTS)
  91. @depth=$(MAKELEVEL); \
  92. while [ $${depth} -gt 0 ] ; do \
  93. echo -n " "; \
  94. depth=`expr $$depth - 1`; \
  95. done; \
  96. true
  97. @echo -n " [AR] $@\n"
  98. @$(PREFIX) $(AR) rcuT $@ $(LOCALOBJECTS) $(SUBDIRARS) $(POSTFIX)
  99. .PHONY: $(SUBDIRS)
  100. $(SUBDIRS):
  101. @depth=$(MAKELEVEL); \
  102. while [ $${depth} -gt 0 ] ; do \
  103. echo -n " "; \
  104. depth=`expr $$depth - 1`; \
  105. done; \
  106. true
  107. @echo " <$@>"
  108. @$(MAKE) -s -S -C $@ artifacts $(ARCH)
  109. @depth=$(MAKELEVEL); \
  110. while [ $${depth} -gt 0 ] ; do \
  111. echo -n " "; \
  112. depth=`expr $$depth - 1`; \
  113. done; \
  114. true
  115. @echo " </$@>"
  116. .PHONY: all
  117. all: $(TARGETS)
  118. .PHONY: clean
  119. clean:
  120. @for dir in $(SUBDIRS); do \
  121. depth=$(MAKELEVEL); \
  122. while [ $${depth} -gt 0 ] ; do \
  123. echo -n " "; \
  124. depth=`expr $$depth - 1`; \
  125. done; \
  126. echo " <$$dir>"; \
  127. $(MAKE) -s -S -C $$dir $@ $(ARCH); \
  128. while [ $${depth} -gt 0 ] ; do \
  129. echo -n " "; \
  130. depth=`expr $$depth - 1`; \
  131. done; \
  132. echo " </$$dir>"; \
  133. done; \
  134. true
  135. @rm -f $(LOCALOBJECTS) $(LOCALDEPENDS) $(ARNAME) $(TARGETS) || true
  136. .PHONY: cleandeps
  137. cleandeps:
  138. @for dir in $(SUBDIRS); do \
  139. depth=$(MAKELEVEL); \
  140. while [ $${depth} -gt 0 ] ; do \
  141. echo -n " "; \
  142. depth=`expr $$depth - 1`; \
  143. done; \
  144. echo " <$$dir>"; \
  145. $(MAKE) -s -S -C $$dir $@ $(ARCH); \
  146. while [ $${depth} -gt 0 ] ; do \
  147. echo -n " "; \
  148. depth=`expr $$depth - 1`; \
  149. done; \
  150. echo " </$$dir>"; \
  151. done; \
  152. true
  153. @rm -f $(LOCALDEPENDS) $(TARGETS) || true
  154. .PHONY: cleanall
  155. cleanall:
  156. @for dir in $(SUBDIRS); do \
  157. depth=$(MAKELEVEL); \
  158. while [ $${depth} -gt 0 ] ; do \
  159. echo -n " "; \
  160. depth=`expr $$depth - 1`; \
  161. done; \
  162. echo " <$$dir>"; \
  163. $(MAKE) -s -S -C $$dir $@ $(ARCH); \
  164. while [ $${depth} -gt 0 ] ; do \
  165. echo -n " "; \
  166. depth=`expr $$depth - 1`; \
  167. done; \
  168. echo " </$$dir>"; \
  169. done; \
  170. true
  171. @rm -f *.d.* *.o.*
  172. @rm -f $(ARNAME) $(TARGETS) || true
  173. .PHONY: $(ARCH)
  174. $(ARCH):
  175. @if [ "$(words $(MAKECMDGOALS))" = "1" ]; then \
  176. $(MAKE) -s -S $(.DEFAULT_GOAL) $(ARCH); \
  177. fi