-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
97 lines (79 loc) · 2.42 KB
/
Copy pathMakefile
File metadata and controls
97 lines (79 loc) · 2.42 KB
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
85
86
87
88
89
90
91
92
93
94
95
96
97
# SDL flags
SDL_CFLAGS := $(shell sdl2-config --cflags)
SDL_LDFLAGS := $(shell sdl2-config --libs)
# Compiler and flags
CC = gcc
CFLAGS = $(SDL_CFLAGS) -Wall -Isrc/ -Iinclude/ -Ilua/
LDFLAGS = $(SDL_LDFLAGS) -lm -lSDL2 -lSDL2_image
# Directories
SRCDIR = src
LUADIR = src/tinybit/lua
ABCDIR = src/tinybit/ABC-parser
TBDIR = src/tinybit
PNGDIR = src/tinybit/pngle
INCDIR = include
BINDIR = bin
ASSETDIR = assets
# Target executable
TARGET = $(BINDIR)/tinybit
# Installation directories
PREFIX = /usr/local
BINDIR_INSTALL = $(PREFIX)/bin
ASSETDIR_INSTALL = $(PREFIX)/share/tinybit
# Source files
SRC_FILES = $(wildcard $(SRCDIR)/*.c)
LUA_FILES = $(wildcard $(LUADIR)/*.c)
TB_FILES = $(wildcard $(TBDIR)/*.c)
PNG_FILES = $(wildcard $(PNGDIR)/*.c)
# Exclude test files from ABC-parser (main.c and test_parser.c are standalone test programs)
ABC_FILES = $(filter-out $(ABCDIR)/main.c $(ABCDIR)/test_parser.c, $(wildcard $(ABCDIR)/*.c))
# Object files
OBJECTS = $(SRC_FILES:$(SRCDIR)/%.c=$(BINDIR)/%.o) $(LUA_FILES:$(LUADIR)/%.c=$(BINDIR)/%.o) \
$(TB_FILES:$(TBDIR)/%.c=$(BINDIR)/%.o) $(PNG_FILES:$(PNGDIR)/%.c=$(BINDIR)/%.o) \
$(ABC_FILES:$(ABCDIR)/%.c=$(BINDIR)/%.o)
# Default target
all: $(TARGET) copy-assets
# Rule to build the target
$(TARGET): $(OBJECTS)
@mkdir -p $(BINDIR)
$(CC) $(OBJECTS) -o $(TARGET) $(LDFLAGS)
# Rule to build object files from src
$(BINDIR)/%.o: $(SRCDIR)/%.c
@mkdir -p $(BINDIR)
$(CC) $(CFLAGS) -c $< -o $@
# Rule to build object files from lua
$(BINDIR)/%.o: $(LUADIR)/%.c
@mkdir -p $(BINDIR)
$(CC) $(CFLAGS) -c $< -o $@
# Rule to build object files from tinybit
$(BINDIR)/%.o: $(TBDIR)/%.c
@mkdir -p $(BINDIR)
$(CC) $(CFLAGS) -c $< -o $@
# Rule to build object files from ABC-parser
$(BINDIR)/%.o: $(ABCDIR)/%.c
@mkdir -p $(BINDIR)
$(CC) $(CFLAGS) -c $< -o $@
# Rule to build object files from pngle
$(BINDIR)/%.o: $(PNGDIR)/%.c
@mkdir -p $(BINDIR)
$(CC) $(CFLAGS) -c $< -o $@
# Rule to copy assets
copy-assets:
@mkdir -p $(BINDIR)/assets
@cp -r $(ASSETDIR)/* $(BINDIR)/assets/
# Install the program and assets
install: all
@mkdir -p $(BINDIR_INSTALL)
@mkdir -p $(ASSETDIR_INSTALL)
@cp $(TARGET) $(BINDIR_INSTALL)/
@cp -r $(ASSETDIR)/* $(ASSETDIR_INSTALL)/
# Clean up generated files
clean:
rm -rf $(BINDIR)
# Debug target to print variables
debug:
@echo "SRC_FILES: $(SRC_FILES)"
@echo "TB_FILES: $(TB_FILES)"
@echo "OBJECTS: $(OBJECTS)"
# Phony targets
.PHONY: all clean copy-assets install debug