First working android example app using jni.
[fltk_mvc_template.git] / _template / src / Makefile
1 ############################################################################
2 # Workfile: Makefile
3 # Author: Daniel Giritzer, S1810567004 (daniel@giritzer.eu)
4 # Date: 03.12.2018
5 # Description: Universal Makefile for Unix based Operating Systems
6 ############################################################################
7
8 ###################################
9 #GENERAL | EDIT 1/11
10 ###################################
11 WORKDIR = $(shell pwd)
12 SOURCES := $(shell ls *.cxx)
13 PROJNAME = _template
14 LIBDIR =
15 INC = -I$(WORKDIR)/../include
16 LDFLAGS = -m32 -std=c++11 -static-libstdc++ -static-libgcc
17 CFLAGS = -m32 -Wall -fexceptions -std=c++11 -static-libstdc++ -static-libgcc
18 LIB = -lfltk_images -lfltk_png -lfltk_z -lfltk_jpeg -lfltk
19
20 ###################################
21 #GCC | EDIT 2/11
22 ###################################
23 CC_GCC = gcc
24 CXX_GCC = g++
25 AR_GCC = ar
26 LD_GCC = g++
27 WINDRES_GCC =
28
29 INC_GCC = $(INC)
30 LIBDIR_GCC = -L$(WORKDIR)/../lib/linux32
31 CFLAGS_GCC = $(CFLAGS)
32 RESINC_GCC =
33 LDFLAGS_GCC = $(LDFLAGS)
34 LIB_GCC = $(LIB) -lm -lpthread -lX11 -lbsd -lrt -ldl
35
36 ###################################
37 #MinGW | EDIT 3/11
38 ###################################
39 CC_WIN = i686-w64-mingw32-gcc
40 CXX_WIN = i686-w64-mingw32-g++
41 AR_WIN = i686-w64-mingw32-ar
42 LD_WIN = i686-w64-mingw32-g++
43 WINDRES_WIN = i686-w64-mingw32-windres
44
45 INC_WIN = $(INC)
46 LIBDIR_WIN = -L$(WORKDIR)/../lib/mingw32
47 CFLAGS_WIN = $(CFLAGS) -mwindows -DWIN32 -DUSE_OPENGL32 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64
48 RESINC_WIN =
49 LDFLAGS_WIN =  $(LDFLAGS) -static
50 LIB_WIN = $(LIB) -mwindows -lole32 -luuid -lcomctl32 -lpthread
51
52 ###################################
53 # ARM | EDIT 4/11
54 ###################################
55 CC_ARM = arm-none-eabi-gcc
56 CXX_ARM = arm-none-eabi-g++
57 AR_ARM = arm-none-eabi-ar
58 LD_ARM = arm-none-eabi-g++
59 WINDRES_ARM =
60
61 INC_ARM= $(INC)
62 LIBDIR_ARM = -L$(WORKDIR)/../lib/arm
63 CFLAGS_ARM  = $(CFLAGS)
64 RESINC_ARM =
65 LDFLAGS_ARM  =  $(LDFLAGS) -static
66 LIB_ARM  = $(LIB) -lm -lpthread -lNX11 -lbsd -lrt -ldl
67
68 ###################################
69 # ANDROID | EDIT 5/11
70 ###################################
71 JAVA_HOME=/usr/lib/jvm/java-1.12.0-openjdk-amd64/
72 ANDROID_SDK_ROOT=/usr/lib/android-sdk/
73 ANDROID_BUILD_TOOLS_VERSION=25.0.0
74 ANDROID_PLATORM=android-23
75 ANDROID_KEYSTORE_PATH=~/.android/debug.keystore
76 ANDROID_KEYSTORE_NAME=androiddebugkey
77 ANDROID_KEYSTORE_PW=android
78 ANDROID_CP=$(ANDROID_SDK_ROOT)/platforms/$(ANDROID_PLATORM)/android.jar
79 ADB=$(ANDROID_SDK_ROOT)/platform-tools/adb
80 AAPT=$(ANDROID_SDK_ROOT)/build-tools/$(ANDROID_BUILD_TOOLS_VERSION)/aapt
81 DX=$(ANDROID_SDK_ROOT)/build-tools/$(ANDROID_BUILD_TOOLS_VERSION)/dx
82 ZIPALIGN=$(ANDROID_SDK_ROOT)/build-tools/$(ANDROID_BUILD_TOOLS_VERSION)/zipalign
83 JAVAC=$(JAVA_HOME)/bin/javac
84 JARSIGNER=$(JAVA_HOME)/bin/jarsigner
85
86 GENDIR_ANDROID=$(WORKDIR)/obj/Android/gen
87 CLASSDIR_ANDROID=$(WORKDIR)/obj/Android/class
88 OUT_ANDROID=$(WORKDIR)/bin/Android
89
90 # Android app src subdirectory
91 ANDROID_SRC=$(WORKDIR)/android-src
92 ANDROID_SOURCES=$(shell find $(ANDROID_SRC) -name *.java)
93
94
95 ###################################
96 #RELEASE GCC SETTINGS | EDIT: 6/11
97 ###################################
98 INC_RELEASE_GCC = $(INC_GCC)
99 CFLAGS_RELEASE_GCC = $(CFLAGS_GCC) -O2
100 RESINC_RELEASE_GCC = $(RESINC_GCC)
101 RCFLAGS_RELEASE_GCC = $(RCFLAGS_GCC)
102 LIBDIR_RELEASE_GCC = $(LIBDIR_GCC)
103 LIB_RELEASE_GCC = $(LIB_GCC)
104 LDFLAGS_RELEASE_GCC = $(LDFLAGS_GCC) -s
105 OBJDIR_RELEASE_GCC = obj/Release_Linux
106 DEP_RELEASE_GCC =
107 OUT_RELEASE_GCC = bin/Release_Linux
108
109 ###################################
110 #DEBUG GCC SETTINGS | EDIT: 7/11
111 ###################################
112 INC_DEBUG_GCC = $(INC_GCC)
113 CFLAGS_DEBUG_GCC = $(CFLAGS_GCC) -g
114 RESINC_DEBUG_GCC = $(RESINC_GCC)
115 RCFLAGS_DEBUG_GCC = $(RCFLAGS_GCC)
116 LIBDIR_DEBUG_GCC = $(LIBDIR_GCC)
117 LIB_DEBUG_GCC = $(LIB_GCC)
118 LDFLAGS_DEBUG_GCC = $(LDFLAGS_GCC)
119 OBJDIR_DEBUG_GCC = obj/Debug_Linux
120 DEP_DEBUG_GCC =
121 OUT_DEBUG_GCC = bin/Debug_Linux
122
123 ###################################
124 #RELEASE MinGW SETTINGS | EDIT: 8/11
125 ###################################
126 INC_RELEASE_WIN = $(INC_WIN)
127 CFLAGS_RELEASE_WIN = $(CFLAGS_WIN) -O2
128 RESINC_RELEASE_WIN = $(RESINC_WIN)
129 RCFLAGS_RELEASE_WIN = $(RCFLAGS_WIN)
130 LIBDIR_RELEASE_WIN = $(LIBDIR_WIN)
131 LIB_RELEASE_WIN = $(LIB_WIN)
132 LDFLAGS_RELEASE_WIN = $(LDFLAGS_WIN) -s
133 OBJDIR_RELEASE_WIN = obj/Release_Windows
134 DEP_RELEASE_WIN =
135 OUT_RELEASE_WIN = bin/Release_Windows
136
137 ###################################
138 #DEBUG MinGW SETTINGS | EDIT: 9/11
139 ###################################
140 INC_DEBUG_WIN = $(INC_WIN)
141 CFLAGS_DEBUG_WIN = $(CFLAGS_WIN) -g
142 RESINC_DEBUG_WIN = $(RESINC_WIN)
143 RCFLAGS_DEBUG_WIN = $(RCFLAGS_WIN)
144 LIBDIR_DEBUG_WIN = $(LIBDIR_WIN)
145 LIB_DEBUG_WIN = $(LIB_WIN)
146 LDFLAGS_DEBUG_WIN = $(LDFLAGS_WIN)
147 OBJDIR_DEBUG_WIN = obj/Debug_Windows
148 DEP_DEBUG_WIN =
149 OUT_DEBUG_WIN = bin/Debug_Windows
150
151 ###################################
152 #RELEASE ARM SETTINGS | EDIT: 10/11
153 ###################################
154 INC_RELEASE_ARM = $(INC_ARM)
155 CFLAGS_RELEASE_ARM = $(CFLAGS_ARM) -O2
156 RESINC_RELEASE_ARM = $(RESINC_ARM)
157 RCFLAGS_RELEASE_ARM = $(RCFLAGS_ARM)
158 LIBDIR_RELEASE_ARM = $(LIBDIR_ARM)
159 LIB_RELEASE_ARM= $(LIB_ARM)
160 LDFLAGS_RELEASE_ARM = $(LDFLAGS_ARM) -s
161 OBJDIR_RELEASE_ARM = obj/Release_ARM
162 DEP_RELEASE_ARM =
163 OUT_RELEASE_ARM = bin/Release_ARM
164
165 ###################################
166 #DEBUG ARM SETTINGS | EDIT: 11/11
167 ###################################
168 INC_DEBUG_ARM = $(INC_ARM)
169 CFLAGS_DEBUG_ARM = $(CFLAGS_ARM) -g
170 RESINC_DEBUG_ARM = $(RESINC_ARM)
171 RCFLAGS_DEBUG_ARM = $(RCFLAGS_ARM)
172 LIBDIR_DEBUG_ARM = $(LIBDIR_ARM)
173 LIB_DEBUG_ARM = $(LIB_ARM)
174 LDFLAGS_DEBUG_ARM = $(LDFLAGS_ARM)
175 OBJDIR_DEBUG_ARM = obj/Debug_ARM
176 DEP_DEBUG_ARM =
177 OUT_DEBUG_ARM = bin/Debug_ARM
178
179 ############################
180 #OBJECT LISTS | DO NOT EDIT!
181 ############################
182 OBJ_DEBUG_GCC = $(addprefix $(OBJDIR_DEBUG_GCC)/,$(SOURCES:%.cxx=%.o))
183 OBJ_RELEASE_GCC = $(addprefix $(OBJDIR_RELEASE_GCC)/,$(SOURCES:%.cxx=%.o))
184 OBJ_DEBUG_WIN = $(addprefix $(OBJDIR_DEBUG_WIN)/,$(SOURCES:%.cxx=%.o))
185 OBJ_RELEASE_WIN = $(addprefix $(OBJDIR_RELEASE_WIN)/,$(SOURCES:%.cxx=%.o))
186 OBJ_DEBUG_ARM = $(addprefix $(OBJDIR_DEBUG_ARM)/,$(SOURCES:%.cxx=%.o))
187 OBJ_RELEASE_ARM = $(addprefix $(OBJDIR_RELEASE_ARM)/,$(SOURCES:%.cxx=%.o))
188
189 ##########################
190 #FUNCTIONS | DO NOT EDIT!
191 ##########################
192
193 ######## General
194 all: make_fluid debug release
195 clean: clean_debug_linux clean_release_linux clean_debug_windows clean_release_windows
196 rebuild: clean debug release
197
198 debug Debug: debug_linux debug_windows
199 release Release:  release_linux release_windows
200
201 make_fluid:
202         $(WORKDIR)/../packages/fltk/fltk-1.3.4-1/fluid/fluid -c $(WORKDIR)/ViewFluid.fld
203
204 ######## DEBUG GCC
205 before_debug_linux:
206         test -d $(OUT_DEBUG_GCC) || mkdir -p $(OUT_DEBUG_GCC)
207         test -d $(OBJDIR_DEBUG_GCC) || mkdir -p $(OBJDIR_DEBUG_GCC)
208
209 after_debug_linux:
210
211 debug_linux: before_debug_linux out_debug_linux after_debug_linux
212
213 out_debug_linux: before_debug_linux $(OBJ_DEBUG_GCC) $(DEP_DEBUG_GCC)
214         $(LD_GCC) $(LDFLAGS_DEBUG_GCC) $(LIBDIR_GCC) $(LIBDIR_DEBUG_GCC) $(OBJ_DEBUG_GCC) $(LIB_DEBUG_GCC)  -o $(OUT_DEBUG_GCC)/$(PROJNAME)
215
216 $(OBJDIR_DEBUG_GCC)/%.o: %.cxx
217         $(CXX_GCC) $(CFLAGS_DEBUG_GCC) $(INC_DEBUG_GCC) -c $< -D_DEBUG -o $@
218
219 clean_debug_linux:
220         rm -f $(OBJ_DEBUG_GCC) $(OUT_DEBUG_GCC)/$(PROJNAME)
221         rm -rf $(OUT_DEBUG_GCC)
222         rm -rf $(OBJDIR_DEBUG_GCC)
223
224 ######## RELEASE GCC
225 before_release_linux:
226         test -d $(OUT_RELEASE_GCC) || mkdir -p $(OUT_RELEASE_GCC)
227         test -d $(OBJDIR_RELEASE_GCC) || mkdir -p $(OBJDIR_RELEASE_GCC)
228
229 after_release_linux:
230
231 release_linux: before_release_linux out_release_linux after_release_linux
232
233 out_release_linux: before_release_linux $(OBJ_RELEASE_GCC) $(DEP_RELEASE_GCC)
234         $(LD_GCC) $(LDFLAGS_RELEASE_GCC) $(LIBDIR_GCC) $(LIBDIR_RELEASE_GCC) $(OBJ_RELEASE_GCC) $(LIB_RELEASE_GCC)  -o $(OUT_RELEASE_GCC)/$(PROJNAME)
235
236 $(OBJDIR_RELEASE_GCC)/%.o: %.cxx
237         $(CXX_GCC) $(CFLAGS_RELEASE_GCC) $(INC_RELEASE_GCC) -c $< -D_RELEASE -o $@
238
239 clean_release_linux:
240         rm -f $(OBJ_RELEASE_GCC) $(OUT_RELEASE_GCC)/$(PROJNAME)
241         rm -rf $(OUT_RELEASE_GCC)
242         rm -rf $(OBJDIR_RELEASE_GCC)
243
244 ######## DEBUG WIN
245 before_debug_windows:
246         test -d $(OUT_DEBUG_WIN) || mkdir -p $(OUT_DEBUG_WIN)
247         test -d $(OBJDIR_DEBUG_WIN) || mkdir -p $(OBJDIR_DEBUG_WIN)
248         $(WINDRES_WIN) main.rc $(OBJDIR_DEBUG_WIN)/mainres.o
249
250 after_debug_windows:
251
252 debug_windows: before_debug_windows out_debug_windows after_debug_windows
253
254 out_debug_windows: before_debug_windows $(OBJ_DEBUG_WIN) $(DEP_DEBUG_WIN)
255         $(LD_WIN) $(LDFLAGS_DEBUG_WIN) $(LIBDIR_WIN) $(LIBDIR_DEBUG_WIN) $(OBJ_DEBUG_WIN) $(OBJDIR_DEBUG_WIN)/mainres.o $(LIB_DEBUG_WIN)  -o $(OUT_DEBUG_WIN)/$(PROJNAME).exe
256
257 $(OBJDIR_DEBUG_WIN)/%.o: %.cxx
258         $(CXX_WIN) $(CFLAGS_DEBUG_WIN) $(INC_DEBUG_WIN) -c $< -D_DEBUG -o $@
259
260 clean_debug_windows:
261         rm -f $(OBJ_DEBUG_WIN) $(OUT_DEBUG_WIN)/$(PROJNAME).exe
262         rm -rf $(OUT_DEBUG_WIN)
263         rm -rf $(OBJDIR_DEBUG_WIN)
264
265 ######## RELEASE WIN
266 before_release_windows:
267         test -d $(OUT_RELEASE_WIN) || mkdir -p $(OUT_RELEASE_WIN)
268         test -d $(OBJDIR_RELEASE_WIN) || mkdir -p $(OBJDIR_RELEASE_WIN)
269         $(WINDRES_WIN) main.rc $(OBJDIR_RELEASE_WIN)/mainres.o
270
271 after_release_windows:
272
273 release_windows: before_release_windows out_release_windows after_release_windows
274
275 out_release_windows: before_release_windows $(OBJ_RELEASE_WIN) $(DEP_RELEASE_WIN)
276         $(LD_WIN) $(LDFLAGS_RELEASE_WIN) $(LIBDIR_WIN) $(LIBDIR_RELEASE_WIN) $(OBJ_RELEASE_WIN) $(OBJDIR_RELEASE_WIN)/mainres.o $(LIB_RELEASE_WIN)  -o $(OUT_RELEASE_WIN)/$(PROJNAME).exe
277
278 $(OBJDIR_RELEASE_WIN)/%.o: %.cxx
279         $(CXX_WIN) $(CFLAGS_RELEASE_WIN) $(INC_RELEASE_WIN) -c $< -D_RELEASE -o $@
280
281 clean_release_windows:
282         rm -f $(OBJ_RELEASE_WIN) $(OUT_RELEASE_WIN)/$(PROJNAME).exe
283         rm -rf $(OUT_RELEASE_WIN)
284         rm -rf $(OBJDIR_RELEASE_WIN)
285
286 ######## DEBUG ARM
287 before_debug_arm:
288         test -d $(OUT_DEBUG_ARM) || mkdir -p $(OUT_DEBUG_ARM)
289         test -d $(OBJDIR_DEBUG_ARM) || mkdir -p $(OBJDIR_DEBUG_ARM)
290
291 after_debug_arm:
292
293 debug_arm: before_debug_arm out_debug_arm after_debug_arm
294
295 out_debug_arm: before_debug_arm $(OBJ_DEBUG_ARM) $(DEP_DEBUG_ARM)
296         $(LD_ARM) $(LDFLAGS_DEBUG_ARM) $(LIBDIR_ARM) $(LIBDIR_DEBUG_ARM) $(OBJ_DEBUG_ARM) $(LIB_DEBUG_ARM)  -o $(OUT_DEBUG_ARM)/$(PROJNAME)
297
298 $(OBJDIR_DEBUG_ARM)/%.o: %.cxx
299         $(CXX_ARM) $(CFLAGS_DEBUG_ARM) $(INC_DEBUG_ARM) -c $< -D_DEBUG -o $@
300
301 clean_debug_arm:
302         rm -f $(OBJ_DEBUG_ARM) $(OUT_DEBUG_ARM)/$(PROJNAME)
303         rm -rf $(OUT_DEBUG_ARM)
304         rm -rf $(OBJDIR_DEBUG_ARM)
305
306 ######## RELEASE ARM
307 before_release_arm:
308         test -d $(OUT_RELEASE_ARM) || mkdir -p $(OUT_RELEASE_ARM)
309         test -d $(OBJDIR_RELEASE_ARM) || mkdir -p $(OBJDIR_RELEASE_ARM)
310
311 after_release_arm:
312
313 release_arm: before_release_arm out_release_arm after_release_arm
314
315 out_release_arm: before_release_arm $(OBJ_RELEASE_ARM) $(DEP_RELEASE_ARM)
316         $(LD_ARM) $(LDFLAGS_RELEASE_ARM) $(LIBDIR_ARM) $(LIBDIR_RELEASE_ARM) $(OBJ_RELEASE_ARM) $(LIB_RELEASE_ARM)  -o $(OUT_RELEASE_ARM)/$(PROJNAME)
317
318 $(OBJDIR_RELEASE_ARM)/%.o: %.cxx
319         $(CXX_ARM) $(CFLAGS_RELEASE_ARM) $(INC_RELEASE_ARM) -c $< -D_RELEASE -o $@
320
321 clean_release_arm:
322         rm -f $(OBJ_RELEASE_ARM) $(OUT_RELEASE_ARM)/$(PROJNAME)
323         rm -rf $(OUT_RELEASE_ARM)
324         rm -rf $(OBJDIR_RELEASE_ARM)
325
326 ######## ANDROID APK
327 before_android_apk:
328         test -d $(OUT_ANDROID) || mkdir -p $(OUT_ANDROID)
329         test -d $(GENDIR_ANDROID) || mkdir -p $(GENDIR_ANDROID)
330         test -d $(CLASSDIR_ANDROID) || mkdir -p $(CLASSDIR_ANDROID)
331         $(AAPT) package -f -m -J $(GENDIR_ANDROID) -M $(ANDROID_SRC)/AndroidManifest.xml -S $(ANDROID_SRC)/res -I $(ANDROID_CP)
332
333 after_android_apk:
334         $(JARSIGNER) -keystore $(ANDROID_KEYSTORE_PATH) -storepass '$(ANDROID_KEYSTORE_PW)' $(GENDIR_ANDROID)/$(PROJNAME).apk.unaligned  $(ANDROID_KEYSTORE_NAME)
335         $(ZIPALIGN) -f 4 $(GENDIR_ANDROID)/$(PROJNAME).apk.unaligned  $(OUT_ANDROID)/$(PROJNAME).apk
336
337 android_apk: before_android_apk out_apk after_android_apk
338
339 out_apk: 
340         $(JAVAC) -classpath $(ANDROID_CP) -sourcepath 'src:$(GENDIR_ANDROID)' -d '$(CLASSDIR_ANDROID)' -target 1.7 -source 1.7 $(ANDROID_SOURCES)
341         $(DX) --dex --output=$(GENDIR_ANDROID)/classes.dex $(CLASSDIR_ANDROID)
342         $(AAPT) package -f -M $(ANDROID_SRC)/AndroidManifest.xml -S $(ANDROID_SRC)/res -I $(ANDROID_CP) -F $(GENDIR_ANDROID)/$(PROJNAME).apk.unaligned
343         cd $(GENDIR_ANDROID) && $(AAPT) add $(GENDIR_ANDROID)/$(PROJNAME).apk.unaligned classes.dex
344         #cd $(ANDROID_SRC) && $(AAPT) add $(GENDIR_ANDROID)/$(PROJNAME).apk.unaligned lib/arm64-v8a/libtest.so
345         #cd $(ANDROID_SRC) && $(AAPT) add $(GENDIR_ANDROID)/$(PROJNAME).apk.unaligned lib/armeabi/libtest.so
346         cd $(ANDROID_SRC) && $(AAPT) add $(GENDIR_ANDROID)/$(PROJNAME).apk.unaligned lib/armeabi-v7a/libtest.so
347
348 clean_android_apk:
349         rm -rf $(OUT_ANDROID)
350         rm -rf $(GENDIR_ANDROID)
351         rm -rf $(CLASSDIR_ANDROID)
352
353 apk_install_adb:
354         $(ADB) get-state 1>/dev/null 2>&1 && $(ADB) install -r $(OUT_ANDROID)/$(PROJNAME).apk
355
356 .PHONY: before_debug_linux out_debug_linux after_debug_linux before_release_linux out_release_linux after_release_linux before_debug_windows out_debug_windows after_debug_windows
357 .PHONY: before_debug_arm out_debug_arm after_debug_arm before_release_arm out_release_arm after_release_arm before_release_windows out_release_windows after_release_windows