Makefile 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. #
  2. # Makefile
  3. #
  4. include Makefile.conf
  5. PID := $(shell echo $$$$)
  6. PREFIX = nice -n 19 /usr/bin/time --format='%E (%U)' -o /dev/shm/t-$(PID)
  7. POSTFIX = && cat /dev/shm/t-$(PID) | xargs -I "%" echo -en '\033[100D\033[60C$1' "%\n" && rm -f /dev/shm/t-$(PID)
  8. ARNAME = $(notdir $(CURDIR)).$(ARCH).a
  9. SUBDIRS := $(wildcard */.)
  10. SUBDIRS := $(foreach dir,$(SUBDIRS),$(subst /.,,$(dir)))
  11. FILTER = doc%
  12. SUBDIRS := $(filter-out $(FILTER),$(SUBDIRS))
  13. SUBDIRARS = $(foreach dir,$(SUBDIRS),$(dir)/$(dir).a)
  14. LOCALSOURCES = $(wildcard *.cpp *.cc)
  15. LOCALOBJECTS := $(LOCALSOURCES:.cpp=.$(ARCH).o)
  16. LOCALOBJECTS := $(LOCALOBJECTS:.cc=.$(ARCH).o)
  17. LOCALDEPENDS = $(LOCALOBJECTS:.o=.d)
  18. SOURCES = $(wildcard *.cpp */*.cpp */*/*.cpp */*/*/*.cpp)
  19. OBJECTS = $(SOURCES:.cpp=.$(ARCH).o)
  20. DEPENDS = $(OBJECTS:.o=.d)
  21. TARGETS =
  22. $(LOCALOBJECTS): | $(SUBDIRS)
  23. $(OBJECTS): | $(SUBDIRS)
  24. artifacts: $(LOCALOBJECTS)
  25. .DEFAULT_GOAL := artifacts
  26. -include Makefile.target
  27. ifneq ($(MAKECMDGOALS),clean)
  28. -include $(LOCALDEPENDS)
  29. endif
  30. %.$(ARCH).d: %.cpp
  31. @depth=$(MAKELEVEL); \
  32. while [ $${depth} -gt 0 ] ; do \
  33. echo -n " "; \
  34. depth=`expr $$depth - 1`; \
  35. done; \
  36. true
  37. @echo -n " [MM] $@"
  38. @$(PREFIX) $(CC) $(CFLAGS) $< -MM -MT $(@:.d=.o) >$@ $(POSTFIX)
  39. %.$(ARCH).o: %.cpp
  40. @depth=$(MAKELEVEL); \
  41. while [ $${depth} -gt 0 ] ; do \
  42. echo -n " "; \
  43. depth=`expr $$depth - 1`; \
  44. done; \
  45. true
  46. @echo -n " [CC] $@"
  47. @$(PREFIX) $(CC) -c $(CFLAGS) $< -o $@ $(POSTFIX)
  48. %.$(ARCH).d: %.cc
  49. @depth=$(MAKELEVEL); \
  50. while [ $${depth} -gt 0 ] ; do \
  51. echo -n " "; \
  52. depth=`expr $$depth - 1`; \
  53. done; \
  54. true
  55. @echo -n " [MM] $@"
  56. @$(PREFIX) $(CC) $(CFLAGS) $< -MM -MT $(@:.d=.o) >$@ $(POSTFIX)
  57. %.$(ARCH).o: %.cc
  58. @depth=$(MAKELEVEL); \
  59. while [ $${depth} -gt 0 ] ; do \
  60. echo -n " "; \
  61. depth=`expr $$depth - 1`; \
  62. done; \
  63. true
  64. @echo -n " [CC] $@"
  65. @$(PREFIX) $(CC) -c $(CFLAGS) $< -o $@ $(POSTFIX)
  66. $(ARNAME): $(SUBDIRS) $(LOCALOBJECTS)
  67. @depth=$(MAKELEVEL); \
  68. while [ $${depth} -gt 0 ] ; do \
  69. echo -n " "; \
  70. depth=`expr $$depth - 1`; \
  71. done; \
  72. true
  73. @echo -n " [AR] $@"
  74. @$(PREFIX) $(AR) rcuT $@ $(LOCALOBJECTS) $(SUBDIRARS) $(POSTFIX)
  75. .PHONY: $(SUBDIRS)
  76. $(SUBDIRS):
  77. @depth=$(MAKELEVEL); \
  78. while [ $${depth} -gt 0 ] ; do \
  79. echo -n " "; \
  80. depth=`expr $$depth - 1`; \
  81. done; \
  82. true
  83. @echo " <$@>"
  84. @$(MAKE) -s -S -C $@ artifacts
  85. @depth=$(MAKELEVEL); \
  86. while [ $${depth} -gt 0 ] ; do \
  87. echo -n " "; \
  88. depth=`expr $$depth - 1`; \
  89. done; \
  90. true
  91. @echo " </$@>"
  92. .PHONY: all
  93. all: $(TARGETS)
  94. .PHONY: clean
  95. clean:
  96. @for dir in $(SUBDIRS); do \
  97. depth=$(MAKELEVEL); \
  98. while [ $${depth} -gt 0 ] ; do \
  99. echo -n " "; \
  100. depth=`expr $$depth - 1`; \
  101. done; \
  102. echo " <$$dir>"; \
  103. $(MAKE) -s -S -C $$dir $@; \
  104. while [ $${depth} -gt 0 ] ; do \
  105. echo -n " "; \
  106. depth=`expr $$depth - 1`; \
  107. done; \
  108. echo " </$$dir>"; \
  109. done; \
  110. true
  111. @rm -f $(LOCALOBJECTS) $(LOCALDEPENDS) $(ARNAME) $(TARGETS) || true