2 # GNU Make makefile for building static libraries for use with the Android NDK
3 # Copyright (C) 2016, Alexander Bruines <alexander.bruines@gmail.com>
5 # This file is made available under the Creative Commons CC0 1.0
6 # Universal Public Domain Dedication.
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.
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
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.
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:
29 # openssl-1.0.2g.tar.gz
30 # libwebsockets.tar.gz
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...
36 # This makefile was made for use in Linux but you may be able to edit it
37 # and make it work under Windows.
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...
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.
47 # Include Application.mk but do not complain if it is not found
49 ifeq ($(MAKE_NO_INCLUDES),)
50 -include Application.mk
53 # Location of the NDK.
56 NDK_ROOT := /opt/Android/SDK/ndk-bundle
59 # Select the ABIs to compile for
61 NDK_APP_ABI = $(APP_ABI)
62 ifeq ($(NDK_APP_ABI),)
63 # Set to 'all' if APP_ABI is undefined
66 ifeq ($(NDK_APP_ABI),all)
67 # Translate 'all' to the individual targets
68 NDK_APP_ABI = armeabi armeabi-v7a arm64-v8a mips mips64 x86 x86_64
70 # Use the targets from APP_ABI
71 NDK_APP_ABI = $(APP_ABI)
74 # Select the Android platform to compile for
76 ifeq ($(APP_PLATFORM),)
77 # use a level that supports all specified ABIs if none was specified
78 APP_PLATFORM = android-21
81 NDK_MAKE_TOOLCHAIN := $(NDK_ROOT)/build/tools/make_standalone_toolchain.py
84 # The source packages we want/need
85 # Zlib and openssl should be defined in Application.mk, libwebsockets is
89 ifeq ($(ZLIB_VERSION),)
92 ifeq ($(OPENSSL_VERSION),)
93 OPENSSL_VERSION := 1.0.2g
96 ifeq ($(ZLIB_TGZ_SOURCE),)
97 ZLIB_TGZ_SOURCE := zlib-$(ZLIB_VERSION).tar.gz
99 ifeq ($(OPENSSL_TGZ_SOURCE),)
100 OPENSSL_TGZ_SOURCE := openssl-$(OPENSSL_VERSION).tar.gz
102 LIBWEBSOCKETS_TGZ_SOURCE := libwebsockets.tar.gz
104 # The names of the directories in the source tgz files
105 ZLIB_DIR := $(basename $(basename $(ZLIB_TGZ_SOURCE)))
106 OPENSSL_DIR := $(basename $(basename $(OPENSSL_TGZ_SOURCE)))
107 LIBWEBSOCKETS_DIR := $(basename $(basename $(LIBWEBSOCKETS_TGZ_SOURCE)))
109 # The URLs used to fetch the source tgz files
110 ZLIB_TGZ_URL := http://prdownloads.sourceforge.net/libpng/$(ZLIB_TGZ_SOURCE)
111 OPENSSL_TGZ_URL := https://openssl.org/source/$(OPENSSL_TGZ_SOURCE)
112 ifeq ($(LIBWEBSOCKETS_GIT_URL),)
113 LIBWEBSOCKETS_GIT_URL := https://github.com/warmcat/libwebsockets.git
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.
121 TARGET_X86_64 := x86_64
122 TARGET_ARM := armeabi
123 TARGET_ARM_V7A := armeabi-v7a
124 TARGET_ARM_V7A_HARD := armeabi-v7a-hard
125 TARGET_ARM64_V8A := arm64-v8a
127 TARGET_MIPS64 := mips64
129 # The Android NDK API version to build the libraries with.
131 # android-9 ... android-19 support arm mips and x86
132 # android-21 and higher also support arm64 mips64 and x86_64
134 # These should be set to the same value as APP_PLATFORM (Application.mk)
136 # http://developer.android.com/ndk/guides/stable_apis.html
138 # If you change these or APP_PLATFORM you must do a 'make clean'
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
144 TARGET_X86_NDK_API := $(subst android-,,$(APP_PLATFORM))
145 TARGET_X86_64_NDK_API := $(subst android-,,$(APP_PLATFORM))
146 TARGET_ARM_NDK_API := $(subst android-,,$(APP_PLATFORM))
147 TARGET_ARM_V7A_NDK_API := $(subst android-,,$(APP_PLATFORM))
148 TARGET_ARM_V7A_HARD_NDK_API := $(subst android-,,$(APP_PLATFORM))
149 TARGET_ARM64_V8A_NDK_API := $(subst android-,,$(APP_PLATFORM))
150 TARGET_MIPS_NDK_API := $(subst android-,,$(APP_PLATFORM))
151 TARGET_MIPS64_NDK_API := $(subst android-,,$(APP_PLATFORM))
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)
158 TARGET_X86_OPENSSL_CONFIG_TARGET := android-x86
159 TARGET_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
161 TARGET_X86_64_OPENSSL_CONFIG_TARGET := linux-x86_64
162 TARGET_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
164 TARGET_ARM_OPENSSL_CONFIG_TARGET := android
165 TARGET_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
167 TARGET_ARM_V7A_OPENSSL_CONFIG_TARGET := android-armv7
168 TARGET_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
170 TARGET_ARM_V7A_HARD_OPENSSL_CONFIG_TARGET := android-armv7
171 TARGET_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
173 TARGET_ARM64_V8A_OPENSSL_CONFIG_TARGET := android
174 TARGET_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
176 TARGET_MIPS_OPENSSL_CONFIG_TARGET := android-mips
177 TARGET_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
179 TARGET_MIPS64_OPENSSL_CONFIG_TARGET := android
180 TARGET_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
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
186 TARGET_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 \
196 -DLWS_USE_BUNDLED_ZLIB=OFF \
198 -DLWS_WITH_HTTP2=ON \
199 -DCMAKE_BUILD_TYPE=Release
201 TARGET_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 \
211 -DLWS_USE_BUNDLED_ZLIB=OFF \
213 -DLWS_WITH_HTTP2=ON \
214 -DCMAKE_BUILD_TYPE=Release
216 TARGET_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 \
226 -DLWS_USE_BUNDLED_ZLIB=OFF \
228 -DLWS_WITH_HTTP2=ON \
229 -DCMAKE_BUILD_TYPE=Release
231 TARGET_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 \
241 -DLWS_USE_BUNDLED_ZLIB=OFF \
243 -DLWS_WITH_HTTP2=ON \
244 -DCMAKE_BUILD_TYPE=Release
246 TARGET_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 \
256 -DLWS_USE_BUNDLED_ZLIB=OFF \
258 -DLWS_WITH_HTTP2=ON \
259 -DCMAKE_BUILD_TYPE=Release
261 TARGET_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 \
271 -DLWS_USE_BUNDLED_ZLIB=OFF \
273 -DLWS_WITH_HTTP2=ON \
274 -DCMAKE_BUILD_TYPE=Release
276 TARGET_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 \
286 -DLWS_USE_BUNDLED_ZLIB=OFF \
288 -DLWS_WITH_HTTP2=ON \
289 -DCMAKE_BUILD_TYPE=Release
291 TARGET_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 \
301 -DLWS_USE_BUNDLED_ZLIB=OFF \
303 -DLWS_WITH_HTTP2=ON \
304 -DCMAKE_BUILD_TYPE=Release
307 # Toolchain configuration
310 # The directory names for the different toolchains
311 TOOLCHAIN_X86 := toolchains/x86
312 TOOLCHAIN_X86_64 := toolchains/x86_64
313 TOOLCHAIN_ARM := toolchains/arm
314 TOOLCHAIN_ARM_V7A := toolchains/arm-v7a
315 TOOLCHAIN_ARM_V7A_HARD := toolchains/arm-v7a-hard
316 TOOLCHAIN_ARM64_V8A := toolchains/arm64-v8a
317 TOOLCHAIN_MIPS := toolchains/mips
318 TOOLCHAIN_MIPS64 := toolchains/mips64
320 # Use APP_STL to determine what STL to use.
322 ifeq ($(APP_STL),stlport_static)
323 TOOLCHAIN_STL := stlport
324 else ifeq ($(APP_STL),stlport_shared)
325 TOOLCHAIN_STL := stlport
326 else ifeq ($(APP_STL),gnustl_static)
327 TOOLCHAIN_STL := gnustl
328 else ifeq ($(APP_STL),gnustl_shared)
329 TOOLCHAIN_STL := gnustl
330 else ifeq ($(APP_STL),c++_static)
331 TOOLCHAIN_STL := libc++
332 else ifeq ($(APP_STL),c++_shared)
333 TOOLCHAIN_STL := libc++
336 # The settings to use for the individual toolchains:
338 TOOLCHAIN_X86_API := $(TARGET_X86_NDK_API)
339 TOOLCHAIN_X86_PREFIX := i686-linux-android
340 TOOLCHAIN_X86_FLAGS := -march=i686 -msse3 -mstackrealign -mfpmath=sse
341 TOOLCHAIN_X86_LINK :=
342 TOOLCHAIN_X86_PLATFORM_HEADERS := $(shell pwd)/$(TOOLCHAIN_X86)/sysroot/usr/include
343 TOOLCHAIN_X86_PLATFORM_LIBS := $(shell pwd)/$(TOOLCHAIN_X86)/sysroot/usr/lib
345 TOOLCHAIN_X86_64_API := $(TARGET_X86_64_NDK_API)
346 TOOLCHAIN_X86_64_PREFIX := x86_64-linux-android
347 TOOLCHAIN_X86_64_FLAGS :=
348 TOOLCHAIN_X86_64_LINK :=
349 TOOLCHAIN_X86_64_PLATFORM_HEADERS := $(shell pwd)/$(TOOLCHAIN_X86_64)/sysroot/usr/include
350 TOOLCHAIN_X86_64_PLATFORM_LIBS := $(shell pwd)/$(TOOLCHAIN_X86_64)/sysroot/usr/lib
352 TOOLCHAIN_ARM_API := $(TARGET_ARM_NDK_API)
353 TOOLCHAIN_ARM_PREFIX := arm-linux-androideabi
354 TOOLCHAIN_ARM_FLAGS := -mthumb
355 TOOLCHAIN_ARM_LINK :=
356 TOOLCHAIN_ARM_PLATFORM_HEADERS := $(shell pwd)/$(TOOLCHAIN_ARM)/sysroot/usr/include
357 TOOLCHAIN_ARM_PLATFORM_LIBS := $(shell pwd)/$(TOOLCHAIN_ARM)/sysroot/usr/lib
359 TOOLCHAIN_ARM_V7A_API := $(TARGET_ARM_V7A_NDK_API)
360 TOOLCHAIN_ARM_V7A_PREFIX := arm-linux-androideabi
361 TOOLCHAIN_ARM_V7A_FLAGS := -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16
362 TOOLCHAIN_ARM_V7A_LINK := -march=armv7-a -Wl,--fix-cortex-a8
363 TOOLCHAIN_ARM_V7A_PLATFORM_HEADERS := $(shell pwd)/$(TOOLCHAIN_ARM_V7A)/sysroot/usr/include
364 TOOLCHAIN_ARM_V7A_PLATFORM_LIBS := $(shell pwd)/$(TOOLCHAIN_ARM_V7A)/sysroot/usr/lib
366 TOOLCHAIN_ARM_V7A_HARD_API := $(TARGET_ARM_V7A_HARD_NDK_API)
367 TOOLCHAIN_ARM_V7A_HARD_PREFIX := arm-linux-androideabi
368 TOOLCHAIN_ARM_V7A_HARD_FLAGS := -march=armv7-a -mfpu=vfpv3-d16 -mhard-float -mfloat-abi=hard -D_NDK_MATH_NO_SOFTFP=1
369 TOOLCHAIN_ARM_V7A_HARD_LINK := -march=armv7-a -Wl,--fix-cortex-a8 -Wl,--no-warn-mismatch -lm_hard
370 TOOLCHAIN_ARM_V7A_HARD_PLATFORM_HEADERS := $(shell pwd)/$(TOOLCHAIN_ARM_V7A_HARD)/sysroot/usr/include
371 TOOLCHAIN_ARM_V7A_HARD_PLATFORM_LIBS := $(shell pwd)/$(TOOLCHAIN_ARM_V7A_HARD)/sysroot/usr/lib
373 TOOLCHAIN_ARM64_V8A_API := $(TARGET_ARM64_V8A_NDK_API)
374 TOOLCHAIN_ARM64_V8A_PREFIX := aarch64-linux-android
375 TOOLCHAIN_ARM64_V8A_FLAGS :=
376 TOOLCHAIN_ARM64_V8A_LINK :=
377 TOOLCHAIN_ARM64_V8A_PLATFORM_HEADERS := $(shell pwd)/$(TOOLCHAIN_ARM64_V8A)/sysroot/usr/include
378 TOOLCHAIN_ARM64_V8A_PLATFORM_LIBS := $(shell pwd)/$(TOOLCHAIN_ARM64_V8A)/sysroot/usr/lib
380 TOOLCHAIN_MIPS_API := $(TARGET_MIPS_NDK_API)
381 TOOLCHAIN_MIPS_PREFIX := mipsel-linux-android
382 TOOLCHAIN_MIPS_FLAGS :=
383 TOOLCHAIN_MIPS_LINK :=
384 TOOLCHAIN_MIPS_PLATFORM_HEADERS := $(shell pwd)/$(TOOLCHAIN_MIPS)/sysroot/usr/include
385 TOOLCHAIN_MIPS_PLATFORM_LIBS := $(shell pwd)/$(TOOLCHAIN_MIPS)/sysroot/usr/lib
387 TOOLCHAIN_MIPS64_API := $(TARGET_MIPS64_NDK_API)
388 TOOLCHAIN_MIPS64_PREFIX := mips64el-linux-android
389 TOOLCHAIN_MIPS64_FLAGS :=
390 TOOLCHAIN_MIPS64_LINK :=
391 TOOLCHAIN_MIPS64_PLATFORM_HEADERS := $(shell pwd)/$(TOOLCHAIN_MIPS64)/sysroot/usr/include
392 TOOLCHAIN_MIPS64_PLATFORM_LIBS := $(shell pwd)/$(TOOLCHAIN_MIPS64)/sysroot/usr/lib
394 # Environment variables to set while compiling for each ABI
396 TOOLCHAIN_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"
413 TOOLCHAIN_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"
430 TOOLCHAIN_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"
447 TOOLCHAIN_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"
464 TOOLCHAIN_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"
481 TOOLCHAIN_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"
498 TOOLCHAIN_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"
515 TOOLCHAIN_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"
533 # All the external tools we use in this Makefile
550 # End of user configurable options.
559 all-armeabi-v7a-hard \
569 toolchain-armeabi-v7a \
570 toolchain-armeabi-v7a-hard \
571 toolchain-arm64-v8a \
579 zlib-armeabi-v7a-hard \
587 openssl-armeabi-v7a \
588 openssl-armeabi-v7a-hard \
594 libwebsockets-x86_64 \
595 libwebsockets-armeabi \
596 libwebsockets-armeabi-v7a \
597 libwebsockets-armeabi-v7a-hard \
598 libwebsockets-arm64-v8a \
600 libwebsockets-mips64 \
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 \
612 clean-target-mips64 \
615 clean-source-openssl \
616 clean-source-libwebsockets \
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 \
628 # Default rule: build the libraries for all ABIs defined in NDK_APP_ABI then run ndk-build
630 $(NDK_ROOT)/ndk-build clean
631 $(NDK_ROOT)/ndk-build
633 # Libraries may also be build per ABI
634 all-x86: $(TARGET_X86)
635 all-x86_64: $(TARGET_X86_64)
636 all-armeabi: $(TARGET_ARM)
637 all-armeabi-v7a: $(TARGET_ARM_V7A)
638 all-armeabi-v7a-hard: $(TARGET_ARM_V7A_HARD)
639 all-arm64-v8a: $(TARGET_ARM64_V8A)
640 all-mips: $(TARGET_MIPS)
641 all-mips64: $(TARGET_MIPS64)
643 # Common rule all targets depend on
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
657 # A rule to ensure ../jniLibs points to ../libs
658 # (ndk-build creates ../libs but Gradle looks for ../jniLibs)
665 $(CD) .. && $(LN) -s libs jniLibs
668 # Some rules to download the sources
671 sources: $(ZLIB_TGZ_SOURCE) $(OPENSSL_TGZ_SOURCE) $(LIBWEBSOCKETS_TGZ_SOURCE)
674 $(WGET) -q $(ZLIB_TGZ_URL)
676 $(OPENSSL_TGZ_SOURCE):
677 $(WGET) -q $(OPENSSL_TGZ_URL)
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)
686 # Some rules to install the required toolchains
693 toolchain-armeabi-v7a \
694 toolchain-armeabi-v7a-hard \
695 toolchain-arm64-v8a \
699 toolchain-x86: $(TOOLCHAIN_X86)
700 toolchain-x86_64: $(TOOLCHAIN_X86_64)
701 toolchain-armeabi: $(TOOLCHAIN_ARM)
702 toolchain-armeabi-v7a: $(TOOLCHAIN_ARM_V7A)
703 toolchain-armeabi-v7a-hard: $(TOOLCHAIN_ARM_V7A_HARD)
704 toolchain-arm64-v8a: $(TOOLCHAIN_ARM64_V8A)
705 toolchain-mips: $(TOOLCHAIN_MIPS)
706 toolchain-mips64: $(TOOLCHAIN_MIPS64)
709 ifneq ($(TOOLCHAIN_STL),)
710 $(NDK_MAKE_TOOLCHAIN) \
711 --stl $(TOOLCHAIN_STL) \
712 --api $(TOOLCHAIN_X86_API) \
714 --install-dir $(shell pwd)/$(TOOLCHAIN_X86)
716 $(NDK_MAKE_TOOLCHAIN) \
717 --api $(TOOLCHAIN_X86_API) \
719 --install-dir $(shell pwd)/$(TOOLCHAIN_X86)
723 ifneq ($(TOOLCHAIN_STL),)
724 $(NDK_MAKE_TOOLCHAIN) \
725 --stl $(TOOLCHAIN_STL) \
726 --api $(TOOLCHAIN_X86_64_API) \
728 --install-dir $(shell pwd)/$(TOOLCHAIN_X86_64)
730 $(NDK_MAKE_TOOLCHAIN) \
731 --api $(TOOLCHAIN_X86_64_API) \
733 --install-dir $(shell pwd)/$(TOOLCHAIN_X86_64)
737 ifneq ($(TOOLCHAIN_STL),)
738 $(NDK_MAKE_TOOLCHAIN) \
739 --stl $(TOOLCHAIN_STL) \
740 --api $(TOOLCHAIN_ARM_API) \
742 --install-dir $(shell pwd)/$(TOOLCHAIN_ARM)
744 $(NDK_MAKE_TOOLCHAIN) \
745 --api $(TOOLCHAIN_ARM_API) \
747 --install-dir $(shell pwd)/$(TOOLCHAIN_ARM)
750 $(TOOLCHAIN_ARM_V7A):
751 ifneq ($(TOOLCHAIN_STL),)
752 $(NDK_MAKE_TOOLCHAIN) \
753 --stl $(TOOLCHAIN_STL) \
754 --api $(TOOLCHAIN_ARM_V7A_API) \
756 --install-dir $(shell pwd)/$(TOOLCHAIN_ARM_V7A)
758 $(NDK_MAKE_TOOLCHAIN) \
759 --api $(TOOLCHAIN_ARM_V7A_API) \
761 --install-dir $(shell pwd)/$(TOOLCHAIN_ARM_V7A)
764 $(TOOLCHAIN_ARM_V7A_HARD):
765 ifneq ($(TOOLCHAIN_STL),)
766 $(NDK_MAKE_TOOLCHAIN) \
767 --stl $(TOOLCHAIN_STL) \
768 --api $(TOOLCHAIN_ARM_V7A_HARD_API) \
770 --install-dir $(shell pwd)/$(TOOLCHAIN_ARM_V7A_HARD)
772 $(NDK_MAKE_TOOLCHAIN) \
773 --api $(TOOLCHAIN_ARM_V7A_HARD_API) \
775 --install-dir $(shell pwd)/$(TOOLCHAIN_ARM_V7A_HARD)
778 $(TOOLCHAIN_ARM64_V8A):
779 ifneq ($(TOOLCHAIN_STL),)
780 $(NDK_MAKE_TOOLCHAIN) \
781 --stl $(TOOLCHAIN_STL) \
782 --api $(TOOLCHAIN_ARM64_V8A_API) \
784 --install-dir $(shell pwd)/$(TOOLCHAIN_ARM64_V8A)
786 $(NDK_MAKE_TOOLCHAIN) \
787 --api $(TOOLCHAIN_ARM64_V8A_API) \
789 --install-dir $(shell pwd)/$(TOOLCHAIN_ARM64_V8A)
793 ifneq ($(TOOLCHAIN_STL),)
794 $(NDK_MAKE_TOOLCHAIN) \
795 --stl $(TOOLCHAIN_STL) \
796 --api $(TOOLCHAIN_MIPS_API) \
798 --install-dir $(shell pwd)/$(TOOLCHAIN_MIPS)
800 $(NDK_MAKE_TOOLCHAIN) \
801 --api $(TOOLCHAIN_MIPS_API) \
803 --install-dir $(shell pwd)/$(TOOLCHAIN_MIPS)
807 ifneq ($(TOOLCHAIN_STL),)
808 $(NDK_MAKE_TOOLCHAIN) \
809 --stl $(TOOLCHAIN_STL) \
810 --api $(TOOLCHAIN_MIPS64_API) \
812 --install-dir $(shell pwd)/$(TOOLCHAIN_MIPS64)
814 $(NDK_MAKE_TOOLCHAIN) \
815 --api $(TOOLCHAIN_MIPS64_API) \
817 --install-dir $(shell pwd)/$(TOOLCHAIN_MIPS64)
821 # Rules to build zlib
829 zlib-armeabi-v7a-hard \
834 zlib-x86: $(TARGET_X86)/lib/libz.a
835 zlib-x86_64: $(TARGET_X86_64)/lib/libz.a
836 zlib-armeabi: $(TARGET_ARM)/lib/libz.a
837 zlib-armeabi-v7a: $(TARGET_ARM_V7A)/lib/libz.a
838 zlib-armeabi-v7a-hard: $(TARGET_ARM_V7A_HARD)/lib/libz.a
839 zlib-arm64-v8a: $(TARGET_ARM64_V8A)/lib/libz.a
840 zlib-mips: $(TARGET_MIPS)/lib/libz.a
841 zlib-mips64: $(TARGET_MIPS64)/lib/libz.a
843 # Extracting/configuring sources
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)
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)
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)
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)
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)
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)
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)
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)
893 # Build/install library
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
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
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
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
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
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
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
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
928 # Rules to build OpenSSL
935 openssl-armeabi-v7a \
936 openssl-armeabi-v7a-hard \
941 openssl-x86: $(TARGET_X86)/lib/libssl.a
942 openssl-x86_64: $(TARGET_X86_64)/lib/libssl.a
943 openssl-armeabi: $(TARGET_ARM)/lib/libssl.a
944 openssl-armeabi-v7a: $(TARGET_ARM_V7A)/lib/libssl.a
945 openssl-armeabi-v7a-hard: $(TARGET_ARM_V7A_HARD)/lib/libssl.a
946 openssl-arm64-v8a: $(TARGET_ARM64_V8A)/lib/libssl.a
947 openssl-mips: $(TARGET_MIPS)/lib/libssl.a
948 openssl-mips64: $(TARGET_MIPS64)/lib/libssl.a
950 # Extracting/configuring sources
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)
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)
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)
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)
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)
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)
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)
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)
1024 # Build/install library
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
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
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
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
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
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
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
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
1075 # Rules to build libwebsockets
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 \
1088 libwebsockets-x86: $(TARGET_X86)/lib/libwebsockets.a
1089 libwebsockets-x86_64: $(TARGET_X86_64)/lib/libwebsockets.a
1090 libwebsockets-armeabi: $(TARGET_ARM)/lib/libwebsockets.a
1091 libwebsockets-armeabi-v7a: $(TARGET_ARM_V7A)/lib/libwebsockets.a
1092 libwebsockets-armeabi-v7a-hard: $(TARGET_ARM_V7A_HARD)/lib/libwebsockets.a
1093 libwebsockets-arm64-v8a: $(TARGET_ARM64_V8A)/lib/libwebsockets.a
1094 libwebsockets-mips: $(TARGET_MIPS)/lib/libwebsockets.a
1095 libwebsockets-mips64: $(TARGET_MIPS64)/lib/libwebsockets.a
1097 # Extracting/configuring sources
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" \
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" \
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" \
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" \
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" \
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" \
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" \
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" \
1187 # Build/install library
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
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
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
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
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
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
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
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
1222 # Some rules for housekeeping
1226 $(NDK_ROOT)/ndk-build clean
1228 clean: clean-targets clean-toolchains
1230 dist-clean: clean clean-sources
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 \
1243 -$(RM) -fr $(TARGET_X86)
1245 clean-target-x86_64:
1246 -$(RM) -fr $(TARGET_X86_64)
1248 clean-target-armeabi:
1249 -$(RM) -fr $(TARGET_ARM)
1251 clean-target-armeabi-v7a:
1252 -$(RM) -fr $(TARGET_ARM_V7A)
1254 clean-target-armeabi-v7a-hard:
1255 -$(RM) -fr $(TARGET_ARM_V7A_HARD)
1257 clean-target-arm64-v8a:
1258 -$(RM) -fr $(TARGET_ARM64_V8A)
1261 -$(RM) -fr $(TARGET_MIPS)
1263 clean-target-mips64:
1264 -$(RM) -fr $(TARGET_MIPS64)
1268 clean-source-openssl \
1269 clean-source-libwebsockets
1272 -$(RM) $(ZLIB_TGZ_SOURCE)
1274 clean-source-openssl:
1275 -$(RM) $(OPENSSL_TGZ_SOURCE)
1277 clean-source-libwebsockets:
1278 -$(RM) $(LIBWEBSOCKETS_TGZ_SOURCE)
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
1291 clean-toolchain-x86:
1292 -$(RM) -fr $(TOOLCHAIN_X86)
1294 clean-toolchain-x86_64:
1295 -$(RM) -fr $(TOOLCHAIN_X86_64)
1297 clean-toolchain-armeabi:
1298 -$(RM) -fr $(TOOLCHAIN_ARM)
1300 clean-toolchain-armeabi-v7a:
1301 -$(RM) -fr $(TOOLCHAIN_ARM_V7A)
1303 clean-toolchain-armeabi-v7a-hard:
1304 -$(RM) -fr $(TOOLCHAIN_ARM_V7A_HARD)
1306 clean-toolchain-arm64-v8a:
1307 -$(RM) -fr $(TOOLCHAIN_ARM64_V8A)
1309 clean-toolchain-mips:
1310 -$(RM) -fr $(TOOLCHAIN_MIPS)
1312 clean-toolchain-mips64:
1313 -$(RM) -fr $(TOOLCHAIN_MIPS64)
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.
1318 list-targets: MAKE_NO_INCLUDES := 1
1319 export MAKE_NO_INCLUDES
1321 @$(MAKE) -s list-targets-no-includes
1322 list-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 '^$@$$'