makefile 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. # building depends on debian packages: "g++" "llvm-dev" "bison" "flex" (and "make", duh)
  2. # running depends on "llvm" if not statically linked
  3. CXX := clang++
  4. LLVMCONFIG := llvm-config-5.0
  5. INCLUDEDIRS := -I$(shell $(LLVMCONFIG) --includedir):. -I.. -Isem/
  6. CXXFLAGS := -std=c++17 $(INCLUDEDIRS) -w # -Wall -Wextra
  7. ifdef STATIC
  8. LDFLAGS := $(shell $(LLVMCONFIG) --link-static --ldflags --system-libs --libs all) -static -dead-strip -s
  9. else
  10. LDFLAGS := $(shell $(LLVMCONFIG) --ldflags --system-libs --libs all)
  11. endif
  12. YACC := bison
  13. YACCFLAGS := -d
  14. LEX := flex
  15. LEXFLAGS := "-8"
  16. #OBJECTS := $(patsubst %.cpp, %.o, $(wildcard *.cpp */*.cpp))
  17. OBJECTS := $(patsubst %.cpp, %.o, $(wildcard *.cpp)) \
  18. parser.o lexer.o
  19. LIBRARIES :=
  20. EXECUTABLE := qlow
  21. .PHONY: all
  22. all: $(EXECUTABLE)
  23. release: CXXFLAGS += -O3 -flto
  24. release: LDFLAGS += -O3 -flto
  25. release: all
  26. debug: CXXFLAGS += -DDEBUGGING -g
  27. debug: all
  28. $(EXECUTABLE): $(OBJECTS)
  29. $(CXX) $^ $(LDFLAGS) -o $@
  30. parser.o: parser.cpp
  31. $(CXX) -c -o $@ $< $(CXXFLAGS) -fno-strict-aliasing
  32. %.o: %.cpp
  33. $(CXX) -c -o $@ $< $(CXXFLAGS)
  34. %.cpp: %.y
  35. $(YACC) -o $@ $< $(YACCFLAGS)
  36. %.cpp: %.l parser.cpp
  37. $(LEX) $(LEXFLAGS) -o $@ $<
  38. .PHONY: clean
  39. clean:
  40. rm -f $(EXECUTABLE) $(OBJECTS) parser.cpp parser.hpp lexer.cpp