forked from BlackChaose/coffiction_diary
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
147 lines (130 loc) · 5.64 KB
/
Makefile
File metadata and controls
147 lines (130 loc) · 5.64 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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
.PHONY: all clean linux win64 release debug distclean info
PROJECT_NAME = project1
BINARY_NAME = coffiction_diary
PROJECT_LPR = src/app/$(PROJECT_NAME).lpr
PROJECT_LPI = src/app/$(PROJECT_NAME).lpi
SRC_DIR = src
DIST_DIR = dist
LINUX_DIR = $(DIST_DIR)/linux
WINDOWS_DIR = $(DIST_DIR)/windows
LIB_DIR = lib
LAZBUILD = lazbuild
FPC = fpc
LAZARUS_DIR = /usr/lib64/lazarus
LCL_BASE_DIR = $(LAZARUS_DIR)/lcl/units/x86_64-linux
LCL_GTK2_DIR = $(LAZARUS_DIR)/lcl/units/x86_64-linux/gtk2
PACKAGER_DIR = $(LAZARUS_DIR)/packager/units/x86_64-linux
LAZUTILS_DIR = $(LAZARUS_DIR)/components/lazutils/lib/x86_64-linux
$(info LCL_BASE_DIR: $(LCL_BASE_DIR))
$(info LCL_GTK2_DIR: $(LCL_GTK2_DIR))
$(info PACKAGER_DIR: $(PACKAGER_DIR))
$(info LAZUTILS_DIR: $(LAZUTILS_DIR))
PROJECT_UNITS = -Fu$(SRC_DIR)/app \
-Fu$(SRC_DIR)/core \
-Fu$(SRC_DIR)/core/database \
-Fu$(SRC_DIR)/core/utils \
-Fu$(SRC_DIR)/forms \
-Fu$(SRC_DIR)/gui
LAZARUS_UNITS = -Fu$(LCL_BASE_DIR) \
-Fu$(LCL_GTK2_DIR) \
-Fu$(PACKAGER_DIR) \
-Fu$(LAZUTILS_DIR)
RELEASE_FLAGS = -O3 -XX -Xs -CX -Sg -MObjFPC -Scghi -Cg \
-k-Bstatic -k-static \
-dLCL -dLCLgtk2 \
-Fu/usr/lib64/fpc/3.2.2/units/x86_64-linux/* \
-Fr/usr/lib64/fpc/msg/errore.msg
linux-release: | $(LINUX_DIR)
@echo "Сборка Linux Release через lazbuild..."
cd src/app && $(LAZBUILD) --build-mode=Release \
--os=linux --cpu=x86_64 --ws=gtk2 project1.lpi
@# Ищем бинарник в разных местах
@if [ -f src/app/$(BINARY_NAME) ]; then \
cp src/app/$(BINARY_NAME) $(LINUX_DIR)/; \
echo "Ok! Бинарник скопирован из src/app/$(BINARY_NAME)"; \
elif [ -f src/app/bin/linux/release/x86_64-linux/$(BINARY_NAME) ]; then \
cp src/app/bin/linux/release/x86_64-linux/$(BINARY_NAME) $(LINUX_DIR)/; \
echo "Ok! Бинарник скопирован из src/app/bin/..."; \
elif [ -f src/app/project1 ]; then \
cp src/app/project1 $(LINUX_DIR)/$(BINARY_NAME); \
echo "Ok! Бинарник project1 переименован в $(BINARY_NAME)"; \
else \
echo "Fail! Бинарник не найден!"; \
find src/app -name '$(BINARY_NAME)' -o -name 'project1' -type f; \
exit 1; \
fi
@chmod +x $(LINUX_DIR)/$(BINARY_NAME)
@echo "Ok! Linux Release собран: $(LINUX_DIR)/$(BINARY_NAME)"
@echo "Запусти его: $(LINUX_DIR)/$(BINARY_NAME)"
linux-fpc: | $(LINUX_DIR)
@echo "Сборка Linux через fpc..."
@echo "Используемые пути:"
@echo " LCL: $(LCL_BASE_DIR)"
@echo " GTK2: $(LCL_GTK2_DIR)"
@echo " Packager: $(PACKAGER_DIR)"
@echo " LazUtils: $(LAZUTILS_DIR)"
@# Проверяем наличие ключевого модуля
@if [ ! -f $(LCL_GTK2_DIR)/interfaces.ppu ]; then \
echo "Fail! ОШИБКА: interfaces.ppu не найден!"; \
exit 1; \
fi
cd src/app && $(FPC) $(RELEASE_FLAGS) $(PROJECT_UNITS) $(LAZARUS_UNITS) \
-FE../../$(LINUX_DIR) $(PROJECT_LPR)
@if [ -f $(LINUX_DIR)/$(PROJECT_NAME) ]; then \
mv $(LINUX_DIR)/$(PROJECT_NAME) $(LINUX_DIR)/$(BINARY_NAME); \
echo "Fail! Бинарник переименован"; \
fi
@chmod +x $(LINUX_DIR)/$(BINARY_NAME)
@echo "Fail! Linux (fpc) собран: $(LINUX_DIR)/$(BINARY_NAME)"
win64: | $(WINDOWS_DIR)
@echo "Сборка Windows через кросс-компиляцию..."
@# Проверяем наличие кросс-компилятора
@if ! command -v ppcrossx64 >/dev/null 2>&1; then \
echo "Fail! ppcrossx64 не найден. Установи:"; \
echo " sudo apt-get install fpc-cross-win64"; \
exit 1; \
fi
cd src/app && ppcrossx64 $(RELEASE_FLAGS) $(PROJECT_UNITS) \
-Twin64 -Px86_64 \
-FE../../../$(WINDOWS_DIR) $(PROJECT_LPR)
@if [ -f $(WINDOWS_DIR)/$(PROJECT_NAME).exe ]; then \
mv $(WINDOWS_DIR)/$(PROJECT_NAME).exe $(WINDOWS_DIR)/$(BINARY_NAME).exe; \
fi
@echo "Ok! Windows собран: $(WINDOWS_DIR)/$(BINARY_NAME).exe"
all: linux-fpc # Пока используем fpc как наиболее надежный
linux: linux-fpc
release: linux-fpc win64
$(LINUX_DIR):
mkdir -p $(LINUX_DIR)
$(WINDOWS_DIR):
mkdir -p $(WINDOWS_DIR)
clean:
rm -rf $(LIB_DIR)/
find . -name '*.o' -delete
find . -name '*.ppu' -delete
find . -name '*.rst' -delete
find . -name '*.compiled' -delete
find src/app -name '$(BINARY_NAME)' -type f -delete
find src/app -name 'project1' -type f -delete
find src/app -name '*.exe' -type f -delete
@echo "Ok! Проект очищен"
distclean: clean
rm -rf $(DIST_DIR)/
@echo "Ok! Все артефакты удалены"
info:
@echo "=== Информация о проекте ==="
@echo "Project LPI: $(PROJECT_LPI)"
@echo "Project LPR: $(PROJECT_LPR)"
@echo ""
@echo "=== Содержимое src/app ==="
@ls -la src/app/ | grep -E "\.(lpi|lpr|pas|lfm)"
@echo ""
@echo "=== Проверка путей Lazarus ==="
@echo "LCL_BASE_DIR: $(LCL_BASE_DIR) -> $$(if [ -d $(LCL_BASE_DIR) ]; then echo 'Ok!'; else echo 'Fail!'; fi)"
@echo "LCL_GTK2_DIR: $(LCL_GTK2_DIR) -> $$(if [ -d $(LCL_GTK2_DIR) ]; then echo 'Ok!'; else echo 'Fail!'; fi)"
@echo "PACKAGER_DIR: $(PACKAGER_DIR) -> $$(if [ -d $(PACKAGER_DIR) ]; then echo 'Ok!'; else echo 'Fail!'; fi)"
@echo "LAZUTILS_DIR: $(LAZUTILS_DIR) -> $$(if [ -d $(LAZUTILS_DIR) ]; then echo 'Ok!'; else echo 'Fail!'; fi)"
@echo ""
@echo "=== Наличие ключевых модулей ==="
@echo "interfaces.ppu: $$(if [ -f $(LCL_GTK2_DIR)/interfaces.ppu ]; then echo 'Ok!'; else echo 'Fail!'; fi)"
@echo "forms.ppu: $$(if [ -f $(LCL_BASE_DIR)/forms.ppu ]; then echo 'Ok!'; else echo 'Fail!'; fi)"