blob: 07a867dde8c83a4d8af6c84fc1563695ef825cc9 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
CC = gcc
CCFLAGS = -Wall -Wextra -std=c99
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)
|