.POSIX: .SUFFIXES: .o .c LIBRARY = libqbe.a HEADER = libqbe.h PREFIX = /usr/local LIBDIR = $(PREFIX)/lib INCDIR = $(PREFIX)/include COMMOBJ = libqbe.o util.o parse.o abi.o cfg.o mem.o ssa.o alias.o load.o \ copy.o fold.o simpl.o live.o spill.o rega.o emit.o AMD64OBJ = amd64/targ.o amd64/sysv.o amd64/isel.o amd64/emit.o ARM64OBJ = arm64/targ.o arm64/abi.o arm64/isel.o arm64/emit.o RV64OBJ = rv64/targ.o rv64/abi.o rv64/isel.o rv64/emit.o OBJ = $(COMMOBJ) $(AMD64OBJ) $(ARM64OBJ) $(RV64OBJ) SRCALL = $(OBJ:.o=.c) CC = cc AR = ar CFLAGS = -std=gnu99 -g -Wall -Wextra -Wpedantic libqbe.a: $(OBJ) $(AR) rcs $@ $(OBJ) .c.o: $(CC) $(CFLAGS) -c $< -o $@ $(OBJ): qbe/all.h qbe/ops.h $(AMD64OBJ): amd64/all.h $(ARM64OBJ): arm64/all.h $(RV64OBJ): rv64/all.h libqbe.o: qbe/config.h qbe/config.h: @case `uname` in \ *Darwin*) \ case `uname -m` in \ *arm64*) \ echo "#define Deftgt T_arm64_apple";\ ;; \ *) \ echo "#define Deftgt T_amd64_apple";\ ;; \ esac \ ;; \ *) \ case `uname -m` in \ *aarch64*|*arm64*) \ echo "#define Deftgt T_arm64"; \ ;; \ *riscv64*) \ echo "#define Deftgt T_rv64"; \ ;; \ *) \ echo "#define Deftgt T_amd64_sysv";\ ;; \ esac \ ;; \ esac > $@ install: $(LIBRARY) $(HEADER) mkdir -p "$(DESTDIR)$(LIBDIR)" cp "$(LIBRARY)" "$(DESTDIR)$(LIBDIR)/" cp -r "$(HEADER)" "qbe/" "$(DESTDIR)$(INCDIR)/" uninstall: rm -f "$(DESTDIR)$(LIBDIR)/$(LIBRARY)" "$(DESTDIR)$(INCDIR)/$(HEADER)" "$(DESTDIR)$(INCDIR)/qbe" clean: rm -r *.o */*.o clean-gen: clean rm -f qbe/config.h src: @echo $(SRCALL) 80: @for F in $(SRCALL); \ do \ awk "{ \ gsub(/\\t/, \" \"); \ if (length(\$$0) > $@) \ printf(\"$$F:%d: %s\\n\", NR, \$$0); \ }" < $$F; \ done wc: @wc -l $(SRCALL) .PHONY: clean clean-gen check check-arm64 check-rv64 src 80 wc install uninstall