Makefile 2.1 KB

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