Makefile 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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
  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) $(TEST_OUT) $(TEST_OBJS) $(TEST_DEPS)
  35. # Documentation
  36. docs:
  37. mkdocs build --clean
  38. doxygen
  39. push-gh-pages:
  40. git subtree push --prefix docs/output origin gh-pages
  41. # Tests
  42. test: $(TEST_OUT)
  43. ./$(TEST_OUT)
  44. -include $(TEST_DEPS)
  45. $(TEST_OUT): $(TEST_OBJS)
  46. $(CXX) $(USELDFLAGS) -o$@ $(TEST_OBJS) $(USELDLIBS)
  47. $(TEST_DIR)/%.o: $(TEST_DIR)/%.cpp Makefile
  48. $(CXX) -c $(USECXXFLAGS) -MMD -MF$(@:%.o=%.d) -MT$@ -o$@ $<
  49. # Examples
  50. examples: $(EXAMPLE_OBJS)
  51. @for ex in $(EXAMPLE_OBJS); do echo "> Example '$$ex'"; ./$$ex || exit 1; done
  52. -include $(EXAMPLE_DEPS)
  53. $(EXAMPLE_DIR)/%.out: $(EXAMPLE_DIR)/%.cpp Makefile
  54. $(CXX) $(USECXXFLAGS) $(USELDFLAGS) -MMD -MF$(<:%.cpp=%.d) -MT$@ -o$@ $< $(USELDLIBS)
  55. # Playground
  56. playground: $(PLAYGROUND_OBJ)
  57. ./$(PLAYGROUND_OBJ)
  58. # Phony
  59. .PHONY: all clean docs test examples playground