1#
2# GNU Make makefile for building static libraries for use with the Android NDK
3# Copyright (C) 2016, Alexander Bruines <alexander.bruines@gmail.com>
4#
5# This file is made available under the Creative Commons CC0 1.0
6# Universal Public Domain Dedication.
7#
8# The person who associated a work with this deed has dedicated
9# the work to the public domain by waiving all of his or her rights
10# to the work worldwide under copyright law, including all related
11# and neighboring rights, to the extent allowed by law. You can copy,
12# modify, distribute and perform the work, even for commercial purposes,
13# all without asking permission.
14#
15# The test apps are intended to be adapted for use in your code, which
16# may be proprietary.  So unlike the library itself, they are licensed
17# Public Domain.
18#
19
20#
21# This makefile is fully intergrated with this Android Studio project and
22# it will be called automaticaly when you build the project with Gradle.
23#
24# The source packages for the libraries will be automaticaly downloaded.
25# Alternativly you can provide your own sources by placing the following
26# files in the 'jni' directory:
27#
28#  zlib-1.2.8.tar.gz
29#  openssl-1.0.2g.tar.gz
30#  libwebsockets.tar.gz
31#
32# This makefile was tested with the latest NDK/SDK and Android Studio at the
33# time of this writing. As these software packages evolve changes to this
34# makefile may be needed or it may become obselete...
35#
36# This makefile was made for use in Linux but you may be able to edit it
37# and make it work under Windows.
38#
39# At least on Debian, building openssl requires package xutils-dev
40# for makedepend. Ofcourse the standard development packages must also be
41# installed, but xutils-dev is not that obvious in this case...
42#
43# Makedepend will most likely print a lot of warnings during the 'make depend'
44# stage of building openssl. In this case these warnings can be safely ignored.
45#
46
47# Include Application.mk but do not complain if it is not found
48#
49ifeq ($(MAKE_NO_INCLUDES),)
50-include Application.mk
51endif
52
53# Location of the NDK.
54#
55ifeq ($(NDK_ROOT),)
56NDK_ROOT := /opt/Android/SDK/ndk-bundle
57endif
58
59# Select the ABIs to compile for
60#
61NDK_APP_ABI = $(APP_ABI)
62ifeq ($(NDK_APP_ABI),)
63# Set to 'all' if APP_ABI is undefined
64NDK_APP_ABI = all
65endif
66ifeq ($(NDK_APP_ABI),all)
67# Translate 'all' to the individual targets
68NDK_APP_ABI = armeabi armeabi-v7a arm64-v8a mips mips64 x86 x86_64
69else
70# Use the targets from APP_ABI
71NDK_APP_ABI = $(APP_ABI)
72endif
73
74# Select the Android platform to compile for
75#
76ifeq ($(APP_PLATFORM),)
77# use a level that supports all specified ABIs if none was specified
78APP_PLATFORM = android-21
79endif
80
81NDK_MAKE_TOOLCHAIN := $(NDK_ROOT)/build/tools/make_standalone_toolchain.py
82
83#
84# The source packages we want/need
85# Zlib and openssl should be defined in Application.mk, libwebsockets is
86# cloned from github
87#
88
89ifeq ($(ZLIB_VERSION),)
90ZLIB_VERSION := 1.2.8
91endif
92ifeq ($(OPENSSL_VERSION),)
93OPENSSL_VERSION := 1.0.2g
94endif
95
96ifeq ($(ZLIB_TGZ_SOURCE),)
97ZLIB_TGZ_SOURCE := zlib-$(ZLIB_VERSION).tar.gz
98endif
99ifeq ($(OPENSSL_TGZ_SOURCE),)
100OPENSSL_TGZ_SOURCE := openssl-$(OPENSSL_VERSION).tar.gz
101endif
102LIBWEBSOCKETS_TGZ_SOURCE := libwebsockets.tar.gz
103
104# The names of the directories in the source tgz files
105ZLIB_DIR := $(basename $(basename $(ZLIB_TGZ_SOURCE)))
106OPENSSL_DIR := $(basename $(basename $(OPENSSL_TGZ_SOURCE)))
107LIBWEBSOCKETS_DIR := $(basename $(basename $(LIBWEBSOCKETS_TGZ_SOURCE)))
108
109# The URLs used to fetch the source tgz files
110ZLIB_TGZ_URL := http://prdownloads.sourceforge.net/libpng/$(ZLIB_TGZ_SOURCE)
111OPENSSL_TGZ_URL := https://openssl.org/source/$(OPENSSL_TGZ_SOURCE)
112ifeq ($(LIBWEBSOCKETS_GIT_URL),)
113LIBWEBSOCKETS_GIT_URL := https://github.com/warmcat/libwebsockets.git
114endif
115
116# These values are the same as the values for $TARGET_ARCH_ABI in Android.mk
117# This way 'make $TARGET_ARCH_ABI' builds libraries for that ABI.
118# This is also the name for the directory where the libraries are installed to.
119#
120TARGET_X86 := x86
121TARGET_X86_64 := x86_64
122TARGET_ARM := armeabi
123TARGET_ARM_V7A := armeabi-v7a
124TARGET_ARM_V7A_HARD := armeabi-v7a-hard
125TARGET_ARM64_V8A := arm64-v8a
126TARGET_MIPS := mips
127TARGET_MIPS64 := mips64
128
129# The Android NDK API version to build the libraries with.
130#
131#  android-9 ... android-19 support arm mips and x86
132#  android-21 and higher also support arm64 mips64 and x86_64
133#
134# These should be set to the same value as APP_PLATFORM (Application.mk)
135#
136# http://developer.android.com/ndk/guides/stable_apis.html
137#
138# If you change these or APP_PLATFORM you must do a 'make clean'
139#
140# Note:
141# libraries compiled for android-21 and upwards are incompatible with devices below that version!
142# http://stackoverflow.com/questions/28740315/android-ndk-getting-java-lang-unsatisfiedlinkerror-dlopen-failed-cannot-loca
143#
144TARGET_X86_NDK_API := $(subst android-,,$(APP_PLATFORM))
145TARGET_X86_64_NDK_API := $(subst android-,,$(APP_PLATFORM))
146TARGET_ARM_NDK_API := $(subst android-,,$(APP_PLATFORM))
147TARGET_ARM_V7A_NDK_API := $(subst android-,,$(APP_PLATFORM))
148TARGET_ARM_V7A_HARD_NDK_API := $(subst android-,,$(APP_PLATFORM))
149TARGET_ARM64_V8A_NDK_API := $(subst android-,,$(APP_PLATFORM))
150TARGET_MIPS_NDK_API := $(subst android-,,$(APP_PLATFORM))
151TARGET_MIPS64_NDK_API := $(subst android-,,$(APP_PLATFORM))
152
153# The configure arguments to pass to the OpenSSL Configure script
154# (--prefix and --openssldir are added automaticaly).
155# (note: use no-asm on x86 and x86_64 to generate fully position independent code)
156#
157# x86
158TARGET_X86_OPENSSL_CONFIG_TARGET := android-x86
159TARGET_X86_OPENSSL_CONFIG := no-asm no-shared no-idea no-mdc2 no-rc5 no-zlib no-zlib-dynamic enable-tlsext no-ssl2 no-ssl3 enable-ec enable-ecdh enable-ecp
160# x86_64
161TARGET_X86_64_OPENSSL_CONFIG_TARGET := linux-x86_64
162TARGET_X86_64_OPENSSL_CONFIG := no-asm no-shared no-idea no-mdc2 no-rc5 no-zlib no-zlib-dynamic enable-tlsext no-ssl2 no-ssl3 enable-ec enable-ecdh enable-ecp enable-ec_nistp_64_gcc_128
163# armeabi
164TARGET_ARM_OPENSSL_CONFIG_TARGET := android
165TARGET_ARM_OPENSSL_CONFIG := no-shared no-idea no-mdc2 no-rc5 no-zlib no-zlib-dynamic enable-tlsext no-ssl2 no-ssl3 enable-ec enable-ecdh enable-ecp
166# armeabi-v7a
167TARGET_ARM_V7A_OPENSSL_CONFIG_TARGET := android-armv7
168TARGET_ARM_V7A_OPENSSL_CONFIG := no-shared no-idea no-mdc2 no-rc5 no-zlib no-zlib-dynamic enable-tlsext no-ssl2 no-ssl3 enable-ec enable-ecdh enable-ecp
169# armeabi-v7a-hard
170TARGET_ARM_V7A_HARD_OPENSSL_CONFIG_TARGET := android-armv7
171TARGET_ARM_V7A_HARD_OPENSSL_CONFIG := no-shared no-idea no-mdc2 no-rc5 no-zlib no-zlib-dynamic enable-tlsext no-ssl2 no-ssl3 enable-ec enable-ecdh enable-ecp
172# arm64-v8a
173TARGET_ARM64_V8A_OPENSSL_CONFIG_TARGET := android
174TARGET_ARM64_V8A_OPENSSL_CONFIG := no-shared no-idea no-mdc2 no-rc5 no-zlib no-zlib-dynamic enable-tlsext no-ssl2 no-ssl3 enable-ec enable-ecdh enable-ecp
175# mips
176TARGET_MIPS_OPENSSL_CONFIG_TARGET := android-mips
177TARGET_MIPS_OPENSSL_CONFIG := no-shared no-idea no-mdc2 no-rc5 no-zlib no-zlib-dynamic enable-tlsext no-ssl2 no-ssl3 enable-ec enable-ecdh enable-ecp
178# mips64
179TARGET_MIPS64_OPENSSL_CONFIG_TARGET := android
180TARGET_MIPS64_OPENSSL_CONFIG := no-shared no-idea no-mdc2 no-rc5 no-zlib no-zlib-dynamic enable-tlsext no-ssl2 no-ssl3 enable-ec enable-ecdh enable-ecp
181
182# The cmake configuration options for libwebsockets per target ABI,
183# --prefix and openssl library/header paths are set automaticaly and
184# the location of zlib should be picked up by CMake
185# x86
186TARGET_X86_LWS_OPTIONS = \
187 -DCMAKE_C_COMPILER=$(shell pwd)/$(TOOLCHAIN_X86)/bin/$(TOOLCHAIN_X86_PREFIX)-gcc \
188 -DCMAKE_AR=$(shell pwd)/$(TOOLCHAIN_X86)/bin/$(TOOLCHAIN_X86_PREFIX)-ar \
189 -DCMAKE_RANLIB=$(shell pwd)/$(TOOLCHAIN_X86)/bin/$(TOOLCHAIN_X86_PREFIX)-ranlib \
190 -DCMAKE_C_FLAGS="$$CFLAGS" \
191 -DLWS_WITH_SHARED=OFF \
192 -DLWS_WITH_STATIC=ON \
193 -DLWS_WITHOUT_DAEMONIZE=ON \
194 -DLWS_WITHOUT_TESTAPPS=ON \
195 -DLWS_IPV6=OFF \
196 -DLWS_WITH_BUNDLED_ZLIB=OFF \
197 -DLWS_WITH_SSL=ON  \
198 -DLWS_WITH_HTTP2=ON \
199 -DCMAKE_BUILD_TYPE=Release
200# x86_64
201TARGET_X86_64_LWS_OPTIONS = \
202 -DCMAKE_C_COMPILER=$(shell pwd)/$(TOOLCHAIN_X86_64)/bin/$(TOOLCHAIN_X86_64_PREFIX)-gcc \
203 -DCMAKE_AR=$(shell pwd)/$(TOOLCHAIN_X86_64)/bin/$(TOOLCHAIN_X86_64_PREFIX)-ar \
204 -DCMAKE_RANLIB=$(shell pwd)/$(TOOLCHAIN_X86_64)/bin/$(TOOLCHAIN_X86_64_PREFIX)-ranlib \
205 -DCMAKE_C_FLAGS="$$CFLAGS" \
206 -DLWS_WITH_SHARED=OFF \
207 -DLWS_WITH_STATIC=ON \
208 -DLWS_WITHOUT_DAEMONIZE=ON \
209 -DLWS_WITHOUT_TESTAPPS=ON \
210 -DLWS_IPV6=OFF \
211 -DLWS_WITH_BUNDLED_ZLIB=OFF \
212 -DLWS_WITH_SSL=ON  \
213 -DLWS_WITH_HTTP2=ON \
214 -DCMAKE_BUILD_TYPE=Release
215# armeabi
216TARGET_ARM_LWS_OPTIONS = \
217 -DCMAKE_C_COMPILER=$(shell pwd)/$(TOOLCHAIN_ARM)/bin/$(TOOLCHAIN_ARM_PREFIX)-gcc \
218 -DCMAKE_AR=$(shell pwd)/$(TOOLCHAIN_ARM)/bin/$(TOOLCHAIN_ARM_PREFIX)-ar \
219 -DCMAKE_RANLIB=$(shell pwd)/$(TOOLCHAIN_ARM)/bin/$(TOOLCHAIN_ARM_PREFIX)-ranlib \
220 -DCMAKE_C_FLAGS="$$CFLAGS" \
221 -DLWS_WITH_SHARED=OFF \
222 -DLWS_WITH_STATIC=ON \
223 -DLWS_WITHOUT_DAEMONIZE=ON \
224 -DLWS_WITHOUT_TESTAPPS=ON \
225 -DLWS_IPV6=OFF \
226 -DLWS_WITH_BUNDLED_ZLIB=OFF \
227 -DLWS_WITH_SSL=ON  \
228 -DLWS_WITH_HTTP2=ON \
229 -DCMAKE_BUILD_TYPE=Release
230# armeabi-v7a
231TARGET_ARM_V7A_LWS_OPTIONS = \
232 -DCMAKE_C_COMPILER=$(shell pwd)/$(TOOLCHAIN_ARM_V7A)/bin/$(TOOLCHAIN_ARM_V7A_PREFIX)-gcc \
233 -DCMAKE_AR=$(shell pwd)/$(TOOLCHAIN_ARM_V7A)/bin/$(TOOLCHAIN_ARM_V7A_PREFIX)-ar \
234 -DCMAKE_RANLIB=$(shell pwd)/$(TOOLCHAIN_ARM_V7A)/bin/$(TOOLCHAIN_ARM_V7A_PREFIX)-ranlib \
235 -DCMAKE_C_FLAGS="$$CFLAGS" \
236 -DLWS_WITH_SHARED=OFF \
237 -DLWS_WITH_STATIC=ON \
238 -DLWS_WITHOUT_DAEMONIZE=ON \
239 -DLWS_WITHOUT_TESTAPPS=ON \
240 -DLWS_IPV6=OFF \
241 -DLWS_WITH_BUNDLED_ZLIB=OFF \
242 -DLWS_WITH_SSL=ON  \
243 -DLWS_WITH_HTTP2=ON \
244 -DCMAKE_BUILD_TYPE=Release
245# armeabi-v7a-hard
246TARGET_ARM_V7A_HARD_LWS_OPTIONS = \
247 -DCMAKE_C_COMPILER=$(shell pwd)/$(TOOLCHAIN_ARM_V7A_HARD)/bin/$(TOOLCHAIN_ARM_V7A_HARD_PREFIX)-gcc \
248 -DCMAKE_AR=$(shell pwd)/$(TOOLCHAIN_ARM_V7A_HARD)/bin/$(TOOLCHAIN_ARM_V7A_HARD_PREFIX)-ar \
249 -DCMAKE_RANLIB=$(shell pwd)/$(TOOLCHAIN_ARM_V7A_HARD)/bin/$(TOOLCHAIN_ARM_V7A_HARD_PREFIX)-ranlib \
250 -DCMAKE_C_FLAGS="$$CFLAGS" \
251 -DLWS_WITH_SHARED=OFF \
252 -DLWS_WITH_STATIC=ON \
253 -DLWS_WITHOUT_DAEMONIZE=ON \
254 -DLWS_WITHOUT_TESTAPPS=ON \
255 -DLWS_IPV6=OFF \
256 -DLWS_WITH_BUNDLED_ZLIB=OFF \
257 -DLWS_WITH_SSL=ON  \
258 -DLWS_WITH_HTTP2=ON \
259 -DCMAKE_BUILD_TYPE=Release
260# arm64-v8a
261TARGET_ARM64_V8A_LWS_OPTIONS = \
262 -DCMAKE_C_COMPILER=$(shell pwd)/$(TOOLCHAIN_ARM64_V8A)/bin/$(TOOLCHAIN_ARM64_V8A_PREFIX)-gcc \
263 -DCMAKE_AR=$(shell pwd)/$(TOOLCHAIN_ARM64_V8A)/bin/$(TOOLCHAIN_ARM64_V8A_PREFIX)-ar \
264 -DCMAKE_RANLIB=$(shell pwd)/$(TOOLCHAIN_ARM64_V8A)/bin/$(TOOLCHAIN_ARM64_V8A_PREFIX)-ranlib \
265 -DCMAKE_C_FLAGS="$$CFLAGS" \
266 -DLWS_WITH_SHARED=OFF \
267 -DLWS_WITH_STATIC=ON \
268 -DLWS_WITHOUT_DAEMONIZE=ON \
269 -DLWS_WITHOUT_TESTAPPS=ON \
270 -DLWS_IPV6=OFF \
271 -DLWS_WITH_BUNDLED_ZLIB=OFF \
272 -DLWS_WITH_SSL=ON  \
273 -DLWS_WITH_HTTP2=ON \
274 -DCMAKE_BUILD_TYPE=Release
275# mips
276TARGET_MIPS_LWS_OPTIONS = \
277 -DCMAKE_C_COMPILER=$(shell pwd)/$(TOOLCHAIN_MIPS)/bin/$(TOOLCHAIN_MIPS_PREFIX)-gcc \
278 -DCMAKE_AR=$(shell pwd)/$(TOOLCHAIN_MIPS)/bin/$(TOOLCHAIN_MIPS_PREFIX)-ar \
279 -DCMAKE_RANLIB=$(shell pwd)/$(TOOLCHAIN_MIPS)/bin/$(TOOLCHAIN_MIPS_PREFIX)-ranlib \
280 -DCMAKE_C_FLAGS="$$CFLAGS" \
281 -DLWS_WITH_SHARED=OFF \
282 -DLWS_WITH_STATIC=ON \
283 -DLWS_WITHOUT_DAEMONIZE=ON \
284 -DLWS_WITHOUT_TESTAPPS=ON \
285 -DLWS_IPV6=OFF \
286 -DLWS_WITH_BUNDLED_ZLIB=OFF \
287 -DLWS_WITH_SSL=ON  \
288 -DLWS_WITH_HTTP2=ON \
289 -DCMAKE_BUILD_TYPE=Release
290# mips64
291TARGET_MIPS64_LWS_OPTIONS = \
292 -DCMAKE_C_COMPILER=$(shell pwd)/$(TOOLCHAIN_MIPS64)/bin/$(TOOLCHAIN_MIPS64_PREFIX)-gcc \
293 -DCMAKE_AR=$(shell pwd)/$(TOOLCHAIN_MIPS64)/bin/$(TOOLCHAIN_MIPS64_PREFIX)-ar \
294 -DCMAKE_RANLIB=$(shell pwd)/$(TOOLCHAIN_MIPS64)/bin/$(TOOLCHAIN_MIPS64_PREFIX)-ranlib \
295 -DCMAKE_C_FLAGS="$$CFLAGS" \
296 -DLWS_WITH_SHARED=OFF \
297 -DLWS_WITH_STATIC=ON \
298 -DLWS_WITHOUT_DAEMONIZE=ON \
299 -DLWS_WITHOUT_TESTAPPS=ON \
300 -DLWS_IPV6=OFF \
301 -DLWS_WITH_BUNDLED_ZLIB=OFF \
302 -DLWS_WITH_SSL=ON  \
303 -DLWS_WITH_HTTP2=ON \
304 -DCMAKE_BUILD_TYPE=Release
305
306#
307# Toolchain configuration
308#
309
310# The directory names for the different toolchains
311TOOLCHAIN_X86 := toolchains/x86
312TOOLCHAIN_X86_64 := toolchains/x86_64
313TOOLCHAIN_ARM := toolchains/arm
314TOOLCHAIN_ARM_V7A := toolchains/arm-v7a
315TOOLCHAIN_ARM_V7A_HARD := toolchains/arm-v7a-hard
316TOOLCHAIN_ARM64_V8A := toolchains/arm64-v8a
317TOOLCHAIN_MIPS := toolchains/mips
318TOOLCHAIN_MIPS64 := toolchains/mips64
319
320# Use APP_STL to determine what STL to use.
321#
322ifeq ($(APP_STL),stlport_static)
323TOOLCHAIN_STL := stlport
324else ifeq ($(APP_STL),stlport_shared)
325TOOLCHAIN_STL := stlport
326else ifeq ($(APP_STL),gnustl_static)
327TOOLCHAIN_STL := gnustl
328else ifeq ($(APP_STL),gnustl_shared)
329TOOLCHAIN_STL := gnustl
330else ifeq ($(APP_STL),c++_static)
331TOOLCHAIN_STL := libc++
332else ifeq ($(APP_STL),c++_shared)
333TOOLCHAIN_STL := libc++
334endif
335
336# The settings to use for the individual toolchains:
337# x86
338TOOLCHAIN_X86_API := $(TARGET_X86_NDK_API)
339TOOLCHAIN_X86_PREFIX := i686-linux-android
340TOOLCHAIN_X86_FLAGS := -march=i686 -msse3 -mstackrealign -mfpmath=sse
341TOOLCHAIN_X86_LINK :=
342TOOLCHAIN_X86_PLATFORM_HEADERS := $(shell pwd)/$(TOOLCHAIN_X86)/sysroot/usr/include
343TOOLCHAIN_X86_PLATFORM_LIBS := $(shell pwd)/$(TOOLCHAIN_X86)/sysroot/usr/lib
344# x86_64
345TOOLCHAIN_X86_64_API := $(TARGET_X86_64_NDK_API)
346TOOLCHAIN_X86_64_PREFIX := x86_64-linux-android
347TOOLCHAIN_X86_64_FLAGS :=
348TOOLCHAIN_X86_64_LINK :=
349TOOLCHAIN_X86_64_PLATFORM_HEADERS := $(shell pwd)/$(TOOLCHAIN_X86_64)/sysroot/usr/include
350TOOLCHAIN_X86_64_PLATFORM_LIBS := $(shell pwd)/$(TOOLCHAIN_X86_64)/sysroot/usr/lib
351# arm
352TOOLCHAIN_ARM_API := $(TARGET_ARM_NDK_API)
353TOOLCHAIN_ARM_PREFIX := arm-linux-androideabi
354TOOLCHAIN_ARM_FLAGS := -mthumb
355TOOLCHAIN_ARM_LINK :=
356TOOLCHAIN_ARM_PLATFORM_HEADERS := $(shell pwd)/$(TOOLCHAIN_ARM)/sysroot/usr/include
357TOOLCHAIN_ARM_PLATFORM_LIBS := $(shell pwd)/$(TOOLCHAIN_ARM)/sysroot/usr/lib
358# arm-v7a
359TOOLCHAIN_ARM_V7A_API := $(TARGET_ARM_V7A_NDK_API)
360TOOLCHAIN_ARM_V7A_PREFIX := arm-linux-androideabi
361TOOLCHAIN_ARM_V7A_FLAGS := -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16
362TOOLCHAIN_ARM_V7A_LINK := -march=armv7-a -Wl,--fix-cortex-a8
363TOOLCHAIN_ARM_V7A_PLATFORM_HEADERS :=  $(shell pwd)/$(TOOLCHAIN_ARM_V7A)/sysroot/usr/include
364TOOLCHAIN_ARM_V7A_PLATFORM_LIBS := $(shell pwd)/$(TOOLCHAIN_ARM_V7A)/sysroot/usr/lib
365# arm-v7a-hard
366TOOLCHAIN_ARM_V7A_HARD_API := $(TARGET_ARM_V7A_HARD_NDK_API)
367TOOLCHAIN_ARM_V7A_HARD_PREFIX := arm-linux-androideabi
368TOOLCHAIN_ARM_V7A_HARD_FLAGS := -march=armv7-a -mfpu=vfpv3-d16 -mhard-float -mfloat-abi=hard -D_NDK_MATH_NO_SOFTFP=1
369TOOLCHAIN_ARM_V7A_HARD_LINK := -march=armv7-a -Wl,--fix-cortex-a8 -Wl,--no-warn-mismatch -lm_hard
370TOOLCHAIN_ARM_V7A_HARD_PLATFORM_HEADERS :=  $(shell pwd)/$(TOOLCHAIN_ARM_V7A_HARD)/sysroot/usr/include
371TOOLCHAIN_ARM_V7A_HARD_PLATFORM_LIBS := $(shell pwd)/$(TOOLCHAIN_ARM_V7A_HARD)/sysroot/usr/lib
372# arm64-v8a
373TOOLCHAIN_ARM64_V8A_API := $(TARGET_ARM64_V8A_NDK_API)
374TOOLCHAIN_ARM64_V8A_PREFIX := aarch64-linux-android
375TOOLCHAIN_ARM64_V8A_FLAGS :=
376TOOLCHAIN_ARM64_V8A_LINK :=
377TOOLCHAIN_ARM64_V8A_PLATFORM_HEADERS := $(shell pwd)/$(TOOLCHAIN_ARM64_V8A)/sysroot/usr/include
378TOOLCHAIN_ARM64_V8A_PLATFORM_LIBS := $(shell pwd)/$(TOOLCHAIN_ARM64_V8A)/sysroot/usr/lib
379# mips
380TOOLCHAIN_MIPS_API := $(TARGET_MIPS_NDK_API)
381TOOLCHAIN_MIPS_PREFIX := mipsel-linux-android
382TOOLCHAIN_MIPS_FLAGS :=
383TOOLCHAIN_MIPS_LINK :=
384TOOLCHAIN_MIPS_PLATFORM_HEADERS := $(shell pwd)/$(TOOLCHAIN_MIPS)/sysroot/usr/include
385TOOLCHAIN_MIPS_PLATFORM_LIBS := $(shell pwd)/$(TOOLCHAIN_MIPS)/sysroot/usr/lib
386# mips64
387TOOLCHAIN_MIPS64_API := $(TARGET_MIPS64_NDK_API)
388TOOLCHAIN_MIPS64_PREFIX := mips64el-linux-android
389TOOLCHAIN_MIPS64_FLAGS :=
390TOOLCHAIN_MIPS64_LINK :=
391TOOLCHAIN_MIPS64_PLATFORM_HEADERS := $(shell pwd)/$(TOOLCHAIN_MIPS64)/sysroot/usr/include
392TOOLCHAIN_MIPS64_PLATFORM_LIBS := $(shell pwd)/$(TOOLCHAIN_MIPS64)/sysroot/usr/lib
393
394# Environment variables to set while compiling for each ABI
395# x86
396TOOLCHAIN_X86_ENV = \
397 ANDROID_DEV="$(shell pwd)/$(TOOLCHAIN_X86)/bin" \
398 CC=$(TOOLCHAIN_X86_PREFIX)-gcc \
399 CXX=$(TOOLCHAIN_X86_PREFIX)-g++ \
400 LINK=$(TOOLCHAIN_X86_PREFIX)-g++ \
401 LD=$(TOOLCHAIN_X86_PREFIX)-ld \
402 AR=$(TOOLCHAIN_X86_PREFIX)-ar \
403 RANLIB=$(TOOLCHAIN_X86_PREFIX)-ranlib \
404 STRIP=$(TOOLCHAIN_X86_PREFIX)-strip \
405 ARCH_FLAGS="$(TOOLCHAIN_X86_FLAGS)" \
406 ARCH_LINK="$(TOOLCHAIN_X86_LINK)" \
407 CPPFLAGS="-I. $(TOOLCHAIN_X86_FLAGS) -I$(TOOLCHAIN_X86_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64" \
408 CXXFLAGS="-I. $(TOOLCHAIN_X86_FLAGS) -I$(TOOLCHAIN_X86_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64 -frtti -fexceptions" \
409 CFLAGS="-I. $(TOOLCHAIN_X86_FLAGS) -I$(TOOLCHAIN_X86_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64" \
410 LDFLAGS="$(TOOLCHAIN_X86_LINK)" \
411 PATH="$(shell pwd)/$(TOOLCHAIN_X86)/bin:$$PATH"
412# x86_64
413TOOLCHAIN_X86_64_ENV = \
414 ANDROID_DEV="$(shell pwd)/$(TOOLCHAIN_X86_64)/bin" \
415 CC=$(TOOLCHAIN_X86_64_PREFIX)-gcc \
416 CXX=$(TOOLCHAIN_X86_64_PREFIX)-g++ \
417 LINK=$(TOOLCHAIN_X86_64_PREFIX)-g++ \
418 LD=$(TOOLCHAIN_X86_64_PREFIX)-ld \
419 AR=$(TOOLCHAIN_X86_64_PREFIX)-ar \
420 RANLIB=$(TOOLCHAIN_X86_64_PREFIX)-ranlib \
421 STRIP=$(TOOLCHAIN_X86_64_PREFIX)-strip \
422 ARCH_FLAGS="$(TOOLCHAIN_X86_64_FLAGS)" \
423 ARCH_LINK="$(TOOLCHAIN_X86_64_LINK)" \
424 CPPFLAGS="-I. $(TOOLCHAIN_X86_64_FLAGS) -I$(TOOLCHAIN_X86_64_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64" \
425 CXXFLAGS="-I. $(TOOLCHAIN_X86_64_FLAGS) -I$(TOOLCHAIN_X86_64_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64 -frtti -fexceptions" \
426 CFLAGS="-I. $(TOOLCHAIN_X86_64_FLAGS) -I$(TOOLCHAIN_X86_64_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64" \
427 LDFLAGS="$(TOOLCHAIN_X86_64_LINK)" \
428 PATH="$(shell pwd)/$(TOOLCHAIN_X86_64)/bin:$$PATH"
429# arm
430TOOLCHAIN_ARM_ENV = \
431 ANDROID_DEV="$(shell pwd)/$(TOOLCHAIN_ARM)/bin" \
432 CC=$(TOOLCHAIN_ARM_PREFIX)-gcc \
433 CXX=$(TOOLCHAIN_ARM_PREFIX)-g++ \
434 LINK=$(TOOLCHAIN_ARM_PREFIX)-g++ \
435 LD=$(TOOLCHAIN_ARM_PREFIX)-ld \
436 AR=$(TOOLCHAIN_ARM_PREFIX)-ar \
437 RANLIB=$(TOOLCHAIN_ARM_PREFIX)-ranlib \
438 STRIP=$(TOOLCHAIN_ARM_PREFIX)-strip \
439 ARCH_FLAGS="$(TOOLCHAIN_ARM_FLAGS)" \
440 ARCH_LINK="$(TOOLCHAIN_ARM_LINK)" \
441 CPPFLAGS="-I. $(TOOLCHAIN_ARM_FLAGS) -I$(TOOLCHAIN_ARM_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64" \
442 CXXFLAGS="-I. $(TOOLCHAIN_ARM_FLAGS) -I$(TOOLCHAIN_ARM_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64 -frtti -fexceptions" \
443 CFLAGS="-I. $(TOOLCHAIN_ARM_FLAGS) -I$(TOOLCHAIN_ARM_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64" \
444 LDFLAGS="$(TOOLCHAIN_ARM_LINK)" \
445 PATH="$(shell pwd)/$(TOOLCHAIN_ARM)/bin:$$PATH"
446# arm-v7a
447TOOLCHAIN_ARM_V7A_ENV = \
448 ANDROID_DEV="$(shell pwd)/$(TOOLCHAIN_ARM_V7A)/bin" \
449 CC=$(TOOLCHAIN_ARM_V7A_PREFIX)-gcc \
450 CXX=$(TOOLCHAIN_ARM_V7A_PREFIX)-g++ \
451 LINK=$(TOOLCHAIN_ARM_V7A_PREFIX)-g++ \
452 LD=$(TOOLCHAIN_ARM_V7A_PREFIX)-ld \
453 AR=$(TOOLCHAIN_ARM_V7A_PREFIX)-ar \
454 RANLIB=$(TOOLCHAIN_ARM_V7A_PREFIX)-ranlib \
455 STRIP=$(TOOLCHAIN_ARM_V7A_PREFIX)-strip \
456 ARCH_FLAGS="$(TOOLCHAIN_ARM_V7A_FLAGS)" \
457 ARCH_LINK="$(TOOLCHAIN_ARM_V7A_LINK)" \
458 CPPFLAGS="-I. $(TOOLCHAIN_ARM_V7A_FLAGS) -I$(TOOLCHAIN_ARM_V7A_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64" \
459 CXXFLAGS="-I. $(TOOLCHAIN_ARM_V7A_FLAGS) -I$(TOOLCHAIN_ARM_V7A_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64 -frtti -fexceptions" \
460 CFLAGS="-I. $(TOOLCHAIN_ARM_V7A_FLAGS) -I$(TOOLCHAIN_ARM_V7A_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64" \
461 LDFLAGS="$(TOOLCHAIN_ARM_V7A_LINK)" \
462 PATH="$(shell pwd)/$(TOOLCHAIN_ARM_V7A)/bin:$$PATH"
463# arm-v7a-hard
464TOOLCHAIN_ARM_V7A_HARD_ENV = \
465 ANDROID_DEV="$(shell pwd)/$(TOOLCHAIN_ARM_V7A_HARD)/bin" \
466 CC=$(TOOLCHAIN_ARM_V7A_HARD_PREFIX)-gcc \
467 CXX=$(TOOLCHAIN_ARM_V7A_HARD_PREFIX)-g++ \
468 LINK=$(TOOLCHAIN_ARM_V7A_HARD_PREFIX)-g++ \
469 LD=$(TOOLCHAIN_ARM_V7A_HARD_PREFIX)-ld \
470 AR=$(TOOLCHAIN_ARM_V7A_HARD_PREFIX)-ar \
471 RANLIB=$(TOOLCHAIN_ARM_V7A_HARD_PREFIX)-ranlib \
472 STRIP=$(TOOLCHAIN_ARM_V7A_HARD_PREFIX)-strip \
473 ARCH_FLAGS="$(TOOLCHAIN_ARM_V7A_HARD_FLAGS)" \
474 ARCH_LINK="$(TOOLCHAIN_ARM_V7A_HARD_LINK)" \
475 CPPFLAGS="-I. $(TOOLCHAIN_ARM_V7A_HARD_FLAGS) -I$(TOOLCHAIN_ARM_V7A_HARD_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64" \
476 CXXFLAGS="-I. $(TOOLCHAIN_ARM_V7A_HARD_FLAGS) -I$(TOOLCHAIN_ARM_V7A_HARD_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64 -frtti -fexceptions" \
477 CFLAGS="-I. $(TOOLCHAIN_ARM_V7A_HARD_FLAGS) -I$(TOOLCHAIN_ARM_V7A_HARD_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64" \
478 LDFLAGS="$(TOOLCHAIN_ARM_V7A_HARD_LINK)" \
479 PATH="$(shell pwd)/$(TOOLCHAIN_ARM_V7A_HARD)/bin:$$PATH"
480# arm64-v8a
481TOOLCHAIN_ARM64_V8A_ENV = \
482 ANDROID_DEV="$(shell pwd)/$(TOOLCHAIN_ARM64_V8A)/bin" \
483 CC=$(TOOLCHAIN_ARM64_V8A_PREFIX)-gcc \
484 CXX=$(TOOLCHAIN_ARM64_V8A_PREFIX)-g++ \
485 LINK=$(TOOLCHAIN_ARM64_V8A_PREFIX)-g++ \
486 LD=$(TOOLCHAIN_ARM64_V8A_PREFIX)-ld \
487 AR=$(TOOLCHAIN_ARM64_V8A_PREFIX)-ar \
488 RANLIB=$(TOOLCHAIN_ARM64_V8A_PREFIX)-ranlib \
489 STRIP=$(TOOLCHAIN_ARM64_V8A_PREFIX)-strip \
490 ARCH_FLAGS="$(TOOLCHAIN_ARM64_V8A_FLAGS)" \
491 ARCH_LINK="$(TOOLCHAIN_ARM64_V8A_LINK)" \
492 CPPFLAGS="-I. $(TOOLCHAIN_ARM64_V8A_FLAGS) -I$(TOOLCHAIN_ARM64_V8A_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64" \
493 CXXFLAGS="-I. $(TOOLCHAIN_ARM64_V8A_FLAGS) -I$(TOOLCHAIN_ARM64_V8A_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64 -frtti -fexceptions" \
494 CFLAGS="-I. $(TOOLCHAIN_ARM64_V8A_FLAGS) -I$(TOOLCHAIN_ARM64_V8A_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64" \
495 LDFLAGS="$(TOOLCHAIN_ARM64_V8A_LINK)" \
496 PATH="$(shell pwd)/$(TOOLCHAIN_ARM64_V8A)/bin:$$PATH"
497# mips
498TOOLCHAIN_MIPS_ENV = \
499 ANDROID_DEV="$(shell pwd)/$(TOOLCHAIN_MIPS)/bin" \
500 CC=$(TOOLCHAIN_MIPS_PREFIX)-gcc \
501 CXX=$(TOOLCHAIN_MIPS_PREFIX)-g++ \
502 LINK=$(TOOLCHAIN_MIPS_PREFIX)-g++ \
503 LD=$(TOOLCHAIN_MIPS_PREFIX)-ld \
504 AR=$(TOOLCHAIN_MIPS_PREFIX)-ar \
505 RANLIB=$(TOOLCHAIN_MIPS_PREFIX)-ranlib \
506 STRIP=$(TOOLCHAIN_MIPS_PREFIX)-strip \
507 ARCH_FLAGS="$(TOOLCHAIN_MIPS_FLAGS)" \
508 ARCH_LINK="$(TOOLCHAIN_MIPS_LINK)" \
509 CPPFLAGS="-I. $(TOOLCHAIN_MIPS_FLAGS) -I$(TOOLCHAIN_MIPS_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64" \
510 CXXFLAGS="-I. $(TOOLCHAIN_MIPS_FLAGS) -I$(TOOLCHAIN_MIPS_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64 -frtti -fexceptions" \
511 CFLAGS="-I. $(TOOLCHAIN_MIPS_FLAGS) -I$(TOOLCHAIN_MIPS_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64" \
512 LDFLAGS="$(TOOLCHAIN_MIPS_LINK)" \
513 PATH="$(shell pwd)/$(TOOLCHAIN_MIPS)/bin:$$PATH"
514# mips64
515TOOLCHAIN_MIPS64_ENV = \
516 ANDROID_DEV="$(shell pwd)/$(TOOLCHAIN_MIPS64)/bin" \
517 CC=$(TOOLCHAIN_MIPS64_PREFIX)-gcc \
518 CXX=$(TOOLCHAIN_MIPS64_PREFIX)-g++ \
519 LINK=$(TOOLCHAIN_MIPS64_PREFIX)-g++ \
520 LD=$(TOOLCHAIN_MIPS64_PREFIX)-ld \
521 AR=$(TOOLCHAIN_MIPS64_PREFIX)-ar \
522 RANLIB=$(TOOLCHAIN_MIPS64_PREFIX)-ranlib \
523 STRIP=$(TOOLCHAIN_MIPS64_PREFIX)-strip \
524 ARCH_FLAGS="$(TOOLCHAIN_MIPS64_FLAGS)" \
525 ARCH_LINK="$(TOOLCHAIN_MIPS64_LINK)" \
526 CPPFLAGS="-I. $(TOOLCHAIN_MIPS64_FLAGS) -I$(TOOLCHAIN_MIPS64_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64" \
527 CXXFLAGS="-I. $(TOOLCHAIN_MIPS64_FLAGS) -I$(TOOLCHAIN_MIPS64_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64 -frtti -fexceptions" \
528 CFLAGS="-I. $(TOOLCHAIN_MIPS64_FLAGS) -I$(TOOLCHAIN_MIPS64_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64" \
529 LDFLAGS="$(TOOLCHAIN_MIPS64_LINK)" \
530 PATH="$(shell pwd)/$(TOOLCHAIN_MIPS64)/bin:$$PATH"
531
532#
533# All the external tools we use in this Makefile
534#
535
536AWK := awk
537CD := cd
538CMAKE := cmake
539ECHO := echo
540EGREP := egrep
541GIT := git
542LN := ln
543MKDIR := mkdir
544RM := rm
545SORT := sort
546TAR := tar
547WGET := wget
548
549#
550# End of user configurable options.
551#
552
553.PHONY: \
554 all \
555 all-x86 \
556 all-x86_64 \
557 all-armeabi \
558 all-armeabi-v7a \
559 all-armeabi-v7a-hard \
560 all-arm64-v8a \
561 all-mips \
562 all-mips64 \
563 common \
564 sources \
565 toolchains \
566 toolchain-x86 \
567 toolchain-x86_64 \
568 toolchain-armeabi \
569 toolchain-armeabi-v7a \
570 toolchain-armeabi-v7a-hard \
571 toolchain-arm64-v8a \
572 toolchain-mips \
573 toolchain-mips64 \
574 zlib \
575 zlib-x86 \
576 zlib-x86_64 \
577 zlib-armeabi \
578 zlib-armeabi-v7a \
579 zlib-armeabi-v7a-hard \
580 zlib-arm64-v8a \
581 zlib-mips \
582 zlib-mips64 \
583 openssl \
584 openssl-x86 \
585 openssl-x86_64 \
586 openssl-armeabi \
587 openssl-armeabi-v7a \
588 openssl-armeabi-v7a-hard \
589 openssl-arm64-v8a \
590 openssl-mips \
591 openssl-mips64 \
592 libwebsockets \
593 libwebsockets-x86 \
594 libwebsockets-x86_64 \
595 libwebsockets-armeabi \
596 libwebsockets-armeabi-v7a \
597 libwebsockets-armeabi-v7a-hard \
598 libwebsockets-arm64-v8a \
599 libwebsockets-mips \
600 libwebsockets-mips64 \
601 clean-ndk \
602 clean \
603 dist-clean \
604 clean-targets \
605 clean-target-x86 \
606 clean-target-x86_64 \
607 clean-target-armeabi \
608 clean-target-armeabi-v7a \
609 clean-target-armeabi-v7a-hard \
610 clean-target-arm64-v8a \
611 clean-target-mips \
612 clean-target-mips64 \
613 clean-sources \
614 clean-source-zlib \
615 clean-source-openssl \
616 clean-source-libwebsockets \
617 clean-toolchains \
618 clean-toolchain-x86 \
619 clean-toolchain-x86_64 \
620 clean-toolchain-armeabi \
621 clean-toolchain-armeabi-v7a \
622 clean-toolchain-armeabi-v7a-hard \
623 clean-toolchain-arm64-v8a \
624 clean-toolchain-mips \
625 clean-toolchain-mips64 \
626 list-targets
627
628# Default rule: build the libraries for all ABIs defined in NDK_APP_ABI then run ndk-build
629all: $(NDK_APP_ABI)
630	$(NDK_ROOT)/ndk-build clean
631	$(NDK_ROOT)/ndk-build
632
633# Libraries may also be build per ABI
634all-x86: $(TARGET_X86)
635all-x86_64: $(TARGET_X86_64)
636all-armeabi: $(TARGET_ARM)
637all-armeabi-v7a: $(TARGET_ARM_V7A)
638all-armeabi-v7a-hard: $(TARGET_ARM_V7A_HARD)
639all-arm64-v8a: $(TARGET_ARM64_V8A)
640all-mips: $(TARGET_MIPS)
641all-mips64: $(TARGET_MIPS64)
642
643# Common rule all targets depend on
644common: ../jniLibs
645
646# These rules are called from Android.mk when executing ndk-build
647$(TARGET_X86): common zlib-x86 openssl-x86 libwebsockets-x86
648$(TARGET_X86_64): common zlib-x86_64 openssl-x86_64 libwebsockets-x86_64
649$(TARGET_ARM): common zlib-armeabi openssl-armeabi libwebsockets-armeabi
650$(TARGET_ARM_V7A): common zlib-armeabi-v7a openssl-armeabi-v7a libwebsockets-armeabi-v7a
651$(TARGET_ARM_V7A_HARD): common zlib-armeabi-v7a-hard openssl-armeabi-v7a-hard libwebsockets-armeabi-v7a-hard
652$(TARGET_ARM64_V8A): common zlib-arm64-v8a openssl-arm64-v8a libwebsockets-arm64-v8a
653$(TARGET_MIPS): common zlib-mips openssl-mips libwebsockets-mips
654$(TARGET_MIPS64): common zlib-mips64 openssl-mips64 libwebsockets-mips64
655
656#
657# A rule to ensure ../jniLibs points to ../libs
658# (ndk-build creates ../libs but Gradle looks for ../jniLibs)
659#
660
661../libs:
662	$(MKDIR) ../libs
663
664../jniLibs: ../libs
665	$(CD) .. && $(LN) -s libs jniLibs
666
667#
668# Some rules to download the sources
669#
670
671sources: $(ZLIB_TGZ_SOURCE) $(OPENSSL_TGZ_SOURCE) $(LIBWEBSOCKETS_TGZ_SOURCE)
672
673$(ZLIB_TGZ_SOURCE):
674	$(WGET) -q $(ZLIB_TGZ_URL)
675
676$(OPENSSL_TGZ_SOURCE):
677	$(WGET) -q $(OPENSSL_TGZ_URL)
678
679$(LIBWEBSOCKETS_TGZ_SOURCE):
680	if [ -d $(LIBWEBSOCKETS_DIR) ]; then $(RM) -fr $(LIBWEBSOCKETS_DIR); fi
681	$(GIT) clone $(LIBWEBSOCKETS_GIT_URL)
682	$(TAR) caf $(LIBWEBSOCKETS_TGZ_SOURCE) $(LIBWEBSOCKETS_DIR)
683	$(RM) -fR $(LIBWEBSOCKETS_DIR)
684
685#
686# Some rules to install the required toolchains
687#
688
689toolchains: \
690 toolchain-x86 \
691 toolchain-x86_64 \
692 toolchain-armeabi \
693 toolchain-armeabi-v7a \
694 toolchain-armeabi-v7a-hard \
695 toolchain-arm64-v8a \
696 toolchain-mips \
697 toolchain-mips64
698
699toolchain-x86: $(TOOLCHAIN_X86)
700toolchain-x86_64: $(TOOLCHAIN_X86_64)
701toolchain-armeabi: $(TOOLCHAIN_ARM)
702toolchain-armeabi-v7a: $(TOOLCHAIN_ARM_V7A)
703toolchain-armeabi-v7a-hard: $(TOOLCHAIN_ARM_V7A_HARD)
704toolchain-arm64-v8a: $(TOOLCHAIN_ARM64_V8A)
705toolchain-mips: $(TOOLCHAIN_MIPS)
706toolchain-mips64: $(TOOLCHAIN_MIPS64)
707
708$(TOOLCHAIN_X86):
709ifneq ($(TOOLCHAIN_STL),)
710	$(NDK_MAKE_TOOLCHAIN) \
711	  --stl $(TOOLCHAIN_STL) \
712	  --api $(TOOLCHAIN_X86_API) \
713	  --arch x86 \
714	  --install-dir $(shell pwd)/$(TOOLCHAIN_X86)
715else
716	$(NDK_MAKE_TOOLCHAIN) \
717	  --api $(TOOLCHAIN_X86_API) \
718	  --arch x86 \
719	  --install-dir $(shell pwd)/$(TOOLCHAIN_X86)
720endif
721
722$(TOOLCHAIN_X86_64):
723ifneq ($(TOOLCHAIN_STL),)
724	$(NDK_MAKE_TOOLCHAIN) \
725	  --stl $(TOOLCHAIN_STL) \
726	  --api $(TOOLCHAIN_X86_64_API) \
727	  --arch x86_64 \
728	  --install-dir $(shell pwd)/$(TOOLCHAIN_X86_64)
729else
730	$(NDK_MAKE_TOOLCHAIN) \
731	  --api $(TOOLCHAIN_X86_64_API) \
732	  --arch x86_64 \
733	  --install-dir $(shell pwd)/$(TOOLCHAIN_X86_64)
734endif
735
736$(TOOLCHAIN_ARM):
737ifneq ($(TOOLCHAIN_STL),)
738	$(NDK_MAKE_TOOLCHAIN) \
739	  --stl $(TOOLCHAIN_STL) \
740	  --api $(TOOLCHAIN_ARM_API) \
741	  --arch arm \
742	  --install-dir $(shell pwd)/$(TOOLCHAIN_ARM)
743else
744	$(NDK_MAKE_TOOLCHAIN) \
745	  --api $(TOOLCHAIN_ARM_API) \
746	  --arch arm \
747	  --install-dir $(shell pwd)/$(TOOLCHAIN_ARM)
748endif
749
750$(TOOLCHAIN_ARM_V7A):
751ifneq ($(TOOLCHAIN_STL),)
752	$(NDK_MAKE_TOOLCHAIN) \
753	  --stl $(TOOLCHAIN_STL) \
754	  --api $(TOOLCHAIN_ARM_V7A_API) \
755	  --arch arm \
756	  --install-dir $(shell pwd)/$(TOOLCHAIN_ARM_V7A)
757else
758	$(NDK_MAKE_TOOLCHAIN) \
759	  --api $(TOOLCHAIN_ARM_V7A_API) \
760	  --arch arm \
761	  --install-dir $(shell pwd)/$(TOOLCHAIN_ARM_V7A)
762endif
763
764$(TOOLCHAIN_ARM_V7A_HARD):
765ifneq ($(TOOLCHAIN_STL),)
766	$(NDK_MAKE_TOOLCHAIN) \
767	  --stl $(TOOLCHAIN_STL) \
768	  --api $(TOOLCHAIN_ARM_V7A_HARD_API) \
769	  --arch arm \
770	  --install-dir $(shell pwd)/$(TOOLCHAIN_ARM_V7A_HARD)
771else
772	$(NDK_MAKE_TOOLCHAIN) \
773	  --api $(TOOLCHAIN_ARM_V7A_HARD_API) \
774	  --arch arm \
775	  --install-dir $(shell pwd)/$(TOOLCHAIN_ARM_V7A_HARD)
776endif
777
778$(TOOLCHAIN_ARM64_V8A):
779ifneq ($(TOOLCHAIN_STL),)
780	$(NDK_MAKE_TOOLCHAIN) \
781	  --stl $(TOOLCHAIN_STL) \
782	  --api $(TOOLCHAIN_ARM64_V8A_API) \
783	  --arch arm64 \
784	  --install-dir $(shell pwd)/$(TOOLCHAIN_ARM64_V8A)
785else
786	$(NDK_MAKE_TOOLCHAIN) \
787	  --api $(TOOLCHAIN_ARM64_V8A_API) \
788	  --arch arm64 \
789	  --install-dir $(shell pwd)/$(TOOLCHAIN_ARM64_V8A)
790endif
791
792$(TOOLCHAIN_MIPS):
793ifneq ($(TOOLCHAIN_STL),)
794	$(NDK_MAKE_TOOLCHAIN) \
795	  --stl $(TOOLCHAIN_STL) \
796	  --api $(TOOLCHAIN_MIPS_API) \
797	  --arch mips \
798	  --install-dir $(shell pwd)/$(TOOLCHAIN_MIPS)
799else
800	$(NDK_MAKE_TOOLCHAIN) \
801	  --api $(TOOLCHAIN_MIPS_API) \
802	  --arch mips \
803	  --install-dir $(shell pwd)/$(TOOLCHAIN_MIPS)
804endif
805
806$(TOOLCHAIN_MIPS64):
807ifneq ($(TOOLCHAIN_STL),)
808	$(NDK_MAKE_TOOLCHAIN) \
809	  --stl $(TOOLCHAIN_STL) \
810	  --api $(TOOLCHAIN_MIPS64_API) \
811	  --arch mips64 \
812	  --install-dir $(shell pwd)/$(TOOLCHAIN_MIPS64)
813else
814	$(NDK_MAKE_TOOLCHAIN) \
815	  --api $(TOOLCHAIN_MIPS64_API) \
816	  --arch mips64 \
817	  --install-dir $(shell pwd)/$(TOOLCHAIN_MIPS64)
818endif
819
820#
821# Rules to build zlib
822#
823
824zlib: \
825 zlib-x86 \
826 zlib-x86_64 \
827 zlib-armeabi \
828 zlib-armeabi-v7a \
829 zlib-armeabi-v7a-hard \
830 zlib-arm64-v8a \
831 zlib-mips \
832 zlib-mips64
833
834zlib-x86: $(TARGET_X86)/lib/libz.a
835zlib-x86_64: $(TARGET_X86_64)/lib/libz.a
836zlib-armeabi: $(TARGET_ARM)/lib/libz.a
837zlib-armeabi-v7a: $(TARGET_ARM_V7A)/lib/libz.a
838zlib-armeabi-v7a-hard: $(TARGET_ARM_V7A_HARD)/lib/libz.a
839zlib-arm64-v8a: $(TARGET_ARM64_V8A)/lib/libz.a
840zlib-mips: $(TARGET_MIPS)/lib/libz.a
841zlib-mips64: $(TARGET_MIPS64)/lib/libz.a
842
843# Extracting/configuring sources
844
845$(TARGET_X86)/src/$(ZLIB_DIR): $(ZLIB_TGZ_SOURCE) $(TOOLCHAIN_X86)
846	-$(MKDIR) -p $(TARGET_X86)/src
847	$(TAR) xf $(ZLIB_TGZ_SOURCE) -C $(TARGET_X86)/src
848	$(CD) $(TARGET_X86)/src/$(ZLIB_DIR) && $(TOOLCHAIN_X86_ENV) \
849	  ./configure --static --prefix=$(shell pwd)/$(TARGET_X86)
850
851$(TARGET_X86_64)/src/$(ZLIB_DIR): $(ZLIB_TGZ_SOURCE) $(TOOLCHAIN_X86_64)
852	-$(MKDIR) -p $(TARGET_X86_64)/src
853	$(TAR) xf $(ZLIB_TGZ_SOURCE) -C $(TARGET_X86_64)/src
854	$(CD) $(TARGET_X86_64)/src/$(ZLIB_DIR) && $(TOOLCHAIN_X86_64_ENV) \
855	  ./configure --static --prefix=$(shell pwd)/$(TARGET_X86_64)
856
857$(TARGET_ARM)/src/$(ZLIB_DIR): $(ZLIB_TGZ_SOURCE) $(TOOLCHAIN_ARM)
858	-$(MKDIR) -p $(TARGET_ARM)/src
859	$(TAR) xf $(ZLIB_TGZ_SOURCE) -C $(TARGET_ARM)/src
860	$(CD) $(TARGET_ARM)/src/$(ZLIB_DIR) && $(TOOLCHAIN_ARM_ENV) \
861	  ./configure --static --prefix=$(shell pwd)/$(TARGET_ARM)
862
863$(TARGET_ARM_V7A)/src/$(ZLIB_DIR): $(ZLIB_TGZ_SOURCE) $(TOOLCHAIN_ARM_V7A)
864	-$(MKDIR) -p $(TARGET_ARM_V7A)/src
865	$(TAR) xf $(ZLIB_TGZ_SOURCE) -C $(TARGET_ARM_V7A)/src
866	$(CD) $(TARGET_ARM_V7A)/src/$(ZLIB_DIR) && $(TOOLCHAIN_ARM_V7A_ENV) \
867	  ./configure --static --prefix=$(shell pwd)/$(TARGET_ARM_V7A)
868
869$(TARGET_ARM_V7A_HARD)/src/$(ZLIB_DIR): $(ZLIB_TGZ_SOURCE) $(TOOLCHAIN_ARM_V7A_HARD)
870	-$(MKDIR) -p $(TARGET_ARM_V7A_HARD)/src
871	$(TAR) xf $(ZLIB_TGZ_SOURCE) -C $(TARGET_ARM_V7A_HARD)/src
872	$(CD) $(TARGET_ARM_V7A_HARD)/src/$(ZLIB_DIR) && $(TOOLCHAIN_ARM_V7A_HARD_ENV) \
873	  ./configure --static --prefix=$(shell pwd)/$(TARGET_ARM_V7A_HARD)
874
875$(TARGET_ARM64_V8A)/src/$(ZLIB_DIR): $(ZLIB_TGZ_SOURCE) $(TOOLCHAIN_ARM64_V8A)
876	-$(MKDIR) -p $(TARGET_ARM64_V8A)/src
877	$(TAR) xf $(ZLIB_TGZ_SOURCE) -C $(TARGET_ARM64_V8A)/src
878	$(CD) $(TARGET_ARM64_V8A)/src/$(ZLIB_DIR) && $(TOOLCHAIN_ARM64_V8A_ENV) \
879	  ./configure --static --prefix=$(shell pwd)/$(TARGET_ARM64_V8A)
880
881$(TARGET_MIPS)/src/$(ZLIB_DIR): $(ZLIB_TGZ_SOURCE) $(TOOLCHAIN_MIPS)
882	-$(MKDIR) -p $(TARGET_MIPS)/src
883	$(TAR) xf $(ZLIB_TGZ_SOURCE) -C $(TARGET_MIPS)/src
884	$(CD) $(TARGET_MIPS)/src/$(ZLIB_DIR) && $(TOOLCHAIN_MIPS_ENV) \
885	  ./configure --static --prefix=$(shell pwd)/$(TARGET_MIPS)
886
887$(TARGET_MIPS64)/src/$(ZLIB_DIR): $(ZLIB_TGZ_SOURCE) $(TOOLCHAIN_MIPS64)
888	-$(MKDIR) -p $(TARGET_MIPS64)/src
889	$(TAR) xf $(ZLIB_TGZ_SOURCE) -C $(TARGET_MIPS64)/src
890	$(CD) $(TARGET_MIPS64)/src/$(ZLIB_DIR) && $(TOOLCHAIN_MIPS64_ENV) \
891	  ./configure --static --prefix=$(shell pwd)/$(TARGET_MIPS64)
892
893# Build/install library
894
895$(TARGET_X86)/lib/libz.a: $(TARGET_X86)/src/$(ZLIB_DIR)
896	$(CD) $(TARGET_X86)/src/$(ZLIB_DIR) && $(TOOLCHAIN_X86_ENV) $(MAKE) libz.a
897	$(CD) $(TARGET_X86)/src/$(ZLIB_DIR) && $(TOOLCHAIN_X86_ENV) $(MAKE) install
898
899$(TARGET_X86_64)/lib/libz.a: $(TARGET_X86_64)/src/$(ZLIB_DIR)
900	$(CD) $(TARGET_X86_64)/src/$(ZLIB_DIR) && $(TOOLCHAIN_X86_64_ENV) $(MAKE) libz.a
901	$(CD) $(TARGET_X86_64)/src/$(ZLIB_DIR) && $(TOOLCHAIN_X86_64_ENV) $(MAKE) install
902
903$(TARGET_ARM)/lib/libz.a: $(TARGET_ARM)/src/$(ZLIB_DIR)
904	$(CD) $(TARGET_ARM)/src/$(ZLIB_DIR) && $(TOOLCHAIN_ARM_ENV) $(MAKE) libz.a
905	$(CD) $(TARGET_ARM)/src/$(ZLIB_DIR) && $(TOOLCHAIN_ARM_ENV) $(MAKE) install
906
907$(TARGET_ARM_V7A)/lib/libz.a: $(TARGET_ARM_V7A)/src/$(ZLIB_DIR)
908	$(CD) $(TARGET_ARM_V7A)/src/$(ZLIB_DIR) && $(TOOLCHAIN_ARM_V7A_ENV) $(MAKE) libz.a
909	$(CD) $(TARGET_ARM_V7A)/src/$(ZLIB_DIR) && $(TOOLCHAIN_ARM_V7A_ENV) $(MAKE) install
910
911$(TARGET_ARM_V7A_HARD)/lib/libz.a: $(TARGET_ARM_V7A_HARD)/src/$(ZLIB_DIR)
912	$(CD) $(TARGET_ARM_V7A_HARD)/src/$(ZLIB_DIR) && $(TOOLCHAIN_ARM_V7A_HARD_ENV) $(MAKE) libz.a
913	$(CD) $(TARGET_ARM_V7A_HARD)/src/$(ZLIB_DIR) && $(TOOLCHAIN_ARM_V7A_HARD_ENV) $(MAKE) install
914
915$(TARGET_ARM64_V8A)/lib/libz.a: $(TARGET_ARM64_V8A)/src/$(ZLIB_DIR)
916	$(CD) $(TARGET_ARM64_V8A)/src/$(ZLIB_DIR) && $(TOOLCHAIN_ARM64_V8A_ENV) $(MAKE) libz.a
917	$(CD) $(TARGET_ARM64_V8A)/src/$(ZLIB_DIR) && $(TOOLCHAIN_ARM64_V8A_ENV) $(MAKE) install
918
919$(TARGET_MIPS)/lib/libz.a: $(TARGET_MIPS)/src/$(ZLIB_DIR)
920	$(CD) $(TARGET_MIPS)/src/$(ZLIB_DIR) && $(TOOLCHAIN_MIPS_ENV) $(MAKE) libz.a
921	$(CD) $(TARGET_MIPS)/src/$(ZLIB_DIR) && $(TOOLCHAIN_MIPS_ENV) $(MAKE) install
922
923$(TARGET_MIPS64)/lib/libz.a: $(TARGET_MIPS64)/src/$(ZLIB_DIR)
924	$(CD) $(TARGET_MIPS64)/src/$(ZLIB_DIR) && $(TOOLCHAIN_MIPS64_ENV) $(MAKE) libz.a
925	$(CD) $(TARGET_MIPS64)/src/$(ZLIB_DIR) && $(TOOLCHAIN_MIPS64_ENV) $(MAKE) install
926
927#
928# Rules to build OpenSSL
929#
930
931openssl: \
932 openssl-x86 \
933 openssl-x86_64 \
934 openssl-armeabi \
935 openssl-armeabi-v7a \
936 openssl-armeabi-v7a-hard \
937 openssl-arm64-v8a \
938 openssl-mips \
939 openssl-mips64
940
941openssl-x86: $(TARGET_X86)/lib/libssl.a
942openssl-x86_64: $(TARGET_X86_64)/lib/libssl.a
943openssl-armeabi: $(TARGET_ARM)/lib/libssl.a
944openssl-armeabi-v7a: $(TARGET_ARM_V7A)/lib/libssl.a
945openssl-armeabi-v7a-hard: $(TARGET_ARM_V7A_HARD)/lib/libssl.a
946openssl-arm64-v8a: $(TARGET_ARM64_V8A)/lib/libssl.a
947openssl-mips: $(TARGET_MIPS)/lib/libssl.a
948openssl-mips64: $(TARGET_MIPS64)/lib/libssl.a
949
950# Extracting/configuring sources
951
952$(TARGET_X86)/src/$(OPENSSL_DIR): $(OPENSSL_TGZ_SOURCE) $(TOOLCHAIN_X86)
953	-$(MKDIR) -p $(TARGET_X86)/src
954	$(TAR) xf $(OPENSSL_TGZ_SOURCE) -C $(TARGET_X86)/src
955	$(CD) $(TARGET_X86)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_X86_ENV) \
956	  ./Configure $(TARGET_X86_OPENSSL_CONFIG_TARGET) \
957	    --prefix=$(shell pwd)/$(TARGET_X86) \
958	    --openssldir=$(shell pwd)/$(TARGET_X86)/lib/ssl \
959	    $(TARGET_X86_OPENSSL_CONFIG)
960
961$(TARGET_X86_64)/src/$(OPENSSL_DIR): $(OPENSSL_TGZ_SOURCE) $(TOOLCHAIN_X86_64)
962	-$(MKDIR) -p $(TARGET_X86_64)/src
963	$(TAR) xf $(OPENSSL_TGZ_SOURCE) -C $(TARGET_X86_64)/src
964	$(CD) $(TARGET_X86_64)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_X86_64_ENV) \
965	  ./Configure $(TARGET_X86_64_OPENSSL_CONFIG_TARGET) \
966	    --prefix=$(shell pwd)/$(TARGET_X86_64) \
967	    --openssldir=$(shell pwd)/$(TARGET_X86_64)/lib/ssl \
968	    $(TARGET_X86_64_OPENSSL_CONFIG)
969
970$(TARGET_ARM)/src/$(OPENSSL_DIR): $(OPENSSL_TGZ_SOURCE) $(TOOLCHAIN_ARM)
971	-$(MKDIR) -p $(TARGET_ARM)/src
972	$(TAR) xf $(OPENSSL_TGZ_SOURCE) -C $(TARGET_ARM)/src
973	$(CD) $(TARGET_ARM)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM_ENV) \
974	  ./Configure $(TARGET_ARM_OPENSSL_CONFIG_TARGET) \
975	    --prefix=$(shell pwd)/$(TARGET_ARM) \
976	    --openssldir=$(shell pwd)/$(TARGET_ARM)/lib/ssl \
977	    $(TARGET_ARM_OPENSSL_CONFIG)
978
979$(TARGET_ARM_V7A)/src/$(OPENSSL_DIR): $(OPENSSL_TGZ_SOURCE) $(TOOLCHAIN_ARM_V7A)
980	-$(MKDIR) -p $(TARGET_ARM_V7A)/src
981	$(TAR) xf $(OPENSSL_TGZ_SOURCE) -C $(TARGET_ARM_V7A)/src
982	$(CD) $(TARGET_ARM_V7A)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM_V7A_ENV) \
983	  ./Configure $(TARGET_ARM_V7A_OPENSSL_CONFIG_TARGET) \
984	    --prefix=$(shell pwd)/$(TARGET_ARM_V7A) \
985	    --openssldir=$(shell pwd)/$(TARGET_ARM_V7A)/lib/ssl \
986	    $(TARGET_ARM_V7A_OPENSSL_CONFIG)
987
988$(TARGET_ARM_V7A_HARD)/src/$(OPENSSL_DIR): $(OPENSSL_TGZ_SOURCE) $(TOOLCHAIN_ARM_V7A_HARD)
989	-$(MKDIR) -p $(TARGET_ARM_V7A_HARD)/src
990	$(TAR) xf $(OPENSSL_TGZ_SOURCE) -C $(TARGET_ARM_V7A_HARD)/src
991	$(CD) $(TARGET_ARM_V7A_HARD)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM_V7A_HARD_ENV) \
992	  ./Configure $(TARGET_ARM_V7A_HARD_OPENSSL_CONFIG_TARGET) \
993	    --prefix=$(shell pwd)/$(TARGET_ARM_V7A_HARD) \
994	    --openssldir=$(shell pwd)/$(TARGET_ARM_V7A_HARD)/lib/ssl \
995	    $(TARGET_ARM_V7A_HARD_OPENSSL_CONFIG)
996
997$(TARGET_ARM64_V8A)/src/$(OPENSSL_DIR): $(OPENSSL_TGZ_SOURCE) $(TOOLCHAIN_ARM64_V8A)
998	-$(MKDIR) -p $(TARGET_ARM64_V8A)/src
999	$(TAR) xf $(OPENSSL_TGZ_SOURCE) -C $(TARGET_ARM64_V8A)/src
1000	$(CD) $(TARGET_ARM64_V8A)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM64_V8A_ENV) \
1001	  ./Configure $(TARGET_ARM64_V8A_OPENSSL_CONFIG_TARGET) \
1002	    --prefix=$(shell pwd)/$(TARGET_ARM64_V8A) \
1003	    --openssldir=$(shell pwd)/$(TARGET_ARM64_V8A)/lib/ssl \
1004	    $(TARGET_ARM64_V8A_OPENSSL_CONFIG)
1005
1006$(TARGET_MIPS)/src/$(OPENSSL_DIR): $(OPENSSL_TGZ_SOURCE) $(TOOLCHAIN_MIPS)
1007	-$(MKDIR) -p $(TARGET_MIPS)/src
1008	$(TAR) xf $(OPENSSL_TGZ_SOURCE) -C $(TARGET_MIPS)/src
1009	$(CD) $(TARGET_MIPS)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_MIPS_ENV) \
1010	  ./Configure $(TARGET_MIPS_OPENSSL_CONFIG_TARGET) \
1011	    --prefix=$(shell pwd)/$(TARGET_MIPS) \
1012	    --openssldir=$(shell pwd)/$(TARGET_MIPS)/lib/ssl \
1013	    $(TARGET_MIPS_OPENSSL_CONFIG)
1014
1015$(TARGET_MIPS64)/src/$(OPENSSL_DIR): $(OPENSSL_TGZ_SOURCE) $(TOOLCHAIN_MIPS64)
1016	-$(MKDIR) -p $(TARGET_MIPS64)/src
1017	$(TAR) xf $(OPENSSL_TGZ_SOURCE) -C $(TARGET_MIPS64)/src
1018	$(CD) $(TARGET_MIPS64)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_MIPS64_ENV) \
1019	  ./Configure $(TARGET_MIPS64_OPENSSL_CONFIG_TARGET) \
1020	    --prefix=$(shell pwd)/$(TARGET_MIPS64) \
1021	    --openssldir=$(shell pwd)/$(TARGET_MIPS64)/lib/ssl \
1022	    $(TARGET_MIPS64_OPENSSL_CONFIG)
1023
1024# Build/install library
1025
1026$(TARGET_X86)/lib/libssl.a: $(TARGET_X86)/src/$(OPENSSL_DIR)
1027	$(CD) $(TARGET_X86)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_X86_ENV) $(MAKE) depend
1028	$(CD) $(TARGET_X86)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_X86_ENV) $(MAKE) build_libs
1029	$(CD) $(TARGET_X86)/src/$(OPENSSL_DIR) && $(ECHO) '#!/bin/sh\n\nfalse\n' > apps/openssl
1030	$(CD) $(TARGET_X86)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_X86_ENV) $(MAKE) install_sw
1031
1032$(TARGET_X86_64)/lib/libssl.a: $(TARGET_X86_64)/src/$(OPENSSL_DIR)
1033	$(CD) $(TARGET_X86_64)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_X86_64_ENV) $(MAKE) depend
1034	$(CD) $(TARGET_X86_64)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_X86_64_ENV) $(MAKE) build_libs
1035	$(CD) $(TARGET_X86_64)/src/$(OPENSSL_DIR) && $(ECHO) '#!/bin/sh\n\nfalse\n' > apps/openssl
1036	$(CD) $(TARGET_X86_64)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_X86_64_ENV) $(MAKE) install_sw
1037
1038$(TARGET_ARM)/lib/libssl.a: $(TARGET_ARM)/src/$(OPENSSL_DIR)
1039	$(CD) $(TARGET_ARM)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM_ENV) $(MAKE) depend
1040	$(CD) $(TARGET_ARM)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM_ENV) $(MAKE) build_libs
1041	$(CD) $(TARGET_ARM)/src/$(OPENSSL_DIR) && $(ECHO) '#!/bin/sh\n\nfalse\n' > apps/openssl
1042	$(CD) $(TARGET_ARM)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM_ENV) $(MAKE) install_sw
1043
1044$(TARGET_ARM_V7A)/lib/libssl.a: $(TARGET_ARM_V7A)/src/$(OPENSSL_DIR)
1045	$(CD) $(TARGET_ARM_V7A)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM_V7A_ENV) $(MAKE) depend
1046	$(CD) $(TARGET_ARM_V7A)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM_V7A_ENV) $(MAKE) build_libs
1047	$(CD) $(TARGET_ARM_V7A)/src/$(OPENSSL_DIR) && $(ECHO) '#!/bin/sh\n\nfalse\n' > apps/openssl
1048	$(CD) $(TARGET_ARM_V7A)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM_V7A_ENV) $(MAKE) install_sw
1049
1050$(TARGET_ARM_V7A_HARD)/lib/libssl.a: $(TARGET_ARM_V7A_HARD)/src/$(OPENSSL_DIR)
1051	$(CD) $(TARGET_ARM_V7A_HARD)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM_V7A_HARD_ENV) $(MAKE) depend
1052	$(CD) $(TARGET_ARM_V7A_HARD)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM_V7A_HARD_ENV) $(MAKE) build_libs
1053	$(CD) $(TARGET_ARM_V7A_HARD)/src/$(OPENSSL_DIR) && $(ECHO) '#!/bin/sh\n\nfalse\n' > apps/openssl
1054	$(CD) $(TARGET_ARM_V7A_HARD)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM_V7A_HARD_ENV) $(MAKE) install_sw
1055
1056$(TARGET_ARM64_V8A)/lib/libssl.a: $(TARGET_ARM64_V8A)/src/$(OPENSSL_DIR)
1057	$(CD) $(TARGET_ARM64_V8A)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM64_V8A_ENV) $(MAKE) depend
1058	$(CD) $(TARGET_ARM64_V8A)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM64_V8A_ENV) $(MAKE) build_libs
1059	$(CD) $(TARGET_ARM64_V8A)/src/$(OPENSSL_DIR) && $(ECHO) '#!/bin/sh\n\nfalse\n' > apps/openssl
1060	$(CD) $(TARGET_ARM64_V8A)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM64_V8A_ENV) $(MAKE) install_sw
1061
1062$(TARGET_MIPS)/lib/libssl.a: $(TARGET_MIPS)/src/$(OPENSSL_DIR)
1063	$(CD) $(TARGET_MIPS)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_MIPS_ENV) $(MAKE) depend
1064	$(CD) $(TARGET_MIPS)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_MIPS_ENV) $(MAKE) build_libs
1065	$(CD) $(TARGET_MIPS)/src/$(OPENSSL_DIR) && $(ECHO) '#!/bin/sh\n\nfalse\n' > apps/openssl
1066	$(CD) $(TARGET_MIPS)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_MIPS_ENV) $(MAKE) install_sw
1067
1068$(TARGET_MIPS64)/lib/libssl.a: $(TARGET_MIPS64)/src/$(OPENSSL_DIR)
1069	$(CD) $(TARGET_MIPS64)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_MIPS64_ENV) $(MAKE) depend
1070	$(CD) $(TARGET_MIPS64)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_MIPS64_ENV) $(MAKE) build_libs
1071	$(CD) $(TARGET_MIPS64)/src/$(OPENSSL_DIR) && $(ECHO) '#!/bin/sh\n\nfalse\n' > apps/openssl
1072	$(CD) $(TARGET_MIPS64)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_MIPS64_ENV) $(MAKE) install_sw
1073
1074#
1075# Rules to build libwebsockets
1076#
1077
1078libwebsockets: \
1079 libwebsockets-x86 \
1080 libwebsockets-x86_64 \
1081 libwebsockets-armeabi \
1082 libwebsockets-armeabi-v7a \
1083 libwebsockets-armeabi-v7a-hard \
1084 libwebsockets-arm64-v8a \
1085 libwebsockets-mips \
1086 libwebsockets-mips64 \
1087
1088libwebsockets-x86: $(TARGET_X86)/lib/libwebsockets.a
1089libwebsockets-x86_64: $(TARGET_X86_64)/lib/libwebsockets.a
1090libwebsockets-armeabi: $(TARGET_ARM)/lib/libwebsockets.a
1091libwebsockets-armeabi-v7a: $(TARGET_ARM_V7A)/lib/libwebsockets.a
1092libwebsockets-armeabi-v7a-hard: $(TARGET_ARM_V7A_HARD)/lib/libwebsockets.a
1093libwebsockets-arm64-v8a: $(TARGET_ARM64_V8A)/lib/libwebsockets.a
1094libwebsockets-mips: $(TARGET_MIPS)/lib/libwebsockets.a
1095libwebsockets-mips64: $(TARGET_MIPS64)/lib/libwebsockets.a
1096
1097# Extracting/configuring sources
1098
1099$(TARGET_X86)/src/$(LIBWEBSOCKETS_DIR): $(LIBWEBSOCKETS_TGZ_SOURCE) $(TOOLCHAIN_X86) $(TARGET_X86)/lib/libssl.a $(TARGET_X86)/lib/libz.a
1100	-$(MKDIR) -p $(TARGET_X86)/src
1101	$(TAR) xf $(LIBWEBSOCKETS_TGZ_SOURCE) -C $(TARGET_X86)/src
1102	-$(MKDIR) -p $(TARGET_X86)/src/$(LIBWEBSOCKETS_DIR)/build
1103	$(CD) $(TARGET_X86)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_X86_ENV) \
1104	  $(CMAKE) $(TARGET_X86_LWS_OPTIONS) \
1105	    -DCMAKE_INSTALL_PREFIX=$(shell pwd)/$(TARGET_X86) \
1106	    -DLWS_OPENSSL_LIBRARIES="$(shell pwd)/$(TARGET_X86)/lib/libssl.a;$(shell pwd)/$(TARGET_X86)/lib/libcrypto.a" \
1107	    -DLWS_OPENSSL_INCLUDE_DIRS="$(shell pwd)/$(TARGET_X86)/include" \
1108	    ..
1109
1110$(TARGET_X86_64)/src/$(LIBWEBSOCKETS_DIR): $(LIBWEBSOCKETS_TGZ_SOURCE) $(TOOLCHAIN_X86_64) $(TARGET_X86_64)/lib/libssl.a $(TARGET_X86_64)/lib/libz.a
1111	-$(MKDIR) -p $(TARGET_X86_64)/src
1112	$(TAR) xf $(LIBWEBSOCKETS_TGZ_SOURCE) -C $(TARGET_X86_64)/src
1113	-$(MKDIR) -p $(TARGET_X86_64)/src/$(LIBWEBSOCKETS_DIR)/build
1114	$(CD) $(TARGET_X86_64)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_X86_64_ENV) \
1115	  $(CMAKE) $(TARGET_X86_64_LWS_OPTIONS) \
1116	    -DCMAKE_INSTALL_PREFIX=$(shell pwd)/$(TARGET_X86_64) \
1117	    -DLWS_OPENSSL_LIBRARIES="$(shell pwd)/$(TARGET_X86_64)/lib/libssl.a;$(shell pwd)/$(TARGET_X86_64)/lib/libcrypto.a" \
1118	    -DLWS_OPENSSL_INCLUDE_DIRS="$(shell pwd)/$(TARGET_X86_64)/include" \
1119	    ..
1120
1121$(TARGET_ARM)/src/$(LIBWEBSOCKETS_DIR): $(LIBWEBSOCKETS_TGZ_SOURCE) $(TOOLCHAIN_ARM) $(TARGET_ARM)/lib/libssl.a $(TARGET_ARM)/lib/libz.a
1122	-$(MKDIR) -p $(TARGET_ARM)/src
1123	$(TAR) xf $(LIBWEBSOCKETS_TGZ_SOURCE) -C $(TARGET_ARM)/src
1124	-$(MKDIR) -p $(TARGET_ARM)/src/$(LIBWEBSOCKETS_DIR)/build
1125	$(CD) $(TARGET_ARM)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_ARM_ENV) \
1126	  $(CMAKE) $(TARGET_ARM_LWS_OPTIONS) \
1127	    -DCMAKE_INSTALL_PREFIX=$(shell pwd)/$(TARGET_ARM) \
1128	    -DLWS_OPENSSL_LIBRARIES="$(shell pwd)/$(TARGET_ARM)/lib/libssl.a;$(shell pwd)/$(TARGET_ARM)/lib/libcrypto.a" \
1129	    -DLWS_OPENSSL_INCLUDE_DIRS="$(shell pwd)/$(TARGET_ARM)/include" \
1130	    ..
1131
1132$(TARGET_ARM_V7A)/src/$(LIBWEBSOCKETS_DIR): $(LIBWEBSOCKETS_TGZ_SOURCE) $(TOOLCHAIN_ARM_V7A) $(TARGET_ARM_V7A)/lib/libssl.a $(TARGET_ARM_V7A)/lib/libz.a
1133	-$(MKDIR) -p $(TARGET_ARM_V7A)/src
1134	$(TAR) xf $(LIBWEBSOCKETS_TGZ_SOURCE) -C $(TARGET_ARM_V7A)/src
1135	-$(MKDIR) -p $(TARGET_ARM_V7A)/src/$(LIBWEBSOCKETS_DIR)/build
1136	$(CD) $(TARGET_ARM_V7A)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_ARM_V7A_ENV) \
1137	  $(CMAKE) $(TARGET_ARM_V7A_LWS_OPTIONS) \
1138	    -DCMAKE_INSTALL_PREFIX=$(shell pwd)/$(TARGET_ARM_V7A) \
1139	    -DLWS_OPENSSL_LIBRARIES="$(shell pwd)/$(TARGET_ARM_V7A)/lib/libssl.a;$(shell pwd)/$(TARGET_ARM_V7A)/lib/libcrypto.a" \
1140	    -DLWS_OPENSSL_INCLUDE_DIRS="$(shell pwd)/$(TARGET_ARM_V7A)/include" \
1141	    ..
1142
1143$(TARGET_ARM_V7A_HARD)/src/$(LIBWEBSOCKETS_DIR): $(LIBWEBSOCKETS_TGZ_SOURCE) $(TOOLCHAIN_ARM_V7A_HARD) $(TARGET_ARM_V7A_HARD)/lib/libssl.a $(TARGET_ARM_V7A_HARD)/lib/libz.a
1144	-$(MKDIR) -p $(TARGET_ARM_V7A_HARD)/src
1145	$(TAR) xf $(LIBWEBSOCKETS_TGZ_SOURCE) -C $(TARGET_ARM_V7A_HARD)/src
1146	-$(MKDIR) -p $(TARGET_ARM_V7A_HARD)/src/$(LIBWEBSOCKETS_DIR)/build
1147	$(CD) $(TARGET_ARM_V7A_HARD)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_ARM_V7A_HARD_ENV) \
1148	  $(CMAKE) $(TARGET_ARM_V7A_HARD_LWS_OPTIONS) \
1149	    -DCMAKE_INSTALL_PREFIX=$(shell pwd)/$(TARGET_ARM_V7A_HARD) \
1150	    -DLWS_OPENSSL_LIBRARIES="$(shell pwd)/$(TARGET_ARM_V7A_HARD)/lib/libssl.a;$(shell pwd)/$(TARGET_ARM_V7A_HARD)/lib/libcrypto.a" \
1151	    -DLWS_OPENSSL_INCLUDE_DIRS="$(shell pwd)/$(TARGET_ARM_V7A_HARD)/include" \
1152	    ..
1153
1154$(TARGET_ARM64_V8A)/src/$(LIBWEBSOCKETS_DIR): $(LIBWEBSOCKETS_TGZ_SOURCE) $(TOOLCHAIN_ARM64_V8A) $(TARGET_ARM64_V8A)/lib/libssl.a $(TARGET_ARM64_V8A)/lib/libz.a
1155	-$(MKDIR) -p $(TARGET_ARM64_V8A)/src
1156	$(TAR) xf $(LIBWEBSOCKETS_TGZ_SOURCE) -C $(TARGET_ARM64_V8A)/src
1157	-$(MKDIR) -p $(TARGET_ARM64_V8A)/src/$(LIBWEBSOCKETS_DIR)/build
1158	$(CD) $(TARGET_ARM64_V8A)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_ARM64_V8A_ENV) \
1159	  $(CMAKE) $(TARGET_ARM64_V8A_LWS_OPTIONS) \
1160	    -DCMAKE_INSTALL_PREFIX=$(shell pwd)/$(TARGET_ARM64_V8A) \
1161	    -DLWS_OPENSSL_LIBRARIES="$(shell pwd)/$(TARGET_ARM64_V8A)/lib/libssl.a;$(shell pwd)/$(TARGET_ARM64_V8A)/lib/libcrypto.a" \
1162	    -DLWS_OPENSSL_INCLUDE_DIRS="$(shell pwd)/$(TARGET_ARM64_V8A)/include" \
1163	    ..
1164
1165$(TARGET_MIPS)/src/$(LIBWEBSOCKETS_DIR): $(LIBWEBSOCKETS_TGZ_SOURCE) $(TOOLCHAIN_MIPS) $(TARGET_MIPS)/lib/libssl.a $(TARGET_MIPS)/lib/libz.a
1166	-$(MKDIR) -p $(TARGET_MIPS)/src
1167	$(TAR) xf $(LIBWEBSOCKETS_TGZ_SOURCE) -C $(TARGET_MIPS)/src
1168	-$(MKDIR) -p $(TARGET_MIPS)/src/$(LIBWEBSOCKETS_DIR)/build
1169	$(CD) $(TARGET_MIPS)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_MIPS_ENV) \
1170	  $(CMAKE) $(TARGET_MIPS_LWS_OPTIONS) \
1171	    -DCMAKE_INSTALL_PREFIX=$(shell pwd)/$(TARGET_MIPS) \
1172	    -DLWS_OPENSSL_LIBRARIES="$(shell pwd)/$(TARGET_MIPS)/lib/libssl.a;$(shell pwd)/$(TARGET_MIPS)/lib/libcrypto.a" \
1173	    -DLWS_OPENSSL_INCLUDE_DIRS="$(shell pwd)/$(TARGET_MIPS)/include" \
1174	    ..
1175
1176$(TARGET_MIPS64)/src/$(LIBWEBSOCKETS_DIR): $(LIBWEBSOCKETS_TGZ_SOURCE) $(TOOLCHAIN_MIPS64) $(TARGET_MIPS64)/lib/libssl.a $(TARGET_MIPS64)/lib/libz.a
1177	-$(MKDIR) -p $(TARGET_MIPS64)/src
1178	$(TAR) xf $(LIBWEBSOCKETS_TGZ_SOURCE) -C $(TARGET_MIPS64)/src
1179	-$(MKDIR) -p $(TARGET_MIPS64)/src/$(LIBWEBSOCKETS_DIR)/build
1180	$(CD) $(TARGET_MIPS64)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_MIPS64_ENV) \
1181	  $(CMAKE) $(TARGET_MIPS64_LWS_OPTIONS) \
1182	    -DCMAKE_INSTALL_PREFIX=$(shell pwd)/$(TARGET_MIPS64) \
1183	    -DLWS_OPENSSL_LIBRARIES="$(shell pwd)/$(TARGET_MIPS64)/lib/libssl.a;$(shell pwd)/$(TARGET_MIPS64)/lib/libcrypto.a" \
1184	    -DLWS_OPENSSL_INCLUDE_DIRS="$(shell pwd)/$(TARGET_MIPS64)/include" \
1185	    ..
1186
1187# Build/install library
1188
1189$(TARGET_X86)/lib/libwebsockets.a: $(TARGET_X86)/src/$(LIBWEBSOCKETS_DIR)
1190	$(CD) $(TARGET_X86)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_X86_ENV) $(MAKE)
1191	$(CD) $(TARGET_X86)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_X86_ENV) $(MAKE) install
1192
1193$(TARGET_X86_64)/lib/libwebsockets.a: $(TARGET_X86_64)/src/$(LIBWEBSOCKETS_DIR)
1194	$(CD) $(TARGET_X86_64)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_X86_64_ENV) $(MAKE)
1195	$(CD) $(TARGET_X86_64)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_X86_64_ENV) $(MAKE) install
1196
1197$(TARGET_ARM)/lib/libwebsockets.a: $(TARGET_ARM)/src/$(LIBWEBSOCKETS_DIR)
1198	$(CD) $(TARGET_ARM)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_ARM_ENV) $(MAKE)
1199	$(CD) $(TARGET_ARM)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_ARM_ENV) $(MAKE) install
1200
1201$(TARGET_ARM_V7A)/lib/libwebsockets.a: $(TARGET_ARM_V7A)/src/$(LIBWEBSOCKETS_DIR)
1202	$(CD) $(TARGET_ARM_V7A)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_ARM_V7A_ENV) $(MAKE)
1203	$(CD) $(TARGET_ARM_V7A)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_ARM_V7A_ENV) $(MAKE) install
1204
1205$(TARGET_ARM_V7A_HARD)/lib/libwebsockets.a: $(TARGET_ARM_V7A_HARD)/src/$(LIBWEBSOCKETS_DIR)
1206	$(CD) $(TARGET_ARM_V7A_HARD)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_ARM_V7A_HARD_ENV) $(MAKE)
1207	$(CD) $(TARGET_ARM_V7A_HARD)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_ARM_V7A_HARD_ENV) $(MAKE) install
1208
1209$(TARGET_ARM64_V8A)/lib/libwebsockets.a: $(TARGET_ARM64_V8A)/src/$(LIBWEBSOCKETS_DIR)
1210	$(CD) $(TARGET_ARM64_V8A)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_ARM64_V8A_ENV) $(MAKE)
1211	$(CD) $(TARGET_ARM64_V8A)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_ARM64_V8A_ENV) $(MAKE) install
1212
1213$(TARGET_MIPS)/lib/libwebsockets.a: $(TARGET_MIPS)/src/$(LIBWEBSOCKETS_DIR)
1214	$(CD) $(TARGET_MIPS)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_MIPS_ENV) $(MAKE)
1215	$(CD) $(TARGET_MIPS)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_MIPS_ENV) $(MAKE) install
1216
1217$(TARGET_MIPS64)/lib/libwebsockets.a: $(TARGET_MIPS64)/src/$(LIBWEBSOCKETS_DIR)
1218	$(CD) $(TARGET_MIPS64)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_MIPS64_ENV) $(MAKE)
1219	$(CD) $(TARGET_MIPS64)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_MIPS64_ENV) $(MAKE) install
1220
1221#
1222# Some rules for housekeeping
1223#
1224
1225clean-ndk:
1226	$(NDK_ROOT)/ndk-build clean
1227
1228clean: clean-targets clean-toolchains
1229
1230dist-clean: clean clean-sources
1231
1232clean-targets: \
1233 clean-target-x86 \
1234 clean-target-x86_64 \
1235 clean-target-armeabi \
1236 clean-target-armeabi-v7a \
1237 clean-target-armeabi-v7a-hard \
1238 clean-target-arm64-v8a \
1239 clean-target-mips \
1240 clean-target-mips64
1241
1242clean-target-x86:
1243	-$(RM) -fr $(TARGET_X86)
1244
1245clean-target-x86_64:
1246	-$(RM) -fr $(TARGET_X86_64)
1247
1248clean-target-armeabi:
1249	-$(RM) -fr $(TARGET_ARM)
1250
1251clean-target-armeabi-v7a:
1252	-$(RM) -fr $(TARGET_ARM_V7A)
1253
1254clean-target-armeabi-v7a-hard:
1255	-$(RM) -fr $(TARGET_ARM_V7A_HARD)
1256
1257clean-target-arm64-v8a:
1258	-$(RM) -fr $(TARGET_ARM64_V8A)
1259
1260clean-target-mips:
1261	-$(RM) -fr $(TARGET_MIPS)
1262
1263clean-target-mips64:
1264	-$(RM) -fr $(TARGET_MIPS64)
1265
1266clean-sources: \
1267 clean-source-zlib \
1268 clean-source-openssl \
1269 clean-source-libwebsockets
1270
1271clean-source-zlib:
1272	-$(RM) $(ZLIB_TGZ_SOURCE)
1273
1274clean-source-openssl:
1275	-$(RM) $(OPENSSL_TGZ_SOURCE)
1276
1277clean-source-libwebsockets:
1278	-$(RM) $(LIBWEBSOCKETS_TGZ_SOURCE)
1279
1280clean-toolchains: \
1281 clean-toolchain-x86 \
1282 clean-toolchain-x86_64 \
1283 clean-toolchain-armeabi \
1284 clean-toolchain-armeabi-v7a \
1285 clean-toolchain-armeabi-v7a-hard \
1286 clean-toolchain-arm64-v8a \
1287 clean-toolchain-mips \
1288 clean-toolchain-mips64
1289	-$(RM) -fr toolchains
1290
1291clean-toolchain-x86:
1292	-$(RM) -fr $(TOOLCHAIN_X86)
1293
1294clean-toolchain-x86_64:
1295	-$(RM) -fr $(TOOLCHAIN_X86_64)
1296
1297clean-toolchain-armeabi:
1298	-$(RM) -fr $(TOOLCHAIN_ARM)
1299
1300clean-toolchain-armeabi-v7a:
1301	-$(RM) -fr $(TOOLCHAIN_ARM_V7A)
1302
1303clean-toolchain-armeabi-v7a-hard:
1304	-$(RM) -fr $(TOOLCHAIN_ARM_V7A_HARD)
1305
1306clean-toolchain-arm64-v8a:
1307	-$(RM) -fr $(TOOLCHAIN_ARM64_V8A)
1308
1309clean-toolchain-mips:
1310	-$(RM) -fr $(TOOLCHAIN_MIPS)
1311
1312clean-toolchain-mips64:
1313	-$(RM) -fr $(TOOLCHAIN_MIPS64)
1314
1315# 'make list-targets' prints a list of all targets.
1316# Thanks to: http://stackoverflow.com/questions/4219255/how-do-you-get-the-list-of-targets-in-a-makefile
1317# Modified to allow us to include files in this Makefile.
1318list-targets: MAKE_NO_INCLUDES := 1
1319export MAKE_NO_INCLUDES
1320list-targets:
1321	@$(MAKE) -s list-targets-no-includes
1322list-targets-no-includes:
1323	@$(MAKE) -pRrq -f $(lastword $(MAKEFILE_LIST)) : 2>/dev/null | $(AWK) -v RS= -F: '/^# File/,/^# Finished Make data base/ {if ($$1 !~ "^[#.]") {print $$1}}' | $(SORT) | $(EGREP) -v -e '^[^[:alnum:]]' -e '^$@$$'
1324
1325