blob: 14816de1563ead3462befaca17f4475a6f9be204 [file] [log] [blame]
#
# GNU Make makefile for building static libraries for use with the Android NDK
# Copyright (C) 2016, Alexander Bruines <alexander.bruines@gmail.com>
#
# This file is made available under the Creative Commons CC0 1.0
# Universal Public Domain Dedication.
#
# The person who associated a work with this deed has dedicated
# the work to the public domain by waiving all of his or her rights
# to the work worldwide under copyright law, including all related
# and neighboring rights, to the extent allowed by law. You can copy,
# modify, distribute and perform the work, even for commercial purposes,
# all without asking permission.
#
# The test apps are intended to be adapted for use in your code, which
# may be proprietary. So unlike the library itself, they are licensed
# Public Domain.
#
#
# This makefile is fully intergrated with this Android Studio project and
# it will be called automaticaly when you build the project with Gradle.
#
# The source packages for the libraries will be automaticaly downloaded.
# Alternativly you can provide your own sources by placing the following
# files in the 'jni' directory:
#
# zlib-1.2.8.tar.gz
# openssl-1.0.2g.tar.gz
# libwebsockets.tar.gz
#
# This makefile was tested with the latest NDK/SDK and Android Studio at the
# time of this writing. As these software packages evolve changes to this
# makefile may be needed or it may become obselete...
#
# This makefile was made for use in Linux but you may be able to edit it
# and make it work under Windows.
#
# At least on Debian, building openssl requires package xutils-dev
# for makedepend. Ofcourse the standard development packages must also be
# installed, but xutils-dev is not that obvious in this case...
#
# Makedepend will most likely print a lot of warnings during the 'make depend'
# stage of building openssl. In this case these warnings can be safely ignored.
#
# Include Application.mk but do not complain if it is not found
#
ifeq ($(MAKE_NO_INCLUDES),)
-include Application.mk
endif
# Location of the NDK.
#
ifeq ($(NDK_ROOT),)
NDK_ROOT := /opt/Android/SDK/ndk-bundle
endif
# Select the ABIs to compile for
#
NDK_APP_ABI = $(APP_ABI)
ifeq ($(NDK_APP_ABI),)
# Set to 'all' if APP_ABI is undefined
NDK_APP_ABI = all
endif
ifeq ($(NDK_APP_ABI),all)
# Translate 'all' to the individual targets
NDK_APP_ABI = armeabi armeabi-v7a arm64-v8a mips mips64 x86 x86_64
else
# Use the targets from APP_ABI
NDK_APP_ABI = $(APP_ABI)
endif
# Select the Android platform to compile for
#
ifeq ($(APP_PLATFORM),)
# use a level that supports all specified ABIs if none was specified
APP_PLATFORM = android-21
endif
NDK_MAKE_TOOLCHAIN := $(NDK_ROOT)/build/tools/make_standalone_toolchain.py
#
# The source packages we want/need
# Zlib and openssl should be defined in Application.mk, libwebsockets is
# cloned from github
#
ifeq ($(ZLIB_VERSION),)
ZLIB_VERSION := 1.2.8
endif
ifeq ($(OPENSSL_VERSION),)
OPENSSL_VERSION := 1.0.2g
endif
ifeq ($(ZLIB_TGZ_SOURCE),)
ZLIB_TGZ_SOURCE := zlib-$(ZLIB_VERSION).tar.gz
endif
ifeq ($(OPENSSL_TGZ_SOURCE),)
OPENSSL_TGZ_SOURCE := openssl-$(OPENSSL_VERSION).tar.gz
endif
LIBWEBSOCKETS_TGZ_SOURCE := libwebsockets.tar.gz
# The names of the directories in the source tgz files
ZLIB_DIR := $(basename $(basename $(ZLIB_TGZ_SOURCE)))
OPENSSL_DIR := $(basename $(basename $(OPENSSL_TGZ_SOURCE)))
LIBWEBSOCKETS_DIR := $(basename $(basename $(LIBWEBSOCKETS_TGZ_SOURCE)))
# The URLs used to fetch the source tgz files
ZLIB_TGZ_URL := http://prdownloads.sourceforge.net/libpng/$(ZLIB_TGZ_SOURCE)
OPENSSL_TGZ_URL := https://openssl.org/source/$(OPENSSL_TGZ_SOURCE)
ifeq ($(LIBWEBSOCKETS_GIT_URL),)
LIBWEBSOCKETS_GIT_URL := https://github.com/warmcat/libwebsockets.git
endif
# These values are the same as the values for $TARGET_ARCH_ABI in Android.mk
# This way 'make $TARGET_ARCH_ABI' builds libraries for that ABI.
# This is also the name for the directory where the libraries are installed to.
#
TARGET_X86 := x86
TARGET_X86_64 := x86_64
TARGET_ARM := armeabi
TARGET_ARM_V7A := armeabi-v7a
TARGET_ARM_V7A_HARD := armeabi-v7a-hard
TARGET_ARM64_V8A := arm64-v8a
TARGET_MIPS := mips
TARGET_MIPS64 := mips64
# The Android NDK API version to build the libraries with.
#
# android-9 ... android-19 support arm mips and x86
# android-21 and higher also support arm64 mips64 and x86_64
#
# These should be set to the same value as APP_PLATFORM (Application.mk)
#
# http://developer.android.com/ndk/guides/stable_apis.html
#
# If you change these or APP_PLATFORM you must do a 'make clean'
#
# Note:
# libraries compiled for android-21 and upwards are incompatible with devices below that version!
# http://stackoverflow.com/questions/28740315/android-ndk-getting-java-lang-unsatisfiedlinkerror-dlopen-failed-cannot-loca
#
TARGET_X86_NDK_API := $(subst android-,,$(APP_PLATFORM))
TARGET_X86_64_NDK_API := $(subst android-,,$(APP_PLATFORM))
TARGET_ARM_NDK_API := $(subst android-,,$(APP_PLATFORM))
TARGET_ARM_V7A_NDK_API := $(subst android-,,$(APP_PLATFORM))
TARGET_ARM_V7A_HARD_NDK_API := $(subst android-,,$(APP_PLATFORM))
TARGET_ARM64_V8A_NDK_API := $(subst android-,,$(APP_PLATFORM))
TARGET_MIPS_NDK_API := $(subst android-,,$(APP_PLATFORM))
TARGET_MIPS64_NDK_API := $(subst android-,,$(APP_PLATFORM))
# The configure arguments to pass to the OpenSSL Configure script
# (--prefix and --openssldir are added automaticaly).
# (note: use no-asm on x86 and x86_64 to generate fully position independent code)
#
# x86
TARGET_X86_OPENSSL_CONFIG_TARGET := android-x86
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
# x86_64
TARGET_X86_64_OPENSSL_CONFIG_TARGET := linux-x86_64
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
# armeabi
TARGET_ARM_OPENSSL_CONFIG_TARGET := android
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
# armeabi-v7a
TARGET_ARM_V7A_OPENSSL_CONFIG_TARGET := android-armv7
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
# armeabi-v7a-hard
TARGET_ARM_V7A_HARD_OPENSSL_CONFIG_TARGET := android-armv7
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
# arm64-v8a
TARGET_ARM64_V8A_OPENSSL_CONFIG_TARGET := android
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
# mips
TARGET_MIPS_OPENSSL_CONFIG_TARGET := android-mips
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
# mips64
TARGET_MIPS64_OPENSSL_CONFIG_TARGET := android
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
# The cmake configuration options for libwebsockets per target ABI,
# --prefix and openssl library/header paths are set automaticaly and
# the location of zlib should be picked up by CMake
# x86
TARGET_X86_LWS_OPTIONS = \
-DCMAKE_C_COMPILER=$(shell pwd)/$(TOOLCHAIN_X86)/bin/$(TOOLCHAIN_X86_PREFIX)-gcc \
-DCMAKE_AR=$(shell pwd)/$(TOOLCHAIN_X86)/bin/$(TOOLCHAIN_X86_PREFIX)-ar \
-DCMAKE_RANLIB=$(shell pwd)/$(TOOLCHAIN_X86)/bin/$(TOOLCHAIN_X86_PREFIX)-ranlib \
-DCMAKE_C_FLAGS="$$CFLAGS" \
-DLWS_WITH_SHARED=OFF \
-DLWS_WITH_STATIC=ON \
-DLWS_WITHOUT_DAEMONIZE=ON \
-DLWS_WITHOUT_TESTAPPS=ON \
-DLWS_IPV6=OFF \
-DLWS_USE_BUNDLED_ZLIB=OFF \
-DLWS_WITH_SSL=ON \
-DLWS_WITH_HTTP2=ON \
-DCMAKE_BUILD_TYPE=Release
# x86_64
TARGET_X86_64_LWS_OPTIONS = \
-DCMAKE_C_COMPILER=$(shell pwd)/$(TOOLCHAIN_X86_64)/bin/$(TOOLCHAIN_X86_64_PREFIX)-gcc \
-DCMAKE_AR=$(shell pwd)/$(TOOLCHAIN_X86_64)/bin/$(TOOLCHAIN_X86_64_PREFIX)-ar \
-DCMAKE_RANLIB=$(shell pwd)/$(TOOLCHAIN_X86_64)/bin/$(TOOLCHAIN_X86_64_PREFIX)-ranlib \
-DCMAKE_C_FLAGS="$$CFLAGS" \
-DLWS_WITH_SHARED=OFF \
-DLWS_WITH_STATIC=ON \
-DLWS_WITHOUT_DAEMONIZE=ON \
-DLWS_WITHOUT_TESTAPPS=ON \
-DLWS_IPV6=OFF \
-DLWS_USE_BUNDLED_ZLIB=OFF \
-DLWS_WITH_SSL=ON \
-DLWS_WITH_HTTP2=ON \
-DCMAKE_BUILD_TYPE=Release
# armeabi
TARGET_ARM_LWS_OPTIONS = \
-DCMAKE_C_COMPILER=$(shell pwd)/$(TOOLCHAIN_ARM)/bin/$(TOOLCHAIN_ARM_PREFIX)-gcc \
-DCMAKE_AR=$(shell pwd)/$(TOOLCHAIN_ARM)/bin/$(TOOLCHAIN_ARM_PREFIX)-ar \
-DCMAKE_RANLIB=$(shell pwd)/$(TOOLCHAIN_ARM)/bin/$(TOOLCHAIN_ARM_PREFIX)-ranlib \
-DCMAKE_C_FLAGS="$$CFLAGS" \
-DLWS_WITH_SHARED=OFF \
-DLWS_WITH_STATIC=ON \
-DLWS_WITHOUT_DAEMONIZE=ON \
-DLWS_WITHOUT_TESTAPPS=ON \
-DLWS_IPV6=OFF \
-DLWS_USE_BUNDLED_ZLIB=OFF \
-DLWS_WITH_SSL=ON \
-DLWS_WITH_HTTP2=ON \
-DCMAKE_BUILD_TYPE=Release
# armeabi-v7a
TARGET_ARM_V7A_LWS_OPTIONS = \
-DCMAKE_C_COMPILER=$(shell pwd)/$(TOOLCHAIN_ARM_V7A)/bin/$(TOOLCHAIN_ARM_V7A_PREFIX)-gcc \
-DCMAKE_AR=$(shell pwd)/$(TOOLCHAIN_ARM_V7A)/bin/$(TOOLCHAIN_ARM_V7A_PREFIX)-ar \
-DCMAKE_RANLIB=$(shell pwd)/$(TOOLCHAIN_ARM_V7A)/bin/$(TOOLCHAIN_ARM_V7A_PREFIX)-ranlib \
-DCMAKE_C_FLAGS="$$CFLAGS" \
-DLWS_WITH_SHARED=OFF \
-DLWS_WITH_STATIC=ON \
-DLWS_WITHOUT_DAEMONIZE=ON \
-DLWS_WITHOUT_TESTAPPS=ON \
-DLWS_IPV6=OFF \
-DLWS_USE_BUNDLED_ZLIB=OFF \
-DLWS_WITH_SSL=ON \
-DLWS_WITH_HTTP2=ON \
-DCMAKE_BUILD_TYPE=Release
# armeabi-v7a-hard
TARGET_ARM_V7A_HARD_LWS_OPTIONS = \
-DCMAKE_C_COMPILER=$(shell pwd)/$(TOOLCHAIN_ARM_V7A_HARD)/bin/$(TOOLCHAIN_ARM_V7A_HARD_PREFIX)-gcc \
-DCMAKE_AR=$(shell pwd)/$(TOOLCHAIN_ARM_V7A_HARD)/bin/$(TOOLCHAIN_ARM_V7A_HARD_PREFIX)-ar \
-DCMAKE_RANLIB=$(shell pwd)/$(TOOLCHAIN_ARM_V7A_HARD)/bin/$(TOOLCHAIN_ARM_V7A_HARD_PREFIX)-ranlib \
-DCMAKE_C_FLAGS="$$CFLAGS" \
-DLWS_WITH_SHARED=OFF \
-DLWS_WITH_STATIC=ON \
-DLWS_WITHOUT_DAEMONIZE=ON \
-DLWS_WITHOUT_TESTAPPS=ON \
-DLWS_IPV6=OFF \
-DLWS_USE_BUNDLED_ZLIB=OFF \
-DLWS_WITH_SSL=ON \
-DLWS_WITH_HTTP2=ON \
-DCMAKE_BUILD_TYPE=Release
# arm64-v8a
TARGET_ARM64_V8A_LWS_OPTIONS = \
-DCMAKE_C_COMPILER=$(shell pwd)/$(TOOLCHAIN_ARM64_V8A)/bin/$(TOOLCHAIN_ARM64_V8A_PREFIX)-gcc \
-DCMAKE_AR=$(shell pwd)/$(TOOLCHAIN_ARM64_V8A)/bin/$(TOOLCHAIN_ARM64_V8A_PREFIX)-ar \
-DCMAKE_RANLIB=$(shell pwd)/$(TOOLCHAIN_ARM64_V8A)/bin/$(TOOLCHAIN_ARM64_V8A_PREFIX)-ranlib \
-DCMAKE_C_FLAGS="$$CFLAGS" \
-DLWS_WITH_SHARED=OFF \
-DLWS_WITH_STATIC=ON \
-DLWS_WITHOUT_DAEMONIZE=ON \
-DLWS_WITHOUT_TESTAPPS=ON \
-DLWS_IPV6=OFF \
-DLWS_USE_BUNDLED_ZLIB=OFF \
-DLWS_WITH_SSL=ON \
-DLWS_WITH_HTTP2=ON \
-DCMAKE_BUILD_TYPE=Release
# mips
TARGET_MIPS_LWS_OPTIONS = \
-DCMAKE_C_COMPILER=$(shell pwd)/$(TOOLCHAIN_MIPS)/bin/$(TOOLCHAIN_MIPS_PREFIX)-gcc \
-DCMAKE_AR=$(shell pwd)/$(TOOLCHAIN_MIPS)/bin/$(TOOLCHAIN_MIPS_PREFIX)-ar \
-DCMAKE_RANLIB=$(shell pwd)/$(TOOLCHAIN_MIPS)/bin/$(TOOLCHAIN_MIPS_PREFIX)-ranlib \
-DCMAKE_C_FLAGS="$$CFLAGS" \
-DLWS_WITH_SHARED=OFF \
-DLWS_WITH_STATIC=ON \
-DLWS_WITHOUT_DAEMONIZE=ON \
-DLWS_WITHOUT_TESTAPPS=ON \
-DLWS_IPV6=OFF \
-DLWS_USE_BUNDLED_ZLIB=OFF \
-DLWS_WITH_SSL=ON \
-DLWS_WITH_HTTP2=ON \
-DCMAKE_BUILD_TYPE=Release
# mips64
TARGET_MIPS64_LWS_OPTIONS = \
-DCMAKE_C_COMPILER=$(shell pwd)/$(TOOLCHAIN_MIPS64)/bin/$(TOOLCHAIN_MIPS64_PREFIX)-gcc \
-DCMAKE_AR=$(shell pwd)/$(TOOLCHAIN_MIPS64)/bin/$(TOOLCHAIN_MIPS64_PREFIX)-ar \
-DCMAKE_RANLIB=$(shell pwd)/$(TOOLCHAIN_MIPS64)/bin/$(TOOLCHAIN_MIPS64_PREFIX)-ranlib \
-DCMAKE_C_FLAGS="$$CFLAGS" \
-DLWS_WITH_SHARED=OFF \
-DLWS_WITH_STATIC=ON \
-DLWS_WITHOUT_DAEMONIZE=ON \
-DLWS_WITHOUT_TESTAPPS=ON \
-DLWS_IPV6=OFF \
-DLWS_USE_BUNDLED_ZLIB=OFF \
-DLWS_WITH_SSL=ON \
-DLWS_WITH_HTTP2=ON \
-DCMAKE_BUILD_TYPE=Release
#
# Toolchain configuration
#
# The directory names for the different toolchains
TOOLCHAIN_X86 := toolchains/x86
TOOLCHAIN_X86_64 := toolchains/x86_64
TOOLCHAIN_ARM := toolchains/arm
TOOLCHAIN_ARM_V7A := toolchains/arm-v7a
TOOLCHAIN_ARM_V7A_HARD := toolchains/arm-v7a-hard
TOOLCHAIN_ARM64_V8A := toolchains/arm64-v8a
TOOLCHAIN_MIPS := toolchains/mips
TOOLCHAIN_MIPS64 := toolchains/mips64
# Use APP_STL to determine what STL to use.
#
ifeq ($(APP_STL),stlport_static)
TOOLCHAIN_STL := stlport
else ifeq ($(APP_STL),stlport_shared)
TOOLCHAIN_STL := stlport
else ifeq ($(APP_STL),gnustl_static)
TOOLCHAIN_STL := gnustl
else ifeq ($(APP_STL),gnustl_shared)
TOOLCHAIN_STL := gnustl
else ifeq ($(APP_STL),c++_static)
TOOLCHAIN_STL := libc++
else ifeq ($(APP_STL),c++_shared)
TOOLCHAIN_STL := libc++
endif
# The settings to use for the individual toolchains:
# x86
TOOLCHAIN_X86_API := $(TARGET_X86_NDK_API)
TOOLCHAIN_X86_PREFIX := i686-linux-android
TOOLCHAIN_X86_FLAGS := -march=i686 -msse3 -mstackrealign -mfpmath=sse
TOOLCHAIN_X86_LINK :=
TOOLCHAIN_X86_PLATFORM_HEADERS := $(shell pwd)/$(TOOLCHAIN_X86)/sysroot/usr/include
TOOLCHAIN_X86_PLATFORM_LIBS := $(shell pwd)/$(TOOLCHAIN_X86)/sysroot/usr/lib
# x86_64
TOOLCHAIN_X86_64_API := $(TARGET_X86_64_NDK_API)
TOOLCHAIN_X86_64_PREFIX := x86_64-linux-android
TOOLCHAIN_X86_64_FLAGS :=
TOOLCHAIN_X86_64_LINK :=
TOOLCHAIN_X86_64_PLATFORM_HEADERS := $(shell pwd)/$(TOOLCHAIN_X86_64)/sysroot/usr/include
TOOLCHAIN_X86_64_PLATFORM_LIBS := $(shell pwd)/$(TOOLCHAIN_X86_64)/sysroot/usr/lib
# arm
TOOLCHAIN_ARM_API := $(TARGET_ARM_NDK_API)
TOOLCHAIN_ARM_PREFIX := arm-linux-androideabi
TOOLCHAIN_ARM_FLAGS := -mthumb
TOOLCHAIN_ARM_LINK :=
TOOLCHAIN_ARM_PLATFORM_HEADERS := $(shell pwd)/$(TOOLCHAIN_ARM)/sysroot/usr/include
TOOLCHAIN_ARM_PLATFORM_LIBS := $(shell pwd)/$(TOOLCHAIN_ARM)/sysroot/usr/lib
# arm-v7a
TOOLCHAIN_ARM_V7A_API := $(TARGET_ARM_V7A_NDK_API)
TOOLCHAIN_ARM_V7A_PREFIX := arm-linux-androideabi
TOOLCHAIN_ARM_V7A_FLAGS := -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16
TOOLCHAIN_ARM_V7A_LINK := -march=armv7-a -Wl,--fix-cortex-a8
TOOLCHAIN_ARM_V7A_PLATFORM_HEADERS := $(shell pwd)/$(TOOLCHAIN_ARM_V7A)/sysroot/usr/include
TOOLCHAIN_ARM_V7A_PLATFORM_LIBS := $(shell pwd)/$(TOOLCHAIN_ARM_V7A)/sysroot/usr/lib
# arm-v7a-hard
TOOLCHAIN_ARM_V7A_HARD_API := $(TARGET_ARM_V7A_HARD_NDK_API)
TOOLCHAIN_ARM_V7A_HARD_PREFIX := arm-linux-androideabi
TOOLCHAIN_ARM_V7A_HARD_FLAGS := -march=armv7-a -mfpu=vfpv3-d16 -mhard-float -mfloat-abi=hard -D_NDK_MATH_NO_SOFTFP=1
TOOLCHAIN_ARM_V7A_HARD_LINK := -march=armv7-a -Wl,--fix-cortex-a8 -Wl,--no-warn-mismatch -lm_hard
TOOLCHAIN_ARM_V7A_HARD_PLATFORM_HEADERS := $(shell pwd)/$(TOOLCHAIN_ARM_V7A_HARD)/sysroot/usr/include
TOOLCHAIN_ARM_V7A_HARD_PLATFORM_LIBS := $(shell pwd)/$(TOOLCHAIN_ARM_V7A_HARD)/sysroot/usr/lib
# arm64-v8a
TOOLCHAIN_ARM64_V8A_API := $(TARGET_ARM64_V8A_NDK_API)
TOOLCHAIN_ARM64_V8A_PREFIX := aarch64-linux-android
TOOLCHAIN_ARM64_V8A_FLAGS :=
TOOLCHAIN_ARM64_V8A_LINK :=
TOOLCHAIN_ARM64_V8A_PLATFORM_HEADERS := $(shell pwd)/$(TOOLCHAIN_ARM64_V8A)/sysroot/usr/include
TOOLCHAIN_ARM64_V8A_PLATFORM_LIBS := $(shell pwd)/$(TOOLCHAIN_ARM64_V8A)/sysroot/usr/lib
# mips
TOOLCHAIN_MIPS_API := $(TARGET_MIPS_NDK_API)
TOOLCHAIN_MIPS_PREFIX := mipsel-linux-android
TOOLCHAIN_MIPS_FLAGS :=
TOOLCHAIN_MIPS_LINK :=
TOOLCHAIN_MIPS_PLATFORM_HEADERS := $(shell pwd)/$(TOOLCHAIN_MIPS)/sysroot/usr/include
TOOLCHAIN_MIPS_PLATFORM_LIBS := $(shell pwd)/$(TOOLCHAIN_MIPS)/sysroot/usr/lib
# mips64
TOOLCHAIN_MIPS64_API := $(TARGET_MIPS64_NDK_API)
TOOLCHAIN_MIPS64_PREFIX := mips64el-linux-android
TOOLCHAIN_MIPS64_FLAGS :=
TOOLCHAIN_MIPS64_LINK :=
TOOLCHAIN_MIPS64_PLATFORM_HEADERS := $(shell pwd)/$(TOOLCHAIN_MIPS64)/sysroot/usr/include
TOOLCHAIN_MIPS64_PLATFORM_LIBS := $(shell pwd)/$(TOOLCHAIN_MIPS64)/sysroot/usr/lib
# Environment variables to set while compiling for each ABI
# x86
TOOLCHAIN_X86_ENV = \
ANDROID_DEV="$(shell pwd)/$(TOOLCHAIN_X86)/bin" \
CC=$(TOOLCHAIN_X86_PREFIX)-gcc \
CXX=$(TOOLCHAIN_X86_PREFIX)-g++ \
LINK=$(TOOLCHAIN_X86_PREFIX)-g++ \
LD=$(TOOLCHAIN_X86_PREFIX)-ld \
AR=$(TOOLCHAIN_X86_PREFIX)-ar \
RANLIB=$(TOOLCHAIN_X86_PREFIX)-ranlib \
STRIP=$(TOOLCHAIN_X86_PREFIX)-strip \
ARCH_FLAGS="$(TOOLCHAIN_X86_FLAGS)" \
ARCH_LINK="$(TOOLCHAIN_X86_LINK)" \
CPPFLAGS="-I. $(TOOLCHAIN_X86_FLAGS) -I$(TOOLCHAIN_X86_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64" \
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" \
CFLAGS="-I. $(TOOLCHAIN_X86_FLAGS) -I$(TOOLCHAIN_X86_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64" \
LDFLAGS="$(TOOLCHAIN_X86_LINK)" \
PATH="$(shell pwd)/$(TOOLCHAIN_X86)/bin:$$PATH"
# x86_64
TOOLCHAIN_X86_64_ENV = \
ANDROID_DEV="$(shell pwd)/$(TOOLCHAIN_X86_64)/bin" \
CC=$(TOOLCHAIN_X86_64_PREFIX)-gcc \
CXX=$(TOOLCHAIN_X86_64_PREFIX)-g++ \
LINK=$(TOOLCHAIN_X86_64_PREFIX)-g++ \
LD=$(TOOLCHAIN_X86_64_PREFIX)-ld \
AR=$(TOOLCHAIN_X86_64_PREFIX)-ar \
RANLIB=$(TOOLCHAIN_X86_64_PREFIX)-ranlib \
STRIP=$(TOOLCHAIN_X86_64_PREFIX)-strip \
ARCH_FLAGS="$(TOOLCHAIN_X86_64_FLAGS)" \
ARCH_LINK="$(TOOLCHAIN_X86_64_LINK)" \
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" \
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" \
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" \
LDFLAGS="$(TOOLCHAIN_X86_64_LINK)" \
PATH="$(shell pwd)/$(TOOLCHAIN_X86_64)/bin:$$PATH"
# arm
TOOLCHAIN_ARM_ENV = \
ANDROID_DEV="$(shell pwd)/$(TOOLCHAIN_ARM)/bin" \
CC=$(TOOLCHAIN_ARM_PREFIX)-gcc \
CXX=$(TOOLCHAIN_ARM_PREFIX)-g++ \
LINK=$(TOOLCHAIN_ARM_PREFIX)-g++ \
LD=$(TOOLCHAIN_ARM_PREFIX)-ld \
AR=$(TOOLCHAIN_ARM_PREFIX)-ar \
RANLIB=$(TOOLCHAIN_ARM_PREFIX)-ranlib \
STRIP=$(TOOLCHAIN_ARM_PREFIX)-strip \
ARCH_FLAGS="$(TOOLCHAIN_ARM_FLAGS)" \
ARCH_LINK="$(TOOLCHAIN_ARM_LINK)" \
CPPFLAGS="-I. $(TOOLCHAIN_ARM_FLAGS) -I$(TOOLCHAIN_ARM_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64" \
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" \
CFLAGS="-I. $(TOOLCHAIN_ARM_FLAGS) -I$(TOOLCHAIN_ARM_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64" \
LDFLAGS="$(TOOLCHAIN_ARM_LINK)" \
PATH="$(shell pwd)/$(TOOLCHAIN_ARM)/bin:$$PATH"
# arm-v7a
TOOLCHAIN_ARM_V7A_ENV = \
ANDROID_DEV="$(shell pwd)/$(TOOLCHAIN_ARM_V7A)/bin" \
CC=$(TOOLCHAIN_ARM_V7A_PREFIX)-gcc \
CXX=$(TOOLCHAIN_ARM_V7A_PREFIX)-g++ \
LINK=$(TOOLCHAIN_ARM_V7A_PREFIX)-g++ \
LD=$(TOOLCHAIN_ARM_V7A_PREFIX)-ld \
AR=$(TOOLCHAIN_ARM_V7A_PREFIX)-ar \
RANLIB=$(TOOLCHAIN_ARM_V7A_PREFIX)-ranlib \
STRIP=$(TOOLCHAIN_ARM_V7A_PREFIX)-strip \
ARCH_FLAGS="$(TOOLCHAIN_ARM_V7A_FLAGS)" \
ARCH_LINK="$(TOOLCHAIN_ARM_V7A_LINK)" \
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" \
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" \
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" \
LDFLAGS="$(TOOLCHAIN_ARM_V7A_LINK)" \
PATH="$(shell pwd)/$(TOOLCHAIN_ARM_V7A)/bin:$$PATH"
# arm-v7a-hard
TOOLCHAIN_ARM_V7A_HARD_ENV = \
ANDROID_DEV="$(shell pwd)/$(TOOLCHAIN_ARM_V7A_HARD)/bin" \
CC=$(TOOLCHAIN_ARM_V7A_HARD_PREFIX)-gcc \
CXX=$(TOOLCHAIN_ARM_V7A_HARD_PREFIX)-g++ \
LINK=$(TOOLCHAIN_ARM_V7A_HARD_PREFIX)-g++ \
LD=$(TOOLCHAIN_ARM_V7A_HARD_PREFIX)-ld \
AR=$(TOOLCHAIN_ARM_V7A_HARD_PREFIX)-ar \
RANLIB=$(TOOLCHAIN_ARM_V7A_HARD_PREFIX)-ranlib \
STRIP=$(TOOLCHAIN_ARM_V7A_HARD_PREFIX)-strip \
ARCH_FLAGS="$(TOOLCHAIN_ARM_V7A_HARD_FLAGS)" \
ARCH_LINK="$(TOOLCHAIN_ARM_V7A_HARD_LINK)" \
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" \
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" \
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" \
LDFLAGS="$(TOOLCHAIN_ARM_V7A_HARD_LINK)" \
PATH="$(shell pwd)/$(TOOLCHAIN_ARM_V7A_HARD)/bin:$$PATH"
# arm64-v8a
TOOLCHAIN_ARM64_V8A_ENV = \
ANDROID_DEV="$(shell pwd)/$(TOOLCHAIN_ARM64_V8A)/bin" \
CC=$(TOOLCHAIN_ARM64_V8A_PREFIX)-gcc \
CXX=$(TOOLCHAIN_ARM64_V8A_PREFIX)-g++ \
LINK=$(TOOLCHAIN_ARM64_V8A_PREFIX)-g++ \
LD=$(TOOLCHAIN_ARM64_V8A_PREFIX)-ld \
AR=$(TOOLCHAIN_ARM64_V8A_PREFIX)-ar \
RANLIB=$(TOOLCHAIN_ARM64_V8A_PREFIX)-ranlib \
STRIP=$(TOOLCHAIN_ARM64_V8A_PREFIX)-strip \
ARCH_FLAGS="$(TOOLCHAIN_ARM64_V8A_FLAGS)" \
ARCH_LINK="$(TOOLCHAIN_ARM64_V8A_LINK)" \
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" \
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" \
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" \
LDFLAGS="$(TOOLCHAIN_ARM64_V8A_LINK)" \
PATH="$(shell pwd)/$(TOOLCHAIN_ARM64_V8A)/bin:$$PATH"
# mips
TOOLCHAIN_MIPS_ENV = \
ANDROID_DEV="$(shell pwd)/$(TOOLCHAIN_MIPS)/bin" \
CC=$(TOOLCHAIN_MIPS_PREFIX)-gcc \
CXX=$(TOOLCHAIN_MIPS_PREFIX)-g++ \
LINK=$(TOOLCHAIN_MIPS_PREFIX)-g++ \
LD=$(TOOLCHAIN_MIPS_PREFIX)-ld \
AR=$(TOOLCHAIN_MIPS_PREFIX)-ar \
RANLIB=$(TOOLCHAIN_MIPS_PREFIX)-ranlib \
STRIP=$(TOOLCHAIN_MIPS_PREFIX)-strip \
ARCH_FLAGS="$(TOOLCHAIN_MIPS_FLAGS)" \
ARCH_LINK="$(TOOLCHAIN_MIPS_LINK)" \
CPPFLAGS="-I. $(TOOLCHAIN_MIPS_FLAGS) -I$(TOOLCHAIN_MIPS_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64" \
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" \
CFLAGS="-I. $(TOOLCHAIN_MIPS_FLAGS) -I$(TOOLCHAIN_MIPS_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64" \
LDFLAGS="$(TOOLCHAIN_MIPS_LINK)" \
PATH="$(shell pwd)/$(TOOLCHAIN_MIPS)/bin:$$PATH"
# mips64
TOOLCHAIN_MIPS64_ENV = \
ANDROID_DEV="$(shell pwd)/$(TOOLCHAIN_MIPS64)/bin" \
CC=$(TOOLCHAIN_MIPS64_PREFIX)-gcc \
CXX=$(TOOLCHAIN_MIPS64_PREFIX)-g++ \
LINK=$(TOOLCHAIN_MIPS64_PREFIX)-g++ \
LD=$(TOOLCHAIN_MIPS64_PREFIX)-ld \
AR=$(TOOLCHAIN_MIPS64_PREFIX)-ar \
RANLIB=$(TOOLCHAIN_MIPS64_PREFIX)-ranlib \
STRIP=$(TOOLCHAIN_MIPS64_PREFIX)-strip \
ARCH_FLAGS="$(TOOLCHAIN_MIPS64_FLAGS)" \
ARCH_LINK="$(TOOLCHAIN_MIPS64_LINK)" \
CPPFLAGS="-I. $(TOOLCHAIN_MIPS64_FLAGS) -I$(TOOLCHAIN_MIPS64_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64" \
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" \
CFLAGS="-I. $(TOOLCHAIN_MIPS64_FLAGS) -I$(TOOLCHAIN_MIPS64_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64" \
LDFLAGS="$(TOOLCHAIN_MIPS64_LINK)" \
PATH="$(shell pwd)/$(TOOLCHAIN_MIPS64)/bin:$$PATH"
#
# All the external tools we use in this Makefile
#
AWK := awk
CD := cd
CMAKE := cmake
ECHO := echo
EGREP := egrep
GIT := git
LN := ln
MKDIR := mkdir
RM := rm
SORT := sort
TAR := tar
WGET := wget
#
# End of user configurable options.
#
.PHONY: \
all \
all-x86 \
all-x86_64 \
all-armeabi \
all-armeabi-v7a \
all-armeabi-v7a-hard \
all-arm64-v8a \
all-mips \
all-mips64 \
common \
sources \
toolchains \
toolchain-x86 \
toolchain-x86_64 \
toolchain-armeabi \
toolchain-armeabi-v7a \
toolchain-armeabi-v7a-hard \
toolchain-arm64-v8a \
toolchain-mips \
toolchain-mips64 \
zlib \
zlib-x86 \
zlib-x86_64 \
zlib-armeabi \
zlib-armeabi-v7a \
zlib-armeabi-v7a-hard \
zlib-arm64-v8a \
zlib-mips \
zlib-mips64 \
openssl \
openssl-x86 \
openssl-x86_64 \
openssl-armeabi \
openssl-armeabi-v7a \
openssl-armeabi-v7a-hard \
openssl-arm64-v8a \
openssl-mips \
openssl-mips64 \
libwebsockets \
libwebsockets-x86 \
libwebsockets-x86_64 \
libwebsockets-armeabi \
libwebsockets-armeabi-v7a \
libwebsockets-armeabi-v7a-hard \
libwebsockets-arm64-v8a \
libwebsockets-mips \
libwebsockets-mips64 \
clean-ndk \
clean \
dist-clean \
clean-targets \
clean-target-x86 \
clean-target-x86_64 \
clean-target-armeabi \
clean-target-armeabi-v7a \
clean-target-armeabi-v7a-hard \
clean-target-arm64-v8a \
clean-target-mips \
clean-target-mips64 \
clean-sources \
clean-source-zlib \
clean-source-openssl \
clean-source-libwebsockets \
clean-toolchains \
clean-toolchain-x86 \
clean-toolchain-x86_64 \
clean-toolchain-armeabi \
clean-toolchain-armeabi-v7a \
clean-toolchain-armeabi-v7a-hard \
clean-toolchain-arm64-v8a \
clean-toolchain-mips \
clean-toolchain-mips64 \
list-targets
# Default rule: build the libraries for all ABIs defined in NDK_APP_ABI then run ndk-build
all: $(NDK_APP_ABI)
$(NDK_ROOT)/ndk-build clean
$(NDK_ROOT)/ndk-build
# Libraries may also be build per ABI
all-x86: $(TARGET_X86)
all-x86_64: $(TARGET_X86_64)
all-armeabi: $(TARGET_ARM)
all-armeabi-v7a: $(TARGET_ARM_V7A)
all-armeabi-v7a-hard: $(TARGET_ARM_V7A_HARD)
all-arm64-v8a: $(TARGET_ARM64_V8A)
all-mips: $(TARGET_MIPS)
all-mips64: $(TARGET_MIPS64)
# Common rule all targets depend on
common: ../jniLibs
# These rules are called from Android.mk when executing ndk-build
$(TARGET_X86): common zlib-x86 openssl-x86 libwebsockets-x86
$(TARGET_X86_64): common zlib-x86_64 openssl-x86_64 libwebsockets-x86_64
$(TARGET_ARM): common zlib-armeabi openssl-armeabi libwebsockets-armeabi
$(TARGET_ARM_V7A): common zlib-armeabi-v7a openssl-armeabi-v7a libwebsockets-armeabi-v7a
$(TARGET_ARM_V7A_HARD): common zlib-armeabi-v7a-hard openssl-armeabi-v7a-hard libwebsockets-armeabi-v7a-hard
$(TARGET_ARM64_V8A): common zlib-arm64-v8a openssl-arm64-v8a libwebsockets-arm64-v8a
$(TARGET_MIPS): common zlib-mips openssl-mips libwebsockets-mips
$(TARGET_MIPS64): common zlib-mips64 openssl-mips64 libwebsockets-mips64
#
# A rule to ensure ../jniLibs points to ../libs
# (ndk-build creates ../libs but Gradle looks for ../jniLibs)
#
../libs:
$(MKDIR) ../libs
../jniLibs: ../libs
$(CD) .. && $(LN) -s libs jniLibs
#
# Some rules to download the sources
#
sources: $(ZLIB_TGZ_SOURCE) $(OPENSSL_TGZ_SOURCE) $(LIBWEBSOCKETS_TGZ_SOURCE)
$(ZLIB_TGZ_SOURCE):
$(WGET) -q $(ZLIB_TGZ_URL)
$(OPENSSL_TGZ_SOURCE):
$(WGET) -q $(OPENSSL_TGZ_URL)
$(LIBWEBSOCKETS_TGZ_SOURCE):
if [ -d $(LIBWEBSOCKETS_DIR) ]; then $(RM) -fr $(LIBWEBSOCKETS_DIR); fi
$(GIT) clone $(LIBWEBSOCKETS_GIT_URL)
$(TAR) caf $(LIBWEBSOCKETS_TGZ_SOURCE) $(LIBWEBSOCKETS_DIR)
$(RM) -fR $(LIBWEBSOCKETS_DIR)
#
# Some rules to install the required toolchains
#
toolchains: \
toolchain-x86 \
toolchain-x86_64 \
toolchain-armeabi \
toolchain-armeabi-v7a \
toolchain-armeabi-v7a-hard \
toolchain-arm64-v8a \
toolchain-mips \
toolchain-mips64
toolchain-x86: $(TOOLCHAIN_X86)
toolchain-x86_64: $(TOOLCHAIN_X86_64)
toolchain-armeabi: $(TOOLCHAIN_ARM)
toolchain-armeabi-v7a: $(TOOLCHAIN_ARM_V7A)
toolchain-armeabi-v7a-hard: $(TOOLCHAIN_ARM_V7A_HARD)
toolchain-arm64-v8a: $(TOOLCHAIN_ARM64_V8A)
toolchain-mips: $(TOOLCHAIN_MIPS)
toolchain-mips64: $(TOOLCHAIN_MIPS64)
$(TOOLCHAIN_X86):
ifneq ($(TOOLCHAIN_STL),)
$(NDK_MAKE_TOOLCHAIN) \
--stl $(TOOLCHAIN_STL) \
--api $(TOOLCHAIN_X86_API) \
--arch x86 \
--install-dir $(shell pwd)/$(TOOLCHAIN_X86)
else
$(NDK_MAKE_TOOLCHAIN) \
--api $(TOOLCHAIN_X86_API) \
--arch x86 \
--install-dir $(shell pwd)/$(TOOLCHAIN_X86)
endif
$(TOOLCHAIN_X86_64):
ifneq ($(TOOLCHAIN_STL),)
$(NDK_MAKE_TOOLCHAIN) \
--stl $(TOOLCHAIN_STL) \
--api $(TOOLCHAIN_X86_64_API) \
--arch x86_64 \
--install-dir $(shell pwd)/$(TOOLCHAIN_X86_64)
else
$(NDK_MAKE_TOOLCHAIN) \
--api $(TOOLCHAIN_X86_64_API) \
--arch x86_64 \
--install-dir $(shell pwd)/$(TOOLCHAIN_X86_64)
endif
$(TOOLCHAIN_ARM):
ifneq ($(TOOLCHAIN_STL),)
$(NDK_MAKE_TOOLCHAIN) \
--stl $(TOOLCHAIN_STL) \
--api $(TOOLCHAIN_ARM_API) \
--arch arm \
--install-dir $(shell pwd)/$(TOOLCHAIN_ARM)
else
$(NDK_MAKE_TOOLCHAIN) \
--api $(TOOLCHAIN_ARM_API) \
--arch arm \
--install-dir $(shell pwd)/$(TOOLCHAIN_ARM)
endif
$(TOOLCHAIN_ARM_V7A):
ifneq ($(TOOLCHAIN_STL),)
$(NDK_MAKE_TOOLCHAIN) \
--stl $(TOOLCHAIN_STL) \
--api $(TOOLCHAIN_ARM_V7A_API) \
--arch arm \
--install-dir $(shell pwd)/$(TOOLCHAIN_ARM_V7A)
else
$(NDK_MAKE_TOOLCHAIN) \
--api $(TOOLCHAIN_ARM_V7A_API) \
--arch arm \
--install-dir $(shell pwd)/$(TOOLCHAIN_ARM_V7A)
endif
$(TOOLCHAIN_ARM_V7A_HARD):
ifneq ($(TOOLCHAIN_STL),)
$(NDK_MAKE_TOOLCHAIN) \
--stl $(TOOLCHAIN_STL) \
--api $(TOOLCHAIN_ARM_V7A_HARD_API) \
--arch arm \
--install-dir $(shell pwd)/$(TOOLCHAIN_ARM_V7A_HARD)
else
$(NDK_MAKE_TOOLCHAIN) \
--api $(TOOLCHAIN_ARM_V7A_HARD_API) \
--arch arm \
--install-dir $(shell pwd)/$(TOOLCHAIN_ARM_V7A_HARD)
endif
$(TOOLCHAIN_ARM64_V8A):
ifneq ($(TOOLCHAIN_STL),)
$(NDK_MAKE_TOOLCHAIN) \
--stl $(TOOLCHAIN_STL) \
--api $(TOOLCHAIN_ARM64_V8A_API) \
--arch arm64 \
--install-dir $(shell pwd)/$(TOOLCHAIN_ARM64_V8A)
else
$(NDK_MAKE_TOOLCHAIN) \
--api $(TOOLCHAIN_ARM64_V8A_API) \
--arch arm64 \
--install-dir $(shell pwd)/$(TOOLCHAIN_ARM64_V8A)
endif
$(TOOLCHAIN_MIPS):
ifneq ($(TOOLCHAIN_STL),)
$(NDK_MAKE_TOOLCHAIN) \
--stl $(TOOLCHAIN_STL) \
--api $(TOOLCHAIN_MIPS_API) \
--arch mips \
--install-dir $(shell pwd)/$(TOOLCHAIN_MIPS)
else
$(NDK_MAKE_TOOLCHAIN) \
--api $(TOOLCHAIN_MIPS_API) \
--arch mips \
--install-dir $(shell pwd)/$(TOOLCHAIN_MIPS)
endif
$(TOOLCHAIN_MIPS64):
ifneq ($(TOOLCHAIN_STL),)
$(NDK_MAKE_TOOLCHAIN) \
--stl $(TOOLCHAIN_STL) \
--api $(TOOLCHAIN_MIPS64_API) \
--arch mips64 \
--install-dir $(shell pwd)/$(TOOLCHAIN_MIPS64)
else
$(NDK_MAKE_TOOLCHAIN) \
--api $(TOOLCHAIN_MIPS64_API) \
--arch mips64 \
--install-dir $(shell pwd)/$(TOOLCHAIN_MIPS64)
endif
#
# Rules to build zlib
#
zlib: \
zlib-x86 \
zlib-x86_64 \
zlib-armeabi \
zlib-armeabi-v7a \
zlib-armeabi-v7a-hard \
zlib-arm64-v8a \
zlib-mips \
zlib-mips64
zlib-x86: $(TARGET_X86)/lib/libz.a
zlib-x86_64: $(TARGET_X86_64)/lib/libz.a
zlib-armeabi: $(TARGET_ARM)/lib/libz.a
zlib-armeabi-v7a: $(TARGET_ARM_V7A)/lib/libz.a
zlib-armeabi-v7a-hard: $(TARGET_ARM_V7A_HARD)/lib/libz.a
zlib-arm64-v8a: $(TARGET_ARM64_V8A)/lib/libz.a
zlib-mips: $(TARGET_MIPS)/lib/libz.a
zlib-mips64: $(TARGET_MIPS64)/lib/libz.a
# Extracting/configuring sources
$(TARGET_X86)/src/$(ZLIB_DIR): $(ZLIB_TGZ_SOURCE) $(TOOLCHAIN_X86)
-$(MKDIR) -p $(TARGET_X86)/src
$(TAR) xf $(ZLIB_TGZ_SOURCE) -C $(TARGET_X86)/src
$(CD) $(TARGET_X86)/src/$(ZLIB_DIR) && $(TOOLCHAIN_X86_ENV) \
./configure --static --prefix=$(shell pwd)/$(TARGET_X86)
$(TARGET_X86_64)/src/$(ZLIB_DIR): $(ZLIB_TGZ_SOURCE) $(TOOLCHAIN_X86_64)
-$(MKDIR) -p $(TARGET_X86_64)/src
$(TAR) xf $(ZLIB_TGZ_SOURCE) -C $(TARGET_X86_64)/src
$(CD) $(TARGET_X86_64)/src/$(ZLIB_DIR) && $(TOOLCHAIN_X86_64_ENV) \
./configure --static --prefix=$(shell pwd)/$(TARGET_X86_64)
$(TARGET_ARM)/src/$(ZLIB_DIR): $(ZLIB_TGZ_SOURCE) $(TOOLCHAIN_ARM)
-$(MKDIR) -p $(TARGET_ARM)/src
$(TAR) xf $(ZLIB_TGZ_SOURCE) -C $(TARGET_ARM)/src
$(CD) $(TARGET_ARM)/src/$(ZLIB_DIR) && $(TOOLCHAIN_ARM_ENV) \
./configure --static --prefix=$(shell pwd)/$(TARGET_ARM)
$(TARGET_ARM_V7A)/src/$(ZLIB_DIR): $(ZLIB_TGZ_SOURCE) $(TOOLCHAIN_ARM_V7A)
-$(MKDIR) -p $(TARGET_ARM_V7A)/src
$(TAR) xf $(ZLIB_TGZ_SOURCE) -C $(TARGET_ARM_V7A)/src
$(CD) $(TARGET_ARM_V7A)/src/$(ZLIB_DIR) && $(TOOLCHAIN_ARM_V7A_ENV) \
./configure --static --prefix=$(shell pwd)/$(TARGET_ARM_V7A)
$(TARGET_ARM_V7A_HARD)/src/$(ZLIB_DIR): $(ZLIB_TGZ_SOURCE) $(TOOLCHAIN_ARM_V7A_HARD)
-$(MKDIR) -p $(TARGET_ARM_V7A_HARD)/src
$(TAR) xf $(ZLIB_TGZ_SOURCE) -C $(TARGET_ARM_V7A_HARD)/src
$(CD) $(TARGET_ARM_V7A_HARD)/src/$(ZLIB_DIR) && $(TOOLCHAIN_ARM_V7A_HARD_ENV) \
./configure --static --prefix=$(shell pwd)/$(TARGET_ARM_V7A_HARD)
$(TARGET_ARM64_V8A)/src/$(ZLIB_DIR): $(ZLIB_TGZ_SOURCE) $(TOOLCHAIN_ARM64_V8A)
-$(MKDIR) -p $(TARGET_ARM64_V8A)/src
$(TAR) xf $(ZLIB_TGZ_SOURCE) -C $(TARGET_ARM64_V8A)/src
$(CD) $(TARGET_ARM64_V8A)/src/$(ZLIB_DIR) && $(TOOLCHAIN_ARM64_V8A_ENV) \
./configure --static --prefix=$(shell pwd)/$(TARGET_ARM64_V8A)
$(TARGET_MIPS)/src/$(ZLIB_DIR): $(ZLIB_TGZ_SOURCE) $(TOOLCHAIN_MIPS)
-$(MKDIR) -p $(TARGET_MIPS)/src
$(TAR) xf $(ZLIB_TGZ_SOURCE) -C $(TARGET_MIPS)/src
$(CD) $(TARGET_MIPS)/src/$(ZLIB_DIR) && $(TOOLCHAIN_MIPS_ENV) \
./configure --static --prefix=$(shell pwd)/$(TARGET_MIPS)
$(TARGET_MIPS64)/src/$(ZLIB_DIR): $(ZLIB_TGZ_SOURCE) $(TOOLCHAIN_MIPS64)
-$(MKDIR) -p $(TARGET_MIPS64)/src
$(TAR) xf $(ZLIB_TGZ_SOURCE) -C $(TARGET_MIPS64)/src
$(CD) $(TARGET_MIPS64)/src/$(ZLIB_DIR) && $(TOOLCHAIN_MIPS64_ENV) \
./configure --static --prefix=$(shell pwd)/$(TARGET_MIPS64)
# Build/install library
$(TARGET_X86)/lib/libz.a: $(TARGET_X86)/src/$(ZLIB_DIR)
$(CD) $(TARGET_X86)/src/$(ZLIB_DIR) && $(TOOLCHAIN_X86_ENV) $(MAKE) libz.a
$(CD) $(TARGET_X86)/src/$(ZLIB_DIR) && $(TOOLCHAIN_X86_ENV) $(MAKE) install
$(TARGET_X86_64)/lib/libz.a: $(TARGET_X86_64)/src/$(ZLIB_DIR)
$(CD) $(TARGET_X86_64)/src/$(ZLIB_DIR) && $(TOOLCHAIN_X86_64_ENV) $(MAKE) libz.a
$(CD) $(TARGET_X86_64)/src/$(ZLIB_DIR) && $(TOOLCHAIN_X86_64_ENV) $(MAKE) install
$(TARGET_ARM)/lib/libz.a: $(TARGET_ARM)/src/$(ZLIB_DIR)
$(CD) $(TARGET_ARM)/src/$(ZLIB_DIR) && $(TOOLCHAIN_ARM_ENV) $(MAKE) libz.a
$(CD) $(TARGET_ARM)/src/$(ZLIB_DIR) && $(TOOLCHAIN_ARM_ENV) $(MAKE) install
$(TARGET_ARM_V7A)/lib/libz.a: $(TARGET_ARM_V7A)/src/$(ZLIB_DIR)
$(CD) $(TARGET_ARM_V7A)/src/$(ZLIB_DIR) && $(TOOLCHAIN_ARM_V7A_ENV) $(MAKE) libz.a
$(CD) $(TARGET_ARM_V7A)/src/$(ZLIB_DIR) && $(TOOLCHAIN_ARM_V7A_ENV) $(MAKE) install
$(TARGET_ARM_V7A_HARD)/lib/libz.a: $(TARGET_ARM_V7A_HARD)/src/$(ZLIB_DIR)
$(CD) $(TARGET_ARM_V7A_HARD)/src/$(ZLIB_DIR) && $(TOOLCHAIN_ARM_V7A_HARD_ENV) $(MAKE) libz.a
$(CD) $(TARGET_ARM_V7A_HARD)/src/$(ZLIB_DIR) && $(TOOLCHAIN_ARM_V7A_HARD_ENV) $(MAKE) install
$(TARGET_ARM64_V8A)/lib/libz.a: $(TARGET_ARM64_V8A)/src/$(ZLIB_DIR)
$(CD) $(TARGET_ARM64_V8A)/src/$(ZLIB_DIR) && $(TOOLCHAIN_ARM64_V8A_ENV) $(MAKE) libz.a
$(CD) $(TARGET_ARM64_V8A)/src/$(ZLIB_DIR) && $(TOOLCHAIN_ARM64_V8A_ENV) $(MAKE) install
$(TARGET_MIPS)/lib/libz.a: $(TARGET_MIPS)/src/$(ZLIB_DIR)
$(CD) $(TARGET_MIPS)/src/$(ZLIB_DIR) && $(TOOLCHAIN_MIPS_ENV) $(MAKE) libz.a
$(CD) $(TARGET_MIPS)/src/$(ZLIB_DIR) && $(TOOLCHAIN_MIPS_ENV) $(MAKE) install
$(TARGET_MIPS64)/lib/libz.a: $(TARGET_MIPS64)/src/$(ZLIB_DIR)
$(CD) $(TARGET_MIPS64)/src/$(ZLIB_DIR) && $(TOOLCHAIN_MIPS64_ENV) $(MAKE) libz.a
$(CD) $(TARGET_MIPS64)/src/$(ZLIB_DIR) && $(TOOLCHAIN_MIPS64_ENV) $(MAKE) install
#
# Rules to build OpenSSL
#
openssl: \
openssl-x86 \
openssl-x86_64 \
openssl-armeabi \
openssl-armeabi-v7a \
openssl-armeabi-v7a-hard \
openssl-arm64-v8a \
openssl-mips \
openssl-mips64
openssl-x86: $(TARGET_X86)/lib/libssl.a
openssl-x86_64: $(TARGET_X86_64)/lib/libssl.a
openssl-armeabi: $(TARGET_ARM)/lib/libssl.a
openssl-armeabi-v7a: $(TARGET_ARM_V7A)/lib/libssl.a
openssl-armeabi-v7a-hard: $(TARGET_ARM_V7A_HARD)/lib/libssl.a
openssl-arm64-v8a: $(TARGET_ARM64_V8A)/lib/libssl.a
openssl-mips: $(TARGET_MIPS)/lib/libssl.a
openssl-mips64: $(TARGET_MIPS64)/lib/libssl.a
# Extracting/configuring sources
$(TARGET_X86)/src/$(OPENSSL_DIR): $(OPENSSL_TGZ_SOURCE) $(TOOLCHAIN_X86)
-$(MKDIR) -p $(TARGET_X86)/src
$(TAR) xf $(OPENSSL_TGZ_SOURCE) -C $(TARGET_X86)/src
$(CD) $(TARGET_X86)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_X86_ENV) \
./Configure $(TARGET_X86_OPENSSL_CONFIG_TARGET) \
--prefix=$(shell pwd)/$(TARGET_X86) \
--openssldir=$(shell pwd)/$(TARGET_X86)/lib/ssl \
$(TARGET_X86_OPENSSL_CONFIG)
$(TARGET_X86_64)/src/$(OPENSSL_DIR): $(OPENSSL_TGZ_SOURCE) $(TOOLCHAIN_X86_64)
-$(MKDIR) -p $(TARGET_X86_64)/src
$(TAR) xf $(OPENSSL_TGZ_SOURCE) -C $(TARGET_X86_64)/src
$(CD) $(TARGET_X86_64)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_X86_64_ENV) \
./Configure $(TARGET_X86_64_OPENSSL_CONFIG_TARGET) \
--prefix=$(shell pwd)/$(TARGET_X86_64) \
--openssldir=$(shell pwd)/$(TARGET_X86_64)/lib/ssl \
$(TARGET_X86_64_OPENSSL_CONFIG)
$(TARGET_ARM)/src/$(OPENSSL_DIR): $(OPENSSL_TGZ_SOURCE) $(TOOLCHAIN_ARM)
-$(MKDIR) -p $(TARGET_ARM)/src
$(TAR) xf $(OPENSSL_TGZ_SOURCE) -C $(TARGET_ARM)/src
$(CD) $(TARGET_ARM)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM_ENV) \
./Configure $(TARGET_ARM_OPENSSL_CONFIG_TARGET) \
--prefix=$(shell pwd)/$(TARGET_ARM) \
--openssldir=$(shell pwd)/$(TARGET_ARM)/lib/ssl \
$(TARGET_ARM_OPENSSL_CONFIG)
$(TARGET_ARM_V7A)/src/$(OPENSSL_DIR): $(OPENSSL_TGZ_SOURCE) $(TOOLCHAIN_ARM_V7A)
-$(MKDIR) -p $(TARGET_ARM_V7A)/src
$(TAR) xf $(OPENSSL_TGZ_SOURCE) -C $(TARGET_ARM_V7A)/src
$(CD) $(TARGET_ARM_V7A)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM_V7A_ENV) \
./Configure $(TARGET_ARM_V7A_OPENSSL_CONFIG_TARGET) \
--prefix=$(shell pwd)/$(TARGET_ARM_V7A) \
--openssldir=$(shell pwd)/$(TARGET_ARM_V7A)/lib/ssl \
$(TARGET_ARM_V7A_OPENSSL_CONFIG)
$(TARGET_ARM_V7A_HARD)/src/$(OPENSSL_DIR): $(OPENSSL_TGZ_SOURCE) $(TOOLCHAIN_ARM_V7A_HARD)
-$(MKDIR) -p $(TARGET_ARM_V7A_HARD)/src
$(TAR) xf $(OPENSSL_TGZ_SOURCE) -C $(TARGET_ARM_V7A_HARD)/src
$(CD) $(TARGET_ARM_V7A_HARD)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM_V7A_HARD_ENV) \
./Configure $(TARGET_ARM_V7A_HARD_OPENSSL_CONFIG_TARGET) \
--prefix=$(shell pwd)/$(TARGET_ARM_V7A_HARD) \
--openssldir=$(shell pwd)/$(TARGET_ARM_V7A_HARD)/lib/ssl \
$(TARGET_ARM_V7A_HARD_OPENSSL_CONFIG)
$(TARGET_ARM64_V8A)/src/$(OPENSSL_DIR): $(OPENSSL_TGZ_SOURCE) $(TOOLCHAIN_ARM64_V8A)
-$(MKDIR) -p $(TARGET_ARM64_V8A)/src
$(TAR) xf $(OPENSSL_TGZ_SOURCE) -C $(TARGET_ARM64_V8A)/src
$(CD) $(TARGET_ARM64_V8A)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM64_V8A_ENV) \
./Configure $(TARGET_ARM64_V8A_OPENSSL_CONFIG_TARGET) \
--prefix=$(shell pwd)/$(TARGET_ARM64_V8A) \
--openssldir=$(shell pwd)/$(TARGET_ARM64_V8A)/lib/ssl \
$(TARGET_ARM64_V8A_OPENSSL_CONFIG)
$(TARGET_MIPS)/src/$(OPENSSL_DIR): $(OPENSSL_TGZ_SOURCE) $(TOOLCHAIN_MIPS)
-$(MKDIR) -p $(TARGET_MIPS)/src
$(TAR) xf $(OPENSSL_TGZ_SOURCE) -C $(TARGET_MIPS)/src
$(CD) $(TARGET_MIPS)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_MIPS_ENV) \
./Configure $(TARGET_MIPS_OPENSSL_CONFIG_TARGET) \
--prefix=$(shell pwd)/$(TARGET_MIPS) \
--openssldir=$(shell pwd)/$(TARGET_MIPS)/lib/ssl \
$(TARGET_MIPS_OPENSSL_CONFIG)
$(TARGET_MIPS64)/src/$(OPENSSL_DIR): $(OPENSSL_TGZ_SOURCE) $(TOOLCHAIN_MIPS64)
-$(MKDIR) -p $(TARGET_MIPS64)/src
$(TAR) xf $(OPENSSL_TGZ_SOURCE) -C $(TARGET_MIPS64)/src
$(CD) $(TARGET_MIPS64)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_MIPS64_ENV) \
./Configure $(TARGET_MIPS64_OPENSSL_CONFIG_TARGET) \
--prefix=$(shell pwd)/$(TARGET_MIPS64) \
--openssldir=$(shell pwd)/$(TARGET_MIPS64)/lib/ssl \
$(TARGET_MIPS64_OPENSSL_CONFIG)
# Build/install library
$(TARGET_X86)/lib/libssl.a: $(TARGET_X86)/src/$(OPENSSL_DIR)
$(CD) $(TARGET_X86)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_X86_ENV) $(MAKE) depend
$(CD) $(TARGET_X86)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_X86_ENV) $(MAKE) build_libs
$(CD) $(TARGET_X86)/src/$(OPENSSL_DIR) && $(ECHO) '#!/bin/sh\n\nfalse\n' > apps/openssl
$(CD) $(TARGET_X86)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_X86_ENV) $(MAKE) install_sw
$(TARGET_X86_64)/lib/libssl.a: $(TARGET_X86_64)/src/$(OPENSSL_DIR)
$(CD) $(TARGET_X86_64)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_X86_64_ENV) $(MAKE) depend
$(CD) $(TARGET_X86_64)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_X86_64_ENV) $(MAKE) build_libs
$(CD) $(TARGET_X86_64)/src/$(OPENSSL_DIR) && $(ECHO) '#!/bin/sh\n\nfalse\n' > apps/openssl
$(CD) $(TARGET_X86_64)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_X86_64_ENV) $(MAKE) install_sw
$(TARGET_ARM)/lib/libssl.a: $(TARGET_ARM)/src/$(OPENSSL_DIR)
$(CD) $(TARGET_ARM)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM_ENV) $(MAKE) depend
$(CD) $(TARGET_ARM)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM_ENV) $(MAKE) build_libs
$(CD) $(TARGET_ARM)/src/$(OPENSSL_DIR) && $(ECHO) '#!/bin/sh\n\nfalse\n' > apps/openssl
$(CD) $(TARGET_ARM)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM_ENV) $(MAKE) install_sw
$(TARGET_ARM_V7A)/lib/libssl.a: $(TARGET_ARM_V7A)/src/$(OPENSSL_DIR)
$(CD) $(TARGET_ARM_V7A)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM_V7A_ENV) $(MAKE) depend
$(CD) $(TARGET_ARM_V7A)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM_V7A_ENV) $(MAKE) build_libs
$(CD) $(TARGET_ARM_V7A)/src/$(OPENSSL_DIR) && $(ECHO) '#!/bin/sh\n\nfalse\n' > apps/openssl
$(CD) $(TARGET_ARM_V7A)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM_V7A_ENV) $(MAKE) install_sw
$(TARGET_ARM_V7A_HARD)/lib/libssl.a: $(TARGET_ARM_V7A_HARD)/src/$(OPENSSL_DIR)
$(CD) $(TARGET_ARM_V7A_HARD)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM_V7A_HARD_ENV) $(MAKE) depend
$(CD) $(TARGET_ARM_V7A_HARD)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM_V7A_HARD_ENV) $(MAKE) build_libs
$(CD) $(TARGET_ARM_V7A_HARD)/src/$(OPENSSL_DIR) && $(ECHO) '#!/bin/sh\n\nfalse\n' > apps/openssl
$(CD) $(TARGET_ARM_V7A_HARD)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM_V7A_HARD_ENV) $(MAKE) install_sw
$(TARGET_ARM64_V8A)/lib/libssl.a: $(TARGET_ARM64_V8A)/src/$(OPENSSL_DIR)
$(CD) $(TARGET_ARM64_V8A)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM64_V8A_ENV) $(MAKE) depend
$(CD) $(TARGET_ARM64_V8A)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM64_V8A_ENV) $(MAKE) build_libs
$(CD) $(TARGET_ARM64_V8A)/src/$(OPENSSL_DIR) && $(ECHO) '#!/bin/sh\n\nfalse\n' > apps/openssl
$(CD) $(TARGET_ARM64_V8A)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM64_V8A_ENV) $(MAKE) install_sw
$(TARGET_MIPS)/lib/libssl.a: $(TARGET_MIPS)/src/$(OPENSSL_DIR)
$(CD) $(TARGET_MIPS)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_MIPS_ENV) $(MAKE) depend
$(CD) $(TARGET_MIPS)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_MIPS_ENV) $(MAKE) build_libs
$(CD) $(TARGET_MIPS)/src/$(OPENSSL_DIR) && $(ECHO) '#!/bin/sh\n\nfalse\n' > apps/openssl
$(CD) $(TARGET_MIPS)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_MIPS_ENV) $(MAKE) install_sw
$(TARGET_MIPS64)/lib/libssl.a: $(TARGET_MIPS64)/src/$(OPENSSL_DIR)
$(CD) $(TARGET_MIPS64)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_MIPS64_ENV) $(MAKE) depend
$(CD) $(TARGET_MIPS64)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_MIPS64_ENV) $(MAKE) build_libs
$(CD) $(TARGET_MIPS64)/src/$(OPENSSL_DIR) && $(ECHO) '#!/bin/sh\n\nfalse\n' > apps/openssl
$(CD) $(TARGET_MIPS64)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_MIPS64_ENV) $(MAKE) install_sw
#
# Rules to build libwebsockets
#
libwebsockets: \
libwebsockets-x86 \
libwebsockets-x86_64 \
libwebsockets-armeabi \
libwebsockets-armeabi-v7a \
libwebsockets-armeabi-v7a-hard \
libwebsockets-arm64-v8a \
libwebsockets-mips \
libwebsockets-mips64 \
libwebsockets-x86: $(TARGET_X86)/lib/libwebsockets.a
libwebsockets-x86_64: $(TARGET_X86_64)/lib/libwebsockets.a
libwebsockets-armeabi: $(TARGET_ARM)/lib/libwebsockets.a
libwebsockets-armeabi-v7a: $(TARGET_ARM_V7A)/lib/libwebsockets.a
libwebsockets-armeabi-v7a-hard: $(TARGET_ARM_V7A_HARD)/lib/libwebsockets.a
libwebsockets-arm64-v8a: $(TARGET_ARM64_V8A)/lib/libwebsockets.a
libwebsockets-mips: $(TARGET_MIPS)/lib/libwebsockets.a
libwebsockets-mips64: $(TARGET_MIPS64)/lib/libwebsockets.a
# Extracting/configuring sources
$(TARGET_X86)/src/$(LIBWEBSOCKETS_DIR): $(LIBWEBSOCKETS_TGZ_SOURCE) $(TOOLCHAIN_X86) $(TARGET_X86)/lib/libssl.a $(TARGET_X86)/lib/libz.a
-$(MKDIR) -p $(TARGET_X86)/src
$(TAR) xf $(LIBWEBSOCKETS_TGZ_SOURCE) -C $(TARGET_X86)/src
-$(MKDIR) -p $(TARGET_X86)/src/$(LIBWEBSOCKETS_DIR)/build
$(CD) $(TARGET_X86)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_X86_ENV) \
$(CMAKE) $(TARGET_X86_LWS_OPTIONS) \
-DCMAKE_INSTALL_PREFIX=$(shell pwd)/$(TARGET_X86) \
-DLWS_OPENSSL_LIBRARIES="$(shell pwd)/$(TARGET_X86)/lib/libssl.a;$(shell pwd)/$(TARGET_X86)/lib/libcrypto.a" \
-DLWS_OPENSSL_INCLUDE_DIRS="$(shell pwd)/$(TARGET_X86)/include" \
..
$(TARGET_X86_64)/src/$(LIBWEBSOCKETS_DIR): $(LIBWEBSOCKETS_TGZ_SOURCE) $(TOOLCHAIN_X86_64) $(TARGET_X86_64)/lib/libssl.a $(TARGET_X86_64)/lib/libz.a
-$(MKDIR) -p $(TARGET_X86_64)/src
$(TAR) xf $(LIBWEBSOCKETS_TGZ_SOURCE) -C $(TARGET_X86_64)/src
-$(MKDIR) -p $(TARGET_X86_64)/src/$(LIBWEBSOCKETS_DIR)/build
$(CD) $(TARGET_X86_64)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_X86_64_ENV) \
$(CMAKE) $(TARGET_X86_64_LWS_OPTIONS) \
-DCMAKE_INSTALL_PREFIX=$(shell pwd)/$(TARGET_X86_64) \
-DLWS_OPENSSL_LIBRARIES="$(shell pwd)/$(TARGET_X86_64)/lib/libssl.a;$(shell pwd)/$(TARGET_X86_64)/lib/libcrypto.a" \
-DLWS_OPENSSL_INCLUDE_DIRS="$(shell pwd)/$(TARGET_X86_64)/include" \
..
$(TARGET_ARM)/src/$(LIBWEBSOCKETS_DIR): $(LIBWEBSOCKETS_TGZ_SOURCE) $(TOOLCHAIN_ARM) $(TARGET_ARM)/lib/libssl.a $(TARGET_ARM)/lib/libz.a
-$(MKDIR) -p $(TARGET_ARM)/src
$(TAR) xf $(LIBWEBSOCKETS_TGZ_SOURCE) -C $(TARGET_ARM)/src
-$(MKDIR) -p $(TARGET_ARM)/src/$(LIBWEBSOCKETS_DIR)/build
$(CD) $(TARGET_ARM)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_ARM_ENV) \
$(CMAKE) $(TARGET_ARM_LWS_OPTIONS) \
-DCMAKE_INSTALL_PREFIX=$(shell pwd)/$(TARGET_ARM) \
-DLWS_OPENSSL_LIBRARIES="$(shell pwd)/$(TARGET_ARM)/lib/libssl.a;$(shell pwd)/$(TARGET_ARM)/lib/libcrypto.a" \
-DLWS_OPENSSL_INCLUDE_DIRS="$(shell pwd)/$(TARGET_ARM)/include" \
..
$(TARGET_ARM_V7A)/src/$(LIBWEBSOCKETS_DIR): $(LIBWEBSOCKETS_TGZ_SOURCE) $(TOOLCHAIN_ARM_V7A) $(TARGET_ARM_V7A)/lib/libssl.a $(TARGET_ARM_V7A)/lib/libz.a
-$(MKDIR) -p $(TARGET_ARM_V7A)/src
$(TAR) xf $(LIBWEBSOCKETS_TGZ_SOURCE) -C $(TARGET_ARM_V7A)/src
-$(MKDIR) -p $(TARGET_ARM_V7A)/src/$(LIBWEBSOCKETS_DIR)/build
$(CD) $(TARGET_ARM_V7A)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_ARM_V7A_ENV) \
$(CMAKE) $(TARGET_ARM_V7A_LWS_OPTIONS) \
-DCMAKE_INSTALL_PREFIX=$(shell pwd)/$(TARGET_ARM_V7A) \
-DLWS_OPENSSL_LIBRARIES="$(shell pwd)/$(TARGET_ARM_V7A)/lib/libssl.a;$(shell pwd)/$(TARGET_ARM_V7A)/lib/libcrypto.a" \
-DLWS_OPENSSL_INCLUDE_DIRS="$(shell pwd)/$(TARGET_ARM_V7A)/include" \
..
$(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
-$(MKDIR) -p $(TARGET_ARM_V7A_HARD)/src
$(TAR) xf $(LIBWEBSOCKETS_TGZ_SOURCE) -C $(TARGET_ARM_V7A_HARD)/src
-$(MKDIR) -p $(TARGET_ARM_V7A_HARD)/src/$(LIBWEBSOCKETS_DIR)/build
$(CD) $(TARGET_ARM_V7A_HARD)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_ARM_V7A_HARD_ENV) \
$(CMAKE) $(TARGET_ARM_V7A_HARD_LWS_OPTIONS) \
-DCMAKE_INSTALL_PREFIX=$(shell pwd)/$(TARGET_ARM_V7A_HARD) \
-DLWS_OPENSSL_LIBRARIES="$(shell pwd)/$(TARGET_ARM_V7A_HARD)/lib/libssl.a;$(shell pwd)/$(TARGET_ARM_V7A_HARD)/lib/libcrypto.a" \
-DLWS_OPENSSL_INCLUDE_DIRS="$(shell pwd)/$(TARGET_ARM_V7A_HARD)/include" \
..
$(TARGET_ARM64_V8A)/src/$(LIBWEBSOCKETS_DIR): $(LIBWEBSOCKETS_TGZ_SOURCE) $(TOOLCHAIN_ARM64_V8A) $(TARGET_ARM64_V8A)/lib/libssl.a $(TARGET_ARM64_V8A)/lib/libz.a
-$(MKDIR) -p $(TARGET_ARM64_V8A)/src
$(TAR) xf $(LIBWEBSOCKETS_TGZ_SOURCE) -C $(TARGET_ARM64_V8A)/src
-$(MKDIR) -p $(TARGET_ARM64_V8A)/src/$(LIBWEBSOCKETS_DIR)/build
$(CD) $(TARGET_ARM64_V8A)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_ARM64_V8A_ENV) \
$(CMAKE) $(TARGET_ARM64_V8A_LWS_OPTIONS) \
-DCMAKE_INSTALL_PREFIX=$(shell pwd)/$(TARGET_ARM64_V8A) \
-DLWS_OPENSSL_LIBRARIES="$(shell pwd)/$(TARGET_ARM64_V8A)/lib/libssl.a;$(shell pwd)/$(TARGET_ARM64_V8A)/lib/libcrypto.a" \
-DLWS_OPENSSL_INCLUDE_DIRS="$(shell pwd)/$(TARGET_ARM64_V8A)/include" \
..
$(TARGET_MIPS)/src/$(LIBWEBSOCKETS_DIR): $(LIBWEBSOCKETS_TGZ_SOURCE) $(TOOLCHAIN_MIPS) $(TARGET_MIPS)/lib/libssl.a $(TARGET_MIPS)/lib/libz.a
-$(MKDIR) -p $(TARGET_MIPS)/src
$(TAR) xf $(LIBWEBSOCKETS_TGZ_SOURCE) -C $(TARGET_MIPS)/src
-$(MKDIR) -p $(TARGET_MIPS)/src/$(LIBWEBSOCKETS_DIR)/build
$(CD) $(TARGET_MIPS)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_MIPS_ENV) \
$(CMAKE) $(TARGET_MIPS_LWS_OPTIONS) \
-DCMAKE_INSTALL_PREFIX=$(shell pwd)/$(TARGET_MIPS) \
-DLWS_OPENSSL_LIBRARIES="$(shell pwd)/$(TARGET_MIPS)/lib/libssl.a;$(shell pwd)/$(TARGET_MIPS)/lib/libcrypto.a" \
-DLWS_OPENSSL_INCLUDE_DIRS="$(shell pwd)/$(TARGET_MIPS)/include" \
..
$(TARGET_MIPS64)/src/$(LIBWEBSOCKETS_DIR): $(LIBWEBSOCKETS_TGZ_SOURCE) $(TOOLCHAIN_MIPS64) $(TARGET_MIPS64)/lib/libssl.a $(TARGET_MIPS64)/lib/libz.a
-$(MKDIR) -p $(TARGET_MIPS64)/src
$(TAR) xf $(LIBWEBSOCKETS_TGZ_SOURCE) -C $(TARGET_MIPS64)/src
-$(MKDIR) -p $(TARGET_MIPS64)/src/$(LIBWEBSOCKETS_DIR)/build
$(CD) $(TARGET_MIPS64)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_MIPS64_ENV) \
$(CMAKE) $(TARGET_MIPS64_LWS_OPTIONS) \
-DCMAKE_INSTALL_PREFIX=$(shell pwd)/$(TARGET_MIPS64) \
-DLWS_OPENSSL_LIBRARIES="$(shell pwd)/$(TARGET_MIPS64)/lib/libssl.a;$(shell pwd)/$(TARGET_MIPS64)/lib/libcrypto.a" \
-DLWS_OPENSSL_INCLUDE_DIRS="$(shell pwd)/$(TARGET_MIPS64)/include" \
..
# Build/install library
$(TARGET_X86)/lib/libwebsockets.a: $(TARGET_X86)/src/$(LIBWEBSOCKETS_DIR)
$(CD) $(TARGET_X86)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_X86_ENV) $(MAKE)
$(CD) $(TARGET_X86)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_X86_ENV) $(MAKE) install
$(TARGET_X86_64)/lib/libwebsockets.a: $(TARGET_X86_64)/src/$(LIBWEBSOCKETS_DIR)
$(CD) $(TARGET_X86_64)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_X86_64_ENV) $(MAKE)
$(CD) $(TARGET_X86_64)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_X86_64_ENV) $(MAKE) install
$(TARGET_ARM)/lib/libwebsockets.a: $(TARGET_ARM)/src/$(LIBWEBSOCKETS_DIR)
$(CD) $(TARGET_ARM)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_ARM_ENV) $(MAKE)
$(CD) $(TARGET_ARM)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_ARM_ENV) $(MAKE) install
$(TARGET_ARM_V7A)/lib/libwebsockets.a: $(TARGET_ARM_V7A)/src/$(LIBWEBSOCKETS_DIR)
$(CD) $(TARGET_ARM_V7A)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_ARM_V7A_ENV) $(MAKE)
$(CD) $(TARGET_ARM_V7A)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_ARM_V7A_ENV) $(MAKE) install
$(TARGET_ARM_V7A_HARD)/lib/libwebsockets.a: $(TARGET_ARM_V7A_HARD)/src/$(LIBWEBSOCKETS_DIR)
$(CD) $(TARGET_ARM_V7A_HARD)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_ARM_V7A_HARD_ENV) $(MAKE)
$(CD) $(TARGET_ARM_V7A_HARD)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_ARM_V7A_HARD_ENV) $(MAKE) install
$(TARGET_ARM64_V8A)/lib/libwebsockets.a: $(TARGET_ARM64_V8A)/src/$(LIBWEBSOCKETS_DIR)
$(CD) $(TARGET_ARM64_V8A)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_ARM64_V8A_ENV) $(MAKE)
$(CD) $(TARGET_ARM64_V8A)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_ARM64_V8A_ENV) $(MAKE) install
$(TARGET_MIPS)/lib/libwebsockets.a: $(TARGET_MIPS)/src/$(LIBWEBSOCKETS_DIR)
$(CD) $(TARGET_MIPS)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_MIPS_ENV) $(MAKE)
$(CD) $(TARGET_MIPS)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_MIPS_ENV) $(MAKE) install
$(TARGET_MIPS64)/lib/libwebsockets.a: $(TARGET_MIPS64)/src/$(LIBWEBSOCKETS_DIR)
$(CD) $(TARGET_MIPS64)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_MIPS64_ENV) $(MAKE)
$(CD) $(TARGET_MIPS64)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_MIPS64_ENV) $(MAKE) install
#
# Some rules for housekeeping
#
clean-ndk:
$(NDK_ROOT)/ndk-build clean
clean: clean-targets clean-toolchains
dist-clean: clean clean-sources
clean-targets: \
clean-target-x86 \
clean-target-x86_64 \
clean-target-armeabi \
clean-target-armeabi-v7a \
clean-target-armeabi-v7a-hard \
clean-target-arm64-v8a \
clean-target-mips \
clean-target-mips64
clean-target-x86:
-$(RM) -fr $(TARGET_X86)
clean-target-x86_64:
-$(RM) -fr $(TARGET_X86_64)
clean-target-armeabi:
-$(RM) -fr $(TARGET_ARM)
clean-target-armeabi-v7a:
-$(RM) -fr $(TARGET_ARM_V7A)
clean-target-armeabi-v7a-hard:
-$(RM) -fr $(TARGET_ARM_V7A_HARD)
clean-target-arm64-v8a:
-$(RM) -fr $(TARGET_ARM64_V8A)
clean-target-mips:
-$(RM) -fr $(TARGET_MIPS)
clean-target-mips64:
-$(RM) -fr $(TARGET_MIPS64)
clean-sources: \
clean-source-zlib \
clean-source-openssl \
clean-source-libwebsockets
clean-source-zlib:
-$(RM) $(ZLIB_TGZ_SOURCE)
clean-source-openssl:
-$(RM) $(OPENSSL_TGZ_SOURCE)
clean-source-libwebsockets:
-$(RM) $(LIBWEBSOCKETS_TGZ_SOURCE)
clean-toolchains: \
clean-toolchain-x86 \
clean-toolchain-x86_64 \
clean-toolchain-armeabi \
clean-toolchain-armeabi-v7a \
clean-toolchain-armeabi-v7a-hard \
clean-toolchain-arm64-v8a \
clean-toolchain-mips \
clean-toolchain-mips64
-$(RM) -fr toolchains
clean-toolchain-x86:
-$(RM) -fr $(TOOLCHAIN_X86)
clean-toolchain-x86_64:
-$(RM) -fr $(TOOLCHAIN_X86_64)
clean-toolchain-armeabi:
-$(RM) -fr $(TOOLCHAIN_ARM)
clean-toolchain-armeabi-v7a:
-$(RM) -fr $(TOOLCHAIN_ARM_V7A)
clean-toolchain-armeabi-v7a-hard:
-$(RM) -fr $(TOOLCHAIN_ARM_V7A_HARD)
clean-toolchain-arm64-v8a:
-$(RM) -fr $(TOOLCHAIN_ARM64_V8A)
clean-toolchain-mips:
-$(RM) -fr $(TOOLCHAIN_MIPS)
clean-toolchain-mips64:
-$(RM) -fr $(TOOLCHAIN_MIPS64)
# 'make list-targets' prints a list of all targets.
# Thanks to: http://stackoverflow.com/questions/4219255/how-do-you-get-the-list-of-targets-in-a-makefile
# Modified to allow us to include files in this Makefile.
list-targets: MAKE_NO_INCLUDES := 1
export MAKE_NO_INCLUDES
list-targets:
@$(MAKE) -s list-targets-no-includes
list-targets-no-includes:
@$(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 '^$@$$'