Makefile 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. .POSIX:
  2. .SUFFIXES: .o .c
  3. PREFIX = /usr/local
  4. BINDIR = $(PREFIX)/bin
  5. COMMOBJ = main.o util.o parse.o abi.o cfg.o mem.o ssa.o alias.o load.o \
  6. copy.o fold.o gvn.o gcm.o simpl.o ifopt.o live.o spill.o rega.o \
  7. emit.o
  8. AMD64OBJ = amd64/targ.o amd64/sysv.o amd64/isel.o amd64/emit.o
  9. ARM64OBJ = arm64/targ.o arm64/abi.o arm64/isel.o arm64/emit.o
  10. RV64OBJ = rv64/targ.o rv64/abi.o rv64/isel.o rv64/emit.o
  11. OBJ = $(COMMOBJ) $(AMD64OBJ) $(ARM64OBJ) $(RV64OBJ)
  12. SRCALL = $(OBJ:.o=.c)
  13. CC = cc
  14. CFLAGS = -std=c99 -g -Wall -Wextra -Wpedantic
  15. qbe: $(OBJ)
  16. $(CC) $(LDFLAGS) $(OBJ) -o $@
  17. .c.o:
  18. $(CC) $(CFLAGS) -c $< -o $@
  19. $(OBJ): all.h ops.h
  20. $(AMD64OBJ): amd64/all.h
  21. $(ARM64OBJ): arm64/all.h
  22. $(RV64OBJ): rv64/all.h
  23. main.o: config.h
  24. config.h:
  25. @case `uname` in \
  26. *Darwin*) \
  27. case `uname -m` in \
  28. *arm64*) \
  29. echo "#define Deftgt T_arm64_apple";\
  30. ;; \
  31. *) \
  32. echo "#define Deftgt T_amd64_apple";\
  33. ;; \
  34. esac \
  35. ;; \
  36. *) \
  37. case `uname -m` in \
  38. *aarch64*|*arm64*) \
  39. echo "#define Deftgt T_arm64"; \
  40. ;; \
  41. *riscv64*) \
  42. echo "#define Deftgt T_rv64"; \
  43. ;; \
  44. *) \
  45. echo "#define Deftgt T_amd64_sysv";\
  46. ;; \
  47. esac \
  48. ;; \
  49. esac > $@
  50. install: qbe
  51. mkdir -p "$(DESTDIR)$(BINDIR)"
  52. install -m755 qbe "$(DESTDIR)$(BINDIR)/qbe"
  53. uninstall:
  54. rm -f "$(DESTDIR)$(BINDIR)/qbe"
  55. clean:
  56. rm -f *.o */*.o qbe
  57. clean-gen: clean
  58. rm -f config.h
  59. check: qbe
  60. tools/test.sh all
  61. check-x86_64: qbe
  62. TARGET=x86_64 tools/test.sh all
  63. check-arm64: qbe
  64. TARGET=arm64 tools/test.sh all
  65. check-rv64: qbe
  66. TARGET=rv64 tools/test.sh all
  67. src:
  68. @echo $(SRCALL)
  69. 80:
  70. @for F in $(SRCALL); \
  71. do \
  72. awk "{ \
  73. gsub(/\\t/, \" \"); \
  74. if (length(\$$0) > $@) \
  75. printf(\"$$F:%d: %s\\n\", NR, \$$0); \
  76. }" < $$F; \
  77. done
  78. wc:
  79. @wc -l $(SRCALL)
  80. .PHONY: clean clean-gen check check-arm64 check-rv64 src 80 wc install uninstall