qbe

Internal scc patchset buffer for QBE
Log | Files | Refs | README | LICENSE

commit 6cd5f7028647a88935ec1f7776a08b51eb0fb1c8
parent 740bf867b3ad5fdb1e8c5c688bfd6a4cd825ba76
Author: illiliti <illiliti@dimension.sh>
Date:   Wed,  1 Jun 2022 07:43:09 +0300

Makefile: POSIXify

Makefile now compatible with gmake, bmake, smake and pdpmake.

Diffstat:
M.gitignore | 3++-
MMakefile | 53++++++++++++++++++++++-------------------------------
MREADME | 10++++------
Mminic/mcc | 2+-
Mtools/abifuzz.sh | 2+-
Mtools/cra.sh | 2+-
Mtools/test.sh | 4++--
7 files changed, 33 insertions(+), 43 deletions(-)

diff --git a/.gitignore b/.gitignore @@ -1,4 +1,5 @@ -obj +*.o +qbe config.h .comfile *.out diff --git a/Makefile b/Makefile @@ -1,8 +1,8 @@ -BIN = qbe +.POSIX: +.SUFFIXES: .o .c -V = @ -OBJDIR = obj -PREFIX ?= /usr/local +PREFIX = /usr/local +BINDIR = $(PREFIX)/bin SRC = main.c util.c parse.c cfg.c mem.c ssa.c alias.c load.c copy.c \ fold.c live.c spill.c rega.c gas.c @@ -11,33 +11,24 @@ ARM64SRC = arm64/targ.c arm64/abi.c arm64/isel.c arm64/emit.c RV64SRC = rv64/targ.c rv64/abi.c rv64/isel.c rv64/emit.c SRCALL = $(SRC) $(AMD64SRC) $(ARM64SRC) $(RV64SRC) -AMD64OBJ = $(AMD64SRC:%.c=$(OBJDIR)/%.o) -ARM64OBJ = $(ARM64SRC:%.c=$(OBJDIR)/%.o) -RV64OBJ = $(RV64SRC:%.c=$(OBJDIR)/%.o) -OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(AMD64OBJ) $(ARM64OBJ) $(RV64OBJ) +AMD64OBJ = $(AMD64SRC:.c=.o) +ARM64OBJ = $(ARM64SRC:.c=.o) +RV64OBJ = $(RV64SRC:.c=.o) +OBJ = $(SRC:.c=.o) $(AMD64OBJ) $(ARM64OBJ) $(RV64OBJ) -CFLAGS += -Wall -Wextra -std=c99 -g -pedantic +CFLAGS = $(CPPFLAGS) -Wall -Wextra -std=c99 -g -Wpedantic -$(OBJDIR)/$(BIN): $(OBJ) $(OBJDIR)/timestamp - @test -z "$(V)" || echo "ld $@" - $(V)$(CC) $(LDFLAGS) $(OBJ) -o $@ +qbe: $(OBJ) + $(CC) $(LDFLAGS) $(OBJ) -o $@ -$(OBJDIR)/%.o: %.c $(OBJDIR)/timestamp - @test -z "$(V)" || echo "cc $<" - $(V)$(CC) $(CFLAGS) -c $< -o $@ - -$(OBJDIR)/timestamp: - @mkdir -p $(OBJDIR) - @mkdir -p $(OBJDIR)/amd64 - @mkdir -p $(OBJDIR)/arm64 - @mkdir -p $(OBJDIR)/rv64 - @touch $@ +.c.o: + $(CC) $(CFLAGS) -c $< -o $@ $(OBJ): all.h ops.h $(AMD64OBJ): amd64/all.h $(ARM64OBJ): arm64/all.h $(RV64OBJ): rv64/all.h -$(OBJDIR)/main.o: config.h +main.o: config.h config.h: @case `uname` in \ @@ -61,26 +52,26 @@ config.h: ;; \ esac > $@ -install: $(OBJDIR)/$(BIN) - mkdir -p "$(DESTDIR)/$(PREFIX)/bin/" - cp $< "$(DESTDIR)/$(PREFIX)/bin/" +install: qbe + mkdir -p "$(DESTDIR)/$(BINDIR)" + cp qbe "$(DESTDIR)/$(BINDIR)/qbe" uninstall: - rm -f "$(DESTDIR)/$(PREFIX)/bin/$(BIN)" + rm -f "$(DESTDIR)/$(BINDIR)/qbe" clean: - rm -fr $(OBJDIR) + rm -f *.o */*.o qbe clean-gen: clean rm -f config.h -check: $(OBJDIR)/$(BIN) +check: qbe tools/test.sh all -check-arm64: $(OBJDIR)/$(BIN) +check-arm64: qbe TARGET=arm64 tools/test.sh all -check-rv64: $(OBJDIR)/$(BIN) +check-rv64: qbe TARGET=rv64 tools/test.sh all src: diff --git a/README b/README @@ -12,9 +12,7 @@ The LICENSE file applies to all files distributed. - Compilation and Installation -Invoke GNU make in this directory to create the executable -file obj/qbe. On some systems (BSD) you might have to use -'gmake' instead of 'make'. Install using 'make install', -the standard DESTDIR and PREFIX environment variables are -supported. Alternatively, you may simply copy the obj/qbe -binary manually. +Invoke make in this directory to create the executable +file qbe. Install using 'make install', the standard +DESTDIR and PREFIX environment variables are supported. +Alternatively, you may simply copy the qbe binary manually. diff --git a/minic/mcc b/minic/mcc @@ -1,7 +1,7 @@ #!/bin/sh DIR=`cd $(dirname $0); pwd` -QBE=$DIR/../obj/qbe +QBE=$DIR/../qbe usage() { diff --git a/tools/abifuzz.sh b/tools/abifuzz.sh @@ -2,7 +2,7 @@ OCAMLC=${OCAMLC:-/usr/bin/ocamlc} DIR=`cd $(dirname "$0"); pwd` -QBE=$DIR/../obj/qbe +QBE=$DIR/../qbe failure() { echo "Failure at stage:" $1 >&2 diff --git a/tools/cra.sh b/tools/cra.sh @@ -1,7 +1,7 @@ #!/bin/sh DIR=`cd $(dirname "$0"); pwd` -QBE=$DIR/../obj/qbe +QBE=$DIR/../qbe BUGF=/tmp/bug.id FIND=$1 FIND=${FIND:-afl-find} diff --git a/tools/test.sh b/tools/test.sh @@ -1,8 +1,8 @@ #!/bin/sh dir=`cd $(dirname "$0"); pwd` -bin=$dir/../obj/qbe -binref=$dir/../obj/qbe.ref +bin=$dir/../qbe +binref=$dir/../qbe.ref tmp=/tmp/qbe.zzzz