aboutsummaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
authorCharles Cabergs <me@cacharle.xyz>2021-11-17 17:56:09 +0100
committerCharles Cabergs <me@cacharle.xyz>2021-11-17 18:02:27 +0100
commit390f6c5360fdc8f49c1ecbd1747a0fb5f5282225 (patch)
treed93bd4b8acfa0ce95467cbd2462b2f8a6a389894 /Makefile
parent285b331ac60d075bba4f721fe412a52576f50539 (diff)
downloadbfc-390f6c5360fdc8f49c1ecbd1747a0fb5f5282225.tar.gz
bfc-390f6c5360fdc8f49c1ecbd1747a0fb5f5282225.tar.bz2
bfc-390f6c5360fdc8f49c1ecbd1747a0fb5f5282225.zip
Added Makefile
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile53
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)