-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmakefile
More file actions
103 lines (81 loc) · 2.56 KB
/
Copy pathmakefile
File metadata and controls
103 lines (81 loc) · 2.56 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
98
99
100
101
102
103
# Compiler and flags
CC = gcc
_CFLAGS = -Wall -Wextra -std=c11
CFLAGS = -std=c11
# Platform-specific variables
ifeq ($(OS), Windows_NT)
SDL = -IC:\mingw_dev_lib\include\SDL2 -LC:\mingw_dev_lib\lib -lmingw32 -lSDL2main -lSDL2
EXE = ./build/pmx11.exe
PYTHON = py
RM = del /Q
else
CFLAGS += -I/opt/homebrew/opt/sdl2/include/SDL2
LDFLAGS = -L/opt/homebrew/opt/sdl2/lib -lSDL2
EXE = ./build/pmx11
PYTHON = .venv/bin/python3
RM = rm -f
endif
# Object files
OBJS = utils.o pmx.o console.o mouse.o file.o display.o pmx11.o window.o gui.o emu.o stack.o
# Default target
all: $(EXE)
# Build a specific PMX file
# Usage: make build-pmx FILENAME=path/to/file.pmx
build-pmx:
@if [ -z "$(FILENAME)" ]; then \
echo "Error: Please provide a PMX file using FILENAME=path/to/file.pmx"; \
exit 1; \
fi
@echo "Building $(FILENAME)..."
@mkdir -p ./build
$(PYTHON) -m pmxlang.main $(FILENAME)
make start
@echo "Build complete. Run with: $(EXE)"
# Linking
$(EXE): $(OBJS)
mkdir -p ./build
$(PYTHON) ./pmxAssembler.py
$(CC) $(OBJS) $(SDL) $(LDFLAGS) -o $(EXE)
stack.o: ./src/core/stack.c ./src/core/stack.h ./src/pmx.h ./src/utils.h
$(CC) $(CFLAGS) -c ./src/core/stack.c -o stack.o
utils.o: ./src/utils.h ./src/utils.c
$(CC) $(CFLAGS) -c ./src/utils.c -o utils.o
# Compilation rules
pmx.o: ./src/pmx.c ./src/pmx.h
if [ "$(LOG_FLAG)" = "--log" ]; then \
$(CC) $(CFLAGS) -DLOG_ENABLED -c ./src/pmx.c -o pmx.o; \
else \
$(CC) $(CFLAGS) -c ./src/pmx.c -o pmx.o; \
fi
display.o: ./src/devices/display.c ./src/devices/display.h
$(CC) $(CFLAGS) $(SDL) -c ./src/devices/display.c -o display.o
console.o: ./src/devices/console.c ./src/devices/console.h
$(CC) $(CFLAGS) -c ./src/devices/console.c -o console.o
mouse.o: ./src/devices/mouse.c ./src/devices/mouse.h
$(CC) $(CFLAGS) $(SDL) -c ./src/devices/mouse.c -o mouse.o
file.o: ./src/devices/file.c ./src/devices/file.h
$(CC) $(CFLAGS) $(SDL) -c ./src/devices/file.c -o file.o
pmx11.o: ./src/pmx11.c
$(CC) $(CFLAGS) $(SDL) -c ./src/pmx11.c -o pmx11.o
window.o: ./src/extensions/window.c ./src/extensions/window.h
$(CC) $(CFLAGS) $(SDL) -c ./src/extensions/window.c -o window.o
gui.o: ./src/extensions/gui.c ./src/extensions/gui.h
$(CC) $(CFLAGS) $(SDL) -c ./src/extensions/gui.c -o gui.o
emu.o: ./src/emu.c ./src/emu.h
$(CC) $(CFLAGS) $(SDL) -c ./src/emu.c -o emu.o
build:
make clean-all
make
make clean-objects
start:
clear
make clean-all
make all
make clean-objects
./build/pmx11
# Clean rules
clean-all:
$(RM) $(EXE) $(OBJS)
clean-objects:
$(RM) $(OBJS)
.PHONY: all build-pmx start clean-all clean-objects