-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathMakefile
More file actions
111 lines (91 loc) · 4.88 KB
/
Makefile
File metadata and controls
111 lines (91 loc) · 4.88 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
ifeq ($(OS),Windows_NT)
ifndef VCPKG_ROOT
VCPKG_FROM_PATH := $(shell where vcpkg 2>nul)
ifneq ($(VCPKG_FROM_PATH),)
VCPKG_ROOT := $(shell dirname "$(VCPKG_FROM_PATH)" 2>nul)
endif
endif
ifndef VCPKG_ROOT
$(error "vcpkg not found! Please set VCPKG_ROOT environment variable or add vcpkg to PATH")
endif
VCPKG_INCLUDE_DIR := $(VCPKG_ROOT)/packages/sdl3_x64-windows/include
VCPKG_INCLUDE_DIR := $(VCPKG_INCLUDE_DIR) $(VCPKG_ROOT)/packages/sdl3-image_x64-windows/include
VCPKG_INCLUDE_DIR := $(VCPKG_INCLUDE_DIR) $(VCPKG_ROOT)/packages/sdl3-ttf_x64-windows/include
VCPKG_INCLUDE_DIR := $(VCPKG_INCLUDE_DIR) $(VCPKG_ROOT)/packages/ffmpeg_x64-windows/include
VCPKG_LIB_DIR := $(VCPKG_ROOT)/packages/sdl3_x64-windows/lib
VCPKG_LIB_DIR := $(VCPKG_LIB_DIR) $(VCPKG_ROOT)/packages/sdl3-image_x64-windows/lib
VCPKG_LIB_DIR := $(VCPKG_LIB_DIR) $(VCPKG_ROOT)/packages/sdl3-ttf_x64-windows/lib
VCPKG_LIB_DIR := $(VCPKG_LIB_DIR) $(VCPKG_ROOT)/packages/ffmpeg_x64-windows/lib
EXE_EXT := .exe
LIB_EXT := .dll
# Compiler settings
CC := gcc
C_FLAGS := -Wall -Wextra -O2 -g3 -I include -I $(VCPKG_ROOT)/packages/sdl3_x64-windows/include -I $(VCPKG_ROOT)/packages/sdl3-image_x64-windows/include -I $(VCPKG_ROOT)/packages/sdl3-ttf_x64-windows/include -I $(VCPKG_ROOT)/packages/ffmpeg_x64-windows/include -fPIC -DBAPI_LOG_ENABLED
LD_FLAGS := -L $(VCPKG_ROOT)/packages/sdl3_x64-windows/lib -L $(VCPKG_ROOT)/packages/sdl3-image_x64-windows/lib -L $(VCPKG_ROOT)/packages/sdl3-ttf_x64-windows/lib -L $(VCPKG_ROOT)/packages/ffmpeg_x64-windows/lib
LIBS := -lSDL3 -lSDL3_image -lSDL3_ttf -lavcodec -lavformat -lavutil -lswscale -lswresample -lopengl32 -lgdi32 -luser32 -lkernel32 -lshell32
else
# Linux settings
# Extension settings
EXE_EXT :=
LIB_EXT := .so
# Compiler settings
CC := gcc
C_FLAGS := -Wall -Wextra -O2 -g3 -I include -fPIC -DBAPI_LOG_ENABLED
LD_FLAGS :=
LIBS := -lSDL3 -lSDL3_image -lSDL3_ttf -lavcodec -lavformat -lavutil -lswscale -lswresample -lGL -lm
endif
# Source files
C_SOURCES := engine/master/init.c engine/render/create.c engine/render/draw.c engine/mouse_drawing.c engine/text.c engine/version.c engine/log.c engine/button/button.c engine/scene/scene.c engine/level/level.c engine/xml/xml_loader.c engine/audio/audio.c engine/video/video.c
LIB_OBJS := $(C_SOURCES:%.c=%.o)
MAIN_OBJS := $(LIB_OBJS) main.o
all: lib main
# Compile rules
%.o: %.c
@echo CC $< -> $@
@$(CC) $(C_FLAGS) -c -o $@ $<
# Build shared library
lib: $(LIB_OBJS)
@echo LIB $^ -> libbridgeengine$(LIB_EXT)
@$(CC) $(C_FLAGS) $(LD_FLAGS) -shared -fPIC $^ -o libbridgeengine$(LIB_EXT) $(LIBS)
# Build static library
staticlib: engine/master/init.o engine/render/create.o engine/render/draw.o engine/mouse_drawing.o engine/text.o engine/version.o engine/log.o engine/button/button.o engine/scene/scene.o engine/level/level.o engine/xml/xml_loader.o engine/audio/audio.o engine/video/video.o
@ar cr libbridgeengine.a $^
xj380_statickib:
# Build main executable
main: $(MAIN_OBJS)
@echo LINK $^ -> main$(EXE_EXT)
@$(CC) $(C_FLAGS) $(LD_FLAGS) $^ -o main$(EXE_EXT) $(LIBS)
# Build text example
text_example: text_example.o engine/master/init.o engine/render/create.o engine/text.o
@echo LINK $^ -> text_example$(EXE_EXT)
@$(CC) $(C_FLAGS) $(LD_FLAGS) $^ -o text_example$(EXE_EXT) $(LIBS)
# Formatting
%.fmt: %
@echo fmt $< ...
@clang-format -i $<
# Tidy
%.tidy: %
@echo tidy $< ...
@clang-tidy $< -- $(C_FLAGS)
.PHONY: format check clean
format: $(C_SOURCES:%=%.fmt) $(HEADERS:%=%.fmt)
@echo fmt done
check: $(C_SOURCES:%=%.tidy) $(S_SOURCES:%=%.tidy) $(HEADERS:%=%.tidy)
@echo check done
# Clean
clean:
@echo Removing $(LIB_OBJS) main.o main$(EXE_EXT) libbridgeengine$(LIB_EXT) libbridgeengine.a text_example$(EXE_EXT)
ifeq ($(OS),Windows_NT)
@del /f /q engine\master\init.o engine\render\create.o engine\render\draw.o engine\mouse_drawing.o engine\text.o engine\version.o main.o main.exe libbridgeengine.so libbridgeengine.dll libbridgeengine.a text_example.exe engine\scene\scene.o engine\level\level.o engine\xml\xml_loader.o engine\log.o engine\button\button.o engine\audio\audio.o engine\video\video.o 2>nul
else
@rm -f engine/master/init.o engine/render/create.o engine/render/draw.o engine/mouse_drawing.o engine/text.o engine/version.o main.o main libbridgeengine.so libbridgeengine.dll libbridgeengine.a text_example engine/scene/scene.o engine/level/level.o engine/xml/xml_loader.o engine/log.o engine/button/button.o engine/audio/audio.o engine/video/video.o
endif
# Install
install: lib
@mkdir -p $(DESTDIR)/usr/local/lib
@mkdir -p $(DESTDIR)/usr/local/include
@mkdir -p $(DESTDIR)/usr/local/lib/pkgconfig
@cp libbridgeengine.so libbridgeengine.a $(DESTDIR)/usr/local/lib/
@cp -r include/* $(DESTDIR)/usr/local/include/
@cp bridgeengine.pc $(DESTDIR)/usr/local/lib/pkgconfig/
@echo BridgeEngine installed successfully!