From 0cba74f29f040c819769a072f9258f0eba800af5 Mon Sep 17 00:00:00 2001 From: Andrew Clark Date: Fri, 10 Dec 2021 22:02:57 +0300 Subject: revamped Makefile. It should be more posix accurate, but I am not sure about ifeq/else/endif conditionals. They are probably GNU specific --- source/Makefile | 99 ++++++++++++++++++++++++++++----------------------------- 1 file changed, 48 insertions(+), 51 deletions(-) diff --git a/source/Makefile b/source/Makefile index 7fa99f2..a96ca59 100644 --- a/source/Makefile +++ b/source/Makefile @@ -1,74 +1,71 @@ -RM = rm -f -CC = gcc -COMMIT_INFO = commit.h +.POSIX: +.SUFFIXES: -CFLAGS = -O2 -Wall -Wno-restrict -Wno-unknown-warning-option -ifeq ($(OS),Windows_NT) - LDFLAGS += -largp -else - UNAME_S := $(shell uname -s) - ifeq ($(UNAME_S),Darwin) - LDFLAGS += -largp - endif -endif +CC ?= cc +RM ?= rm -f +INSTALL ?= install -p +COMMIT := +COMMIT_INFO = commit.h -OBJS = main.o input.o assemble.o expr.o code.o command.o\ - macro.o func.o proc.o symbol.o output.o crc.o\ - nes.o +EXTRA_CFLAGS ?= -O2 -Wall -Wno-restrict -Wno-unknown-warning-option +CFLAGS += ${EXTRA_CFLAGS} -I. +LDADD ?= -Wl,--as-needed -EXEDIR = .. +EXEDIR ?= .. +PREFIX ?= /usr +BINDIR ?= $(PREFIX)/bin + +PROGRAM ?= nesasm -COMMIT = $(shell git rev-parse --short HEAD) -COMMIT_DIRTY = $(shell git diff-index HEAD) -ifneq ($(COMMIT_DIRTY),) - COMMIT += (dirty) -endif ifeq ($(COMMIT),) - COMMIT = "unknown" + COMMIT = $(shell git rev-parse --short HEAD) +else + COMMIT += $(shell git diff-index HEAD) (dirty) endif ifeq ($(OS),Windows_NT) - TARGNES = $(EXEDIR)/nesasm.exe + LDFLAGS += -largp + $(PROGRAM) = $(EXEDIR)/$(PROGRAM).exe else - TARGNES = $(EXEDIR)/nesasm + UNAME_S := $(shell uname -s) + ifeq ($(UNAME_S),Darwin) + LDFLAGS += -largp + endif endif -# -# +# Object files + +OBJS = main.o input.o assemble.o expr.o code.o command.o\ + macro.o func.o proc.o symbol.o output.o crc.o\ + nes.o + +# All *.c file compiled to *.o +.SUFFIXES: .c .o +.c.o: + $(CC) $(CFLAGS) -o $@ -c $< -all: $(TARGNES) -default: $(TARGNES) +# default target +all: commit_file $(PROGRAM) -# CLEAN -# +commit_file: + @printf "#define COMMIT \"$(COMMIT)\"\\n" > $(COMMIT_INFO) clean: - $(RM) *.o + ifeq ($(OS),Windows_NT) - @if [ -f "$(TARGNES)" ]; then for f in `cygcheck "$(TARGNES)" | grep .dll | grep msys` ; do rm -f $(EXEDIR)/`basename "$$f"` ; done fi + @if [ -f "$(PROGRAM)" ]; then for f in `cygcheck "$(PROGRAM)" | grep .dll | grep msys` ; do rm -f $(EXEDIR)/`basename "$$f"` ; done fi endif - $(RM) $(TARGNES) - $(RM) $(COMMIT_INFO) -# ASSEMBLER -# + $(RM) $(OBJS) $(PROGRAM) $(COMMIT_INFO) -$(OBJS) : defs.h externs.h protos.h -main.o : inst.h vars.h $(COMMIT_INFO) -expr.o : expr.h -nes.o : nes.h -%.o : %.c - $(CC) $(CFLAGS) -o $@ -c $< - -.PHONY: $(COMMIT_INFO) -$(COMMIT_INFO): - @printf "#define COMMIT \"$(COMMIT)\"\\n" > $(COMMIT_INFO) +# Link objects into executable file -# EXE -# +$(PROGRAM): $(OBJS) + $(CC) -o $(PROGRAM) $(OBJS) $(LDFLAGS) $(LDADD) -$(TARGNES): $(OBJS) - $(CC) -o $(TARGNES) $(OBJS) $(LDFLAGS) ifeq ($(OS),Windows_NT) - @for f in `cygcheck "$(TARGNES)" | grep .dll | grep msys` ; do cp -vf `cygpath "$$f"` $(EXEDIR)/ ; done + @for f in `cygcheck "$(PROGRAM)" | grep .dll | grep msys` ; do cp -vf `cygpath "$$f"` $(EXEDIR)/ ; done endif + +.PHONY: all commit_file clean + -- cgit v1.2.3