aboutsummaryrefslogtreecommitdiff
path: root/Makefile
blob: d25d150b9a15532cfefc8fe66876ce8c8fc5548f (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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
PKGS=libtiff-4 libpng
DEFINES=
BUILD_DIR=build/
INC_DIR=include/

# Source files
SRC_DIR=src/
SRC_OBJ_DIR=$(BUILD_DIR)obj/$(SRC_DIR)
SRC_SRCS=$(shell find $(SRC_DIR) -iname \*.c)
SRC_OBJS_sub=$(subst $(SRC_DIR),$(SRC_OBJ_DIR),$(SRC_SRCS))
SRC_OBJS=$(SRC_OBJS_sub:.c=.o)
SRC_OBJ_DIRS_sub=$(shell find $(SRC_DIR) -type d)
SRC_OBJ_DIRS=$(subst $(SRC_DIR),$(SRC_OBJ_DIR),$(SRC_OBJ_DIRS_sub))

# Library files
LIB_DIR=lib/
LIB_OBJ_DIR=$(BUILD_DIR)obj/$(LIB_DIR)
LIB_SRCS=$(shell find $(LIB_DIR) -iname \*.c)
LIB_OBJS_sub=$(subst $(LIB_DIR),$(LIB_OBJ_DIR),$(LIB_SRCS))
LIB_OBJS=$(LIB_OBJS_sub:.c=.o)
LIB_OBJ_DIRS_sub=$(shell find $(LIB_DIR) -type d)
LIB_OBJ_DIRS=$(subst $(LIB_DIR),$(LIB_OBJ_DIR),$(LIB_OBJ_DIRS_sub))

# Programs
PROG_DIR=
PROG_OUT_DIR=$(BUILD_DIR)$(PROG_DIR)
PROG_SRCS=$(shell find $(SRC_DIR) -iname \*.c)
PROG_OBJS=$(PROG_SRCS:.c=.o)
PROG_DIRS_sub=$(shell find $(SRC_DIR) -type d)
PROG_DIRS=$(subst $(SRC_DIR),$(PROG_OUT_DIR),$(PROG_DIRS_sub))
PROGS_sub=$(subst $(SRC_DIR),$(PROG_OUT_DIR),$(PROG_SRCS))
PROGS=$(PROGS_sub:.c=)

# Include raylib if we want a visual experience
ifdef RAYLIB
$(info Visual Experience Selected)
PKGS+=raylib
DEFINES+=-DVISUAL
endif

# Dump AVL tree info?
ifdef AVL_INFO
$(info Including AVL Dump)
DEFINES+=-DAVL_INFO
endif

ifeq ($(shell uname -s),Linux)
	PKGCONF=pkgconf
endif
ifeq ($(shell uname -s),Darwin)
	PKGCONF=pkg-config
endif

CFLAGS=
CFLAGS+=$(shell $(PKGCONF) --cflags $(PKGS))
CFLAGS+=-I$(INC_DIR)
CFLAGS+=$(DEFINES)
CFLAGS+=-Wall

LDFLAGS=
LDFLAGS+=$(shell $(PKGCONF) --libs $(PKGS))

default: clean build

.PHONY: clean build run

build: $(PROGS)

$(BUILD_DIR)$(PROG_DIR)%: $(SRC_OBJ_DIR)%.o $(LIB_OBJS)
	@echo LD --\> $@
	@gcc -o $@ $(LDFLAGS) $^

$(SRC_OBJ_DIR)%.o: $(SRC_DIR)%.c
	@echo CC $< --\> $@
	@gcc -o $@ $(CFLAGS) -c $<

$(LIB_OBJ_DIR)%.o: $(LIB_DIR)%.c
	@echo CC $< --\> $@
	@gcc -o $@ $(CFLAGS) -c $<

clean:
	@echo Cleaning build files...
	@-rm -rf $(OBJ_DIR) $(BUILD_DIR)
	@mkdir -p $(BUILD_DIR) $(SRC_OBJ_DIRS) $(LIB_OBJ_DIRS) $(PROG_DIRS)