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

commit 9b4bb8d2243b3af477a13fc61e9b7c0406a6bc33
parent 790aedb8fef1164bcfe262b566fc58dd665edf9c
Author: Roberto E. Vargas Caballero <roberto.vargas@midokura.com>
Date:   Wed, 29 Jun 2022 09:50:53 +0200

Makefile: Avoid double macro expansion in targets

POSIX specification stays:

        string1 = [string2]
        Macro expansions in string1 of macro definition lines shall
        be evaluated when read. Macro expansions in string2 of macro
        definition lines shall be performed when the macro identified
        by string1 is expanded in a rule or command.

It means that recursive macro expansion is not guaranteed to work in
a portable Make. Also, as make is a declarative language makes more
sense to declare your targets as a primary concern instead of
derivating them from a informational macro like SRC that is only
used in a rule command.

MMakefile | 19++++++++-----------
1 file changed, 8 insertions(+), 11 deletions(-)

diff --git a/Makefile b/Makefile @@ -4,17 +4,14 @@ 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 -AMD64SRC = amd64/targ.c amd64/sysv.c amd64/isel.c amd64/emit.c -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=.o) -ARM64OBJ = $(ARM64SRC:.c=.o) -RV64OBJ = $(RV64SRC:.c=.o) -OBJ = $(SRC:.c=.o) $(AMD64OBJ) $(ARM64OBJ) $(RV64OBJ) +COMMOBJ = main.o util.o parse.o cfg.o mem.o ssa.o alias.o load.o copy.o \ + fold.o live.o spill.o rega.o gas.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) CFLAGS = $(CPPFLAGS) -Wall -Wextra -std=c99 -g -Wpedantic