diff options
| author | Charles Cabergs <me@cacharle.xyz> | 2021-11-17 17:56:09 +0100 |
|---|---|---|
| committer | Charles Cabergs <me@cacharle.xyz> | 2021-11-17 18:02:27 +0100 |
| commit | 390f6c5360fdc8f49c1ecbd1747a0fb5f5282225 (patch) | |
| tree | d93bd4b8acfa0ce95467cbd2462b2f8a6a389894 /Makefile | |
| parent | 285b331ac60d075bba4f721fe412a52576f50539 (diff) | |
| download | bfc-390f6c5360fdc8f49c1ecbd1747a0fb5f5282225.tar.gz bfc-390f6c5360fdc8f49c1ecbd1747a0fb5f5282225.tar.bz2 bfc-390f6c5360fdc8f49c1ecbd1747a0fb5f5282225.zip | |
Added Makefile
Diffstat (limited to 'Makefile')
| -rw-r--r-- | Makefile | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..b405f94 --- /dev/null +++ b/Makefile @@ -0,0 +1,53 @@ +CC = gcc +CCFLAGS = -Wall -Wextra +NASM = nasm + +ifeq ($(shell uname),Linux) + NASMFLAGS = -f elf64 +endif +ifeq ($(shell uname),Darwin) + NASMFLAGS = -f macho64 +endif +ifeq ($(NASMFLAGS),) + $(error architecture: $(shell uname) not recognized) +endif + +SRC = bfc.c +NAME = bfc + +ASMDIR = asm +BINDIR = bin + +EXAMPLESDIR = examples +EXAMPLES = $(shell find $(EXAMPLESDIR) -name '*.bf' -type f) +EXAMPLES_ASM = $(EXAMPLES:$(EXAMPLESDIR)/%.bf=$(ASMDIR)/%.asm) +EXAMPLES_NAME = $(EXAMPLES:$(EXAMPLESDIR)/%.bf=$(BINDIR)/%) + +all: $(NAME) $(EXAMPLES_NAME) + +$(NAME): bfc.c + $(CC) $(CCFLAGS) -o $@ $< + +$(BINDIR)/%: $(ASMDIR)/%.asm $(BINDIR) + $(NASM) $(NASMFLAGS) -o $@.o $< + ld -o $@ $@.o + +$(ASMDIR)/%.asm: $(EXAMPLESDIR)/%.bf $(ASMDIR) + ./$(NAME) < $< > $@ + +$(BINDIR): + mkdir -pv $@ + +$(ASMDIR): + mkdir -pv $@ + +clean: + - rm -rv $(ASMDIR) + - rm -rv $(BINDIR) + - rm $(NAME) + +re: clean all + +# weird GNU make behavior where it rm's every asm files at the end +# (https://stackoverflow.com/questions/47447369) +.PRECIOUS: $(EXAMPLES_ASM) |
