unit_tests 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. CPPSTD ?= --std=c++1z
  2. CPPFLAGS += $(CPPSTD)
  3. PARENT_DISTDIR ?= ../out
  4. override CPPFLAGS += -MMD -MP
  5. override CPPFLAGS += -I../source -I../include
  6. override CPPFLAGS += $(shell cat ../.cxxflags 2> /dev/null | xargs )
  7. override CPPFLAGS += $(shell cat .cxxflags 2> /dev/null | xargs )
  8. override LDFLAGS += $(shell cat ../.ldflags 2> /dev/null | xargs )
  9. override LDFLAGS += $(shell cat .ldflags 2> /dev/null | xargs )
  10. override LDLIBS += $(shell cat ../.ldlibs 2> /dev/null | xargs )
  11. override LDLIBS += $(shell cat .ldlibs 2> /dev/null | xargs )
  12. TEMPDIR := temp
  13. ifneq ($(LOCAL_TEMP),)
  14. TEMPDIR := $(TEMPDIR)/$(LOCAL_TEMP)
  15. endif
  16. DISTDIR := .
  17. LIB := lib
  18. PARENTLIB := ../lib
  19. ifneq ($(LOCAL_DIST),)
  20. DISTDIR := $(DISTDIR)/$(LOCAL_DIST)
  21. LIB := $(LIB)/$(LOCAL_DIST)
  22. PARENTLIB := $(PARENTLIB)/$(LOCAL_DIST)
  23. endif
  24. override LOCALIB += $(wildcard $(LIB)/*.a)
  25. override LOCALIB += $(wildcard $(PARENTLIB)/*.a)
  26. override LOCALIB += $(wildcard $(PARENT_DISTDIR)/*.a)
  27. override LDFLAGS += -L$(PARENT_DISTDIR) -L$(LIB) -L$(PARENTLIB)
  28. SOURCES := $(shell echo *.cpp)
  29. TARGETS := $(SOURCES:%.cpp=$(DISTDIR)/%.test)
  30. OBJECTS := $(SOURCES:%.cpp=$(TEMPDIR)/%.o)
  31. DEPENDS := $(OBJECTS:.o=.d)
  32. RUNS := $(OBJECTS:.o=.run)
  33. run: $(RUNS)
  34. build: $(TARGETS)
  35. $(TEMPDIR)/%.run: $(DISTDIR)/%.test
  36. ./$<
  37. @echo "This is a dummy file for make to keep track of test runs" > $@
  38. $(DISTDIR)/%.test: $(TEMPDIR)/%.o $(LOCALIB)
  39. $(CXX) $(LDFLAGS) $< $(LOCALIB) $(LDLIBS) -o $@
  40. $(TEMPDIR)/%.o: %.cpp | $(TEMPDIR)
  41. $(CXX) $(CPPFLAGS) $(CXXFLAGS) -o $@ -c $<
  42. $(TEMPDIR):
  43. @mkdir $@
  44. cleanrun:
  45. @rm $(RUNS) 2> /dev/null || true
  46. clean: cleanrun
  47. @rm $(DEPENDS) 2> /dev/null || true
  48. @rm $(OBJECTS) 2> /dev/null || true
  49. @rmdir -p $(TEMPDIR) 2> /dev/null || true
  50. @rm $(TARGETS) 2> /dev/null || true
  51. @echo All clean!
  52. -include $(DEPENDS)
  53. .PRECIOUS : $(OBJECTS) $(TARGETS)
  54. .PHONY : clean cleanrun