Makefile 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. # Utilities
  2. RM = rm -rf
  3. CHDIR = cd
  4. EXEC = exec
  5. # Test artifacts
  6. TEST_DIR := tests
  7. TEST_OUT := $(TEST_DIR)/all
  8. TEST_SRCS := all.cpp auxiliary.cpp types.cpp stack.cpp functions.cpp usertypes.cpp \
  9. wrappers.cpp tables.cpp
  10. TEST_DEPS := $(TEST_SRCS:%.cpp=$(TEST_DIR)/%.d)
  11. TEST_OBJS := $(TEST_SRCS:%.cpp=$(TEST_DIR)/%.o)
  12. # Example artifacts
  13. EXAMPLE_DIR := examples
  14. EXAMPLE_SRCS := types.cpp stack.cpp functions.cpp usertypes.cpp state.cpp tables.cpp
  15. EXAMPLE_DEPS := $(EXAMPLE_SRCS:%.cpp=$(EXAMPLE_DIR)/%.d)
  16. EXAMPLE_OBJS := $(EXAMPLE_SRCS:%.cpp=$(EXAMPLE_DIR)/%.out)
  17. # Playground artifacts
  18. PLAYGROUND_SRC := playground.cpp
  19. PLAYGROUND_DEP := $(PLAYGROUND_SRC:%.cpp=$(EXAMPLE_DIR)/%.d)
  20. PLAYGROUND_OBJ := $(PLAYGROUND_SRC:%.cpp=$(EXAMPLE_DIR)/%.out)
  21. # Lua-specific
  22. LUA_INCDIR = /usr/include
  23. LUA_LIBDIR = /usr/lib
  24. LUA_LIBNAME = lua
  25. # Compiler
  26. CXX ?= clang++
  27. USECXXFLAGS += $(CXXFLAGS) -std=c++11 -O0 -g -DDEBUG -fmessage-length=0 -Wall -Wextra \
  28. -pedantic -D_GLIBCXX_USE_C99 -Ilib -I$(LUA_INCDIR) -Ideps/catch/include
  29. USELDFLAGS += $(LDFLAGS) -L$(LUA_LIBDIR)
  30. USELDLIBS += $(LDLIBS) -lm -l$(LUA_LIBNAME) -ldl
  31. # Default targets
  32. all: test examples
  33. clean:
  34. $(RM) $(EXAMPLE_OBJS) $(EXAMPLE_DEPS)
  35. $(RM) $(TEST_OUT) $(TEST_OBJS) $(TEST_DEPS)
  36. $(RM) $(PLAYGROUND_DEP) $(PLAYGROUND_OBJ)
  37. # Documentation
  38. docs:
  39. mkdocs build --clean
  40. doxygen
  41. push-gh-pages:
  42. git subtree push --prefix docs/output origin gh-pages
  43. # Tests
  44. test: $(TEST_OUT)
  45. ./$(TEST_OUT)
  46. -include $(TEST_DEPS)
  47. $(TEST_OUT): $(TEST_OBJS)
  48. $(CXX) $(USELDFLAGS) -o$@ $(TEST_OBJS) $(USELDLIBS)
  49. $(TEST_DIR)/%.o: $(TEST_DIR)/%.cpp Makefile
  50. $(CXX) -c $(USECXXFLAGS) -MMD -MF$(@:%.o=%.d) -MT$@ -o$@ $<
  51. # Examples
  52. examples: $(EXAMPLE_OBJS)
  53. @for ex in $(EXAMPLE_OBJS); do echo "> Example '$$ex'"; ./$$ex || exit 1; done
  54. -include $(EXAMPLE_DEPS)
  55. $(EXAMPLE_DIR)/%.out: $(EXAMPLE_DIR)/%.cpp Makefile
  56. $(CXX) $(USECXXFLAGS) $(USELDFLAGS) -MMD -MF$(<:%.cpp=%.d) -MT$@ -o$@ $< $(USELDLIBS)
  57. $(PLAYGROUND_OBJ): $(EXAMPLE_DIR)/$(PLAYGROUND_SRC) Makefile
  58. $(CXX) $(USECXXFLAGS) $(USELDFLAGS) -MMD -MF$(<:%.cpp=%.d) -MT$@ -o$@ $< $(USELDLIBS) -lprofiler
  59. # Playground
  60. playground-prof: $(PLAYGROUND_OBJ)
  61. CPUPROFILE=./cpuprofile.prof ./$(PLAYGROUND_OBJ)
  62. pprof --pdf ./$(PLAYGROUND_OBJ) ./cpuprofile.prof > cpuprofile.pdf
  63. xdg-open cpuprofile.pdf
  64. playground: $(PLAYGROUND_OBJ)
  65. ./$(PLAYGROUND_OBJ)
  66. # Phony
  67. .PHONY: all clean docs test examples playground playground-prof