-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmakefile
More file actions
119 lines (100 loc) · 4.02 KB
/
makefile
File metadata and controls
119 lines (100 loc) · 4.02 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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
MAKEFLAGS += --silent
# Compiler and flags
CC = gcc
WINDOWS_CC = x86_64-w64-mingw32-gcc
# Common flags
CFLAGS = -I./include -I./res -Wall -std=c11 -fms-extensions -g -O1 -flarge-source-files -DSURVIVAL_MODE
LDFLAGS = -lpthread -lSDL2 -lSDL2main -lGL -lGLU -lm -lopenal -lvorbisfile -lz
# Linux-specific flags
#LINUX_CFLAGS = $(CFLAGS)
#LINUX_LDFLAGS = -static-libgcc -static-libstdc++ \
-Wl,-Bstatic \
-lSDL2 -lGLEW -lGLU -lvorbisfile -lvorbis -logg -lz \
-Wl,-Bdynamic \
-lGL -lopenal \
-lX11 -lXext -lXrandr -lXi -lXcursor -lXinerama -lXxf86vm -lXfixes -lXss \
-lwayland-client -lwayland-cursor -lwayland-egl -lxkbcommon -ldecor-0 \
-lpulse -lpulse-simple \
-ldrm -lgbm \
-lpthread -lm -ldl -lrt -lasound
LINUX_CFLAGS = $(CFLAGS) -fsanitize=address
LINUX_LDFLAGS = $(LDFLAGS) -fsanitize=address -lGLEW
# Windows-specific flags
WINDOWS_CFLAGS = -I./include -I./res -I./lib/zlib -Wall -std=c11 -fms-extensions -Dmain=main \
-isystem ./lib -DSURVIVAL_MODE -DGLEW_STATIC -g2 -gdwarf-2 -O3
WINDOWS_LDFLAGS = \
-L./lib \
-static -static-libgcc -static-libstdc++ \
-lmingw32 -lSDL2main -lSDL2 \
-lopengl32 -lglu32 -lz \
-lOpenAL32 -lwinmm \
-lvorbisfile -lvorbis -logg -lkernel32 \
-lsetupapi -limm32 -loleaut32 -lversion -luuid \
-lgdi32 -lcomdlg32 -luser32 -lole32 -ladvapi32 \
-lm ./res/assets/app/icon.res
# Directories
OBJDIR = bin
SRCDIR = src
LIBSRCDIR = lib/GL
ASSETSDIR = res/assets
HEADERSDIR = $(ASSETSDIR)
# Source and object files
rwildcard=$(foreach d,$(wildcard $(1:=/*)),$(call rwildcard,$d,$2) $(filter $(subst *,%,$2),$d))
SRC = $(call rwildcard,$(SRCDIR),*.c)
LINUX_OBJS = $(patsubst $(SRCDIR)/%.c, $(OBJDIR)/%.o, $(SRC))
WINDOWS_OBJS = $(patsubst $(SRCDIR)/%.c, $(OBJDIR)/%.win.o, $(SRC)) $(OBJDIR)/glew.win.o
# Linux build
minecraft: $(LINUX_OBJS)
@echo !==== LINKING FOR LINUX ====!
$(CC) $(LINUX_OBJS) $(LINUX_LDFLAGS) -o minecraft
$(OBJDIR)/%.o: $(SRCDIR)/%.c
@echo !==== COMPILING FOR LINUX $< ====!
@mkdir -p $(@D)
$(CC) $(LINUX_CFLAGS) -c $< -o $@
# Windows build
windows: $(WINDOWS_OBJS)
@echo !==== LINKING FOR WINDOWS ====!
$(WINDOWS_CC) $(WINDOWS_OBJS) $(WINDOWS_LDFLAGS) -o minecraft.exe
$(OBJDIR)/%.win.o: $(SRCDIR)/%.c
@echo !==== COMPILING FOR WINDOWS $< ====!
@mkdir -p $(@D)
$(WINDOWS_CC) $(WINDOWS_CFLAGS) -c $< -o $@
$(OBJDIR)/glew.win.o: $(LIBSRCDIR)/glew.c
@echo !==== COMPILING GLEW FOR WINDOWS $< ====!
@mkdir -p $(@D)
$(WINDOWS_CC) $(WINDOWS_CFLAGS) -w -c $< -o $@
icon:
@echo !==== COMPILING ICON ====!
@mkdir -p $(OBJDIR)
x86_64-w64-mingw32-windres -i ./res/assets/app/icon.rc -O coff -o ./res/assets/app/icon.res
# Find all .png and .ogg files
ASSET_FILES := $(shell find $(ASSETSDIR) -type f \( -name "*.png" -o -name "*.ogg" \))
# Convert asset files into header files
ASSETS := $(patsubst $(ASSETSDIR)/%, $(HEADERSDIR)/%.h, $(basename $(ASSET_FILES)))
$(HEADERSDIR)/%.h: $(ASSETSDIR)/%.png
@echo !==== CONVERTING $< TO C HEADER ====!
@mkdir -p $(@D)
@FILENAME=$(shell basename $< .png | tr -c 'a-zA-Z0-9' '_') && \
PREFIXED_NAME="asset_$${FILENAME}" && \
convert $< -depth 8 rgba:- | xxd -i -c 16 | \
sed "1s/^/static const unsigned char $${PREFIXED_NAME}rgba[] = {\n/" | \
sed "\$$s/\$$/};/" > $@ && \
echo "static const unsigned int $${PREFIXED_NAME}width = $(shell identify -format "%w" $<);" >> $@ && \
echo "static const unsigned int $${PREFIXED_NAME}height = $(shell identify -format "%h" $<);" >> $@
$(HEADERSDIR)/%.h: $(ASSETSDIR)/%.ogg
@echo !==== CONVERTING $< TO C HEADER ====!
@mkdir -p $(@D)
@FILENAME=$(shell basename $< .ogg | tr -c 'a-zA-Z0-9' '_') && \
PREFIXED_NAME="asset_$${FILENAME}" && \
xxd -p -c 16 $< | sed 's/\(..\)/0x\1,/g' | \
sed "1s/^/static const unsigned char $${PREFIXED_NAME}ogg[] = {\n/" | \
sed "\$$s/,\$$/\n};/" > $@ && \
echo "static const unsigned int $${PREFIXED_NAME}size = $(shell stat -c%s $<);" >> $@
assets: $(ASSETS)
@echo !==== ALL ASSETS CONVERTED ====!
clean:
@echo !==== CLEANING ====!
rm -rf $(OBJDIR) minecraft minecraft.exe
cleanassets:
@echo !==== CLEANING ASSETS ====!
@find $(HEADERSDIR) -type f -name "*.h" -delete