config-android.cmake 7.67 KB
Newer Older
Ghislain MARY's avatar
Ghislain MARY committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
############################################################################
# config-android.cmake
# Copyright (C) 2016  Belledonne Communications, Grenoble France
#
############################################################################
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
19
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
Ghislain MARY's avatar
Ghislain MARY committed
20 21 22
#
############################################################################

23
# Define options that are specific to the android config
24
lcb_add_option("Arch suffix" "Append the android abi to shared libraries" ON)
25 26 27
lcb_add_dependent_option("Embedded OpenH264" "Embed the openh264 library instead of downloading it from Cisco." "${DEFAULT_VALUE_ENABLE_EMBEDDED_OPENH264}" "ENABLE_OPENH264" OFF)


Ghislain MARY's avatar
Ghislain MARY committed
28
# Define default values for the linphone builder options
29
set(DEFAULT_VALUE_ENABLE_FFMPEG OFF)
Ghislain MARY's avatar
Ghislain MARY committed
30 31 32 33
set(DEFAULT_VALUE_ENABLE_GPL_THIRD_PARTIES ON)
set(DEFAULT_VALUE_ENABLE_GSM ON)
set(DEFAULT_VALUE_ENABLE_ILBC ON)
set(DEFAULT_VALUE_ENABLE_ISAC ON)
Erwan Croze's avatar
Erwan Croze committed
34
set(DEFAULT_VALUE_ENABLE_JPEG ON)
35
set(DEFAULT_VALUE_ENABLE_MBEDTLS ON)
Ghislain MARY's avatar
Ghislain MARY committed
36 37
set(DEFAULT_VALUE_ENABLE_MKV ON)
set(DEFAULT_VALUE_ENABLE_OPUS ON)
Erwan Croze's avatar
Erwan Croze committed
38
set(DEFAULT_VALUE_ENABLE_SILK OFF)
Ghislain MARY's avatar
Ghislain MARY committed
39
set(DEFAULT_VALUE_ENABLE_SPEEX ON)
40
set(DEFAULT_VALUE_ENABLE_G729 ${DEFAULT_VALUE_ENABLE_GPL_THIRD_PARTIES})
41
set(DEFAULT_VALUE_ENABLE_G729B_CNG OFF)
Ghislain MARY's avatar
Ghislain MARY committed
42 43
set(DEFAULT_VALUE_ENABLE_SRTP ON)
set(DEFAULT_VALUE_ENABLE_UNIT_TESTS ON)
Sylvain Berfini's avatar
Sylvain Berfini committed
44
set(DEFAULT_VALUE_ENABLE_VCARD ON)
Ghislain MARY's avatar
Ghislain MARY committed
45 46
set(DEFAULT_VALUE_ENABLE_VIDEO ON)
set(DEFAULT_VALUE_ENABLE_VPX ON)
47
set(DEFAULT_VALUE_ENABLE_WEBRTC_AECM ON)
48
set(DEFAULT_VALUE_ENABLE_WEBRTC_AEC ON)
Ghislain MARY's avatar
Ghislain MARY committed
49
set(DEFAULT_VALUE_ENABLE_ZRTP ON)
Brieuc Viel's avatar
Brieuc Viel committed
50
set(DEFAULT_VALUE_ENABLE_LIME ON)
51
set(DEFAULT_VALUE_ENABLE_TOOLS OFF)
Sylvain Berfini's avatar
Sylvain Berfini committed
52
set(DEFAULT_VALUE_ENABLE_JAVA_WRAPPER ON)
53
set(ENABLE_NLS NO CACHE BOOL "" FORCE)
Ghislain MARY's avatar
Ghislain MARY committed
54 55 56 57 58 59 60

set(DEFAULT_VALUE_CMAKE_LINKING_TYPE "-DENABLE_STATIC=YES" "-DENABLE_SHARED=NO")
set(DEFAULT_VALUE_CMAKE_PLUGIN_LINKING_TYPE "-DENABLE_STATIC=NO" "-DENABLE_SHARED=YES")


# Global configuration
set(LINPHONE_BUILDER_HOST "${CMAKE_SYSTEM_PROCESSOR}-linux-android")
Ghislain MARY's avatar
Ghislain MARY committed
61
set(CMAKE_INSTALL_RPATH "$ORIGIN")
62 63 64 65 66 67 68 69 70 71
if(CMAKE_SYSTEM_PROCESSOR STREQUAL "armv5te")
	if(ENABLE_VIDEO)
		message(STATUS "Disabling video for armv6")
		set(ENABLE_VIDEO NO CACHE BOOL "" FORCE)
		set(ENABLE_FFMPEG NO CACHE BOOL "" FORCE)
		set(ENABLE_OPENH264 NO CACHE BOOL "" FORCE)
		set(ENABLE_VPX NO CACHE BOOL "" FORCE)
		set(ENABLE_X264 NO CACHE BOOL "" FORCE)
	endif()
	set(ENABLE_WEBRTC_AEC NO CACHE BOOL "" FORCE)
72
endif()
Ghislain MARY's avatar
Ghislain MARY committed
73

74

Ghislain MARY's avatar
Ghislain MARY committed
75 76 77 78 79
# Include builders
include(builders/CMakeLists.txt)


# bctoolbox
80
lcb_builder_linking_type(bctoolbox "-DENABLE_STATIC=NO" "-DENABLE_SHARED=YES")
Ghislain MARY's avatar
Ghislain MARY committed
81
lcb_builder_cmake_options(bctoolbox "-DENABLE_TESTS=NO")
Ghislain MARY's avatar
Ghislain MARY committed
82

83 84 85 86
# belcard
lcb_builder_cmake_options(belcard "-DENABLE_TOOLS=NO")
lcb_builder_cmake_options(belcard "-DENABLE_UNIT_TESTS=NO")

Ghislain MARY's avatar
Ghislain MARY committed
87
# belle-sip
Ghislain MARY's avatar
Ghislain MARY committed
88
lcb_builder_cmake_options(bellesip "-DENABLE_TESTS=NO")
Ghislain MARY's avatar
Ghislain MARY committed
89

90 91 92
# belr
lcb_builder_cmake_options(belr "-DENABLE_TESTS=NO")

Ghislain MARY's avatar
Ghislain MARY committed
93
# bzrtp
Ghislain MARY's avatar
Ghislain MARY committed
94
lcb_builder_cmake_options(bzrtp "-DENABLE_TESTS=NO")
Ghislain MARY's avatar
Ghislain MARY committed
95 96

# codec2
Ghislain MARY's avatar
Ghislain MARY committed
97
lcb_builder_extra_cflags(codec2 "-ffast-math")
Ghislain MARY's avatar
Ghislain MARY committed
98 99

# ffmpeg
Ghislain MARY's avatar
Ghislain MARY committed
100
lcb_builder_linking_type(ffmpeg "--enable-static" "--disable-shared" "--enable-pic")
Ghislain MARY's avatar
Ghislain MARY committed
101

102 103 104
# lime
lcb_builder_cmake_options(lime "-DENABLE_UNIT_TESTS=NO")

Ghislain MARY's avatar
Ghislain MARY committed
105
# linphone
Ghislain MARY's avatar
Ghislain MARY committed
106 107 108 109 110 111 112 113
lcb_builder_cmake_options(linphone "-DENABLE_RELATIVE_PREFIX=YES")
lcb_builder_cmake_options(linphone "-DENABLE_CONSOLE_UI=NO")
lcb_builder_cmake_options(linphone "-DENABLE_DAEMON=NO")
lcb_builder_cmake_options(linphone "-DENABLE_NOTIFY=NO")
lcb_builder_cmake_options(linphone "-DENABLE_TUTORIALS=NO")
lcb_builder_cmake_options(linphone "-DENABLE_UPNP=NO")
lcb_builder_cmake_options(linphone "-DENABLE_MSG_STORAGE=YES")
lcb_builder_cmake_options(linphone "-DENABLE_DOC=NO")
Ghislain MARY's avatar
Ghislain MARY committed
114
lcb_builder_linking_type(linphone "-DENABLE_STATIC=NO" "-DENABLE_SHARED=YES")
Ghislain MARY's avatar
Ghislain MARY committed
115

116
# mbedtls
Ghislain MARY's avatar
Ghislain MARY committed
117
lcb_builder_linking_type(mbedtls "-DUSE_STATIC_MBEDTLS_LIBRARY=YES" "-DUSE_SHARED_MBEDTLS_LIBRARY=NO")
118

Ghislain MARY's avatar
Ghislain MARY committed
119
# mediastreamer2
Ghislain MARY's avatar
Ghislain MARY committed
120 121 122 123 124 125 126 127 128 129
lcb_builder_cmake_options(ms2 "-DENABLE_RELATIVE_PREFIX=YES")
lcb_builder_cmake_options(ms2 "-DENABLE_ALSA=NO")
lcb_builder_cmake_options(ms2 "-DENABLE_ANDROIDSND=YES")
lcb_builder_cmake_options(ms2 "-DENABLE_PULSEAUDIO=NO")
lcb_builder_cmake_options(ms2 "-DENABLE_OSS=NO")
lcb_builder_cmake_options(ms2 "-DENABLE_GLX=NO")
lcb_builder_cmake_options(ms2 "-DENABLE_V4L=NO")
lcb_builder_cmake_options(ms2 "-DENABLE_X11=NO")
lcb_builder_cmake_options(ms2 "-DENABLE_XV=NO")
lcb_builder_cmake_options(ms2 "-DENABLE_DOC=NO")
130
lcb_builder_cmake_options(ms2 "-DENABLE_UNIT_TESTS=NO")
Ghislain MARY's avatar
Ghislain MARY committed
131
lcb_builder_linking_type(ms2 "-DENABLE_STATIC=NO" "-DENABLE_SHARED=YES")
Ghislain MARY's avatar
Ghislain MARY committed
132

Erwan Croze's avatar
Erwan Croze committed
133
# openh264
134 135 136
if(NOT ENABLE_EMBEDDED_OPENH264)
	lcb_builder_linking_type(openh264 "-shared")
endif()
Erwan Croze's avatar
Erwan Croze committed
137

Ghislain MARY's avatar
Ghislain MARY committed
138
# opus
Ghislain MARY's avatar
Ghislain MARY committed
139
lcb_builder_cmake_options(opus "-DENABLE_FIXED_POINT=YES")
140 141 142 143
if(CMAKE_SYSTEM_PROCESSOR STREQUAL "armv5te")
	lcb_builder_cmake_options(opus "-DENABLE_ASM=NO")
	lcb_builder_cmake_options(opus "-DENABLE_INTRINSICS=NO")
endif()
Ghislain MARY's avatar
Ghislain MARY committed
144 145

# ortp
Ghislain MARY's avatar
Ghislain MARY committed
146
lcb_builder_cmake_options(ortp "-DENABLE_DOC=NO")
Ghislain MARY's avatar
Ghislain MARY committed
147
lcb_builder_linking_type(ortp "-DENABLE_STATIC=NO" "-DENABLE_SHARED=YES")
Ghislain MARY's avatar
Ghislain MARY committed
148 149

# polarssl
Ghislain MARY's avatar
Ghislain MARY committed
150
lcb_builder_linking_type(polarssl "-DUSE_SHARED_POLARSSL_LIBRARY=NO")
Ghislain MARY's avatar
Ghislain MARY committed
151

152
# soci
153
lcb_builder_linking_type(soci "-DSOCI_STATIC=YES" "-DSOCI_SHARED=NO")
154

Ghislain MARY's avatar
Ghislain MARY committed
155
# speex
Ghislain MARY's avatar
Ghislain MARY committed
156 157
lcb_builder_cmake_options(speex "-DENABLE_FLOAT_API=NO")
lcb_builder_cmake_options(speex "-DENABLE_FIXED_POINT=YES")
158
if(CMAKE_SYSTEM_PROCESSOR STREQUAL "armv7-a")
Ghislain MARY's avatar
Ghislain MARY committed
159
	lcb_builder_cmake_options(speex "-DENABLE_ARM_NEON_INTRINSICS=YES")
160
endif()
Ghislain MARY's avatar
Ghislain MARY committed
161 162

# vpx
Ghislain MARY's avatar
Ghislain MARY committed
163
lcb_builder_linking_type(vpx "--enable-static" "--disable-shared")
Ghislain MARY's avatar
Ghislain MARY committed
164 165

# x264
Ghislain MARY's avatar
Ghislain MARY committed
166 167
lcb_builder_linking_type(x264 "--enable-static" "--enable-pic")
lcb_builder_install_target(x264 "install-lib-static")
Ghislain MARY's avatar
Ghislain MARY committed
168 169


170
# Copy c++ library to install prefix
171 172 173 174 175 176 177 178 179 180 181 182 183
file(COPY "${CMAKE_ANDROID_NDK}/sources/cxx-stl/llvm-libc++/libs/${CMAKE_ANDROID_ARCH_ABI}/libc++_shared.so"
	DESTINATION "${CMAKE_INSTALL_PREFIX}/lib"
)
if(ENABLE_SANITIZER)
	set(SANITIZER_ARCH ${CMAKE_SYSTEM_PROCESSOR})
	if(SANITIZER_ARCH MATCHES "^arm")
		set(SANITIZER_ARCH "arm")
	endif()
	file(GLOB_RECURSE _clang_rt_library "${CMAKE_ANDROID_NDK}/toolchains/llvm/prebuilt/${ANDROID_HOST_TAG}/*/clang/*/lib/linux/libclang_rt.asan-${SANITIZER_ARCH}-android.so")
	if(_clang_rt_library)
		list(GET _clang_rt_library 0 _clang_rt_library)
		file(COPY ${_clang_rt_library} DESTINATION "${CMAKE_INSTALL_PREFIX}/lib")
		configure_file("${CMAKE_CURRENT_SOURCE_DIR}/configs/android/wrap.sh.cmake" "${CMAKE_INSTALL_PREFIX}/lib/wrap.sh" @ONLY)
184
	endif()
185
endif()
186 187


Ghislain MARY's avatar
Ghislain MARY committed
188 189 190 191 192 193 194 195 196 197 198 199 200 201
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
	# GDB server setup
	linphone_builder_apply_flags()
	linphone_builder_set_ep_directories(gdbserver)
	linphone_builder_expand_external_project_vars()
	ExternalProject_Add(TARGET_gdbserver
		DEPENDS TARGET_linphone_builder
		TMP_DIR ${ep_tmp}
		BINARY_DIR ${ep_build}
		SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/android/gdbserver"
		DOWNLOAD_COMMAND ""
		CMAKE_GENERATOR ${CMAKE_GENERATOR}
		CMAKE_ARGS ${LINPHONE_BUILDER_EP_ARGS} -DANDROID_NDK_PATH=${ANDROID_NDK_PATH} -DARCHITECTURE=${ARCHITECTURE}
	)
202 203 204 205 206 207

	# Dummy stript to not strip compiled libs from the general Makefile
	file(WRITE "${LINPHONE_BUILDER_WORK_DIR}/strip.sh" "")
else()
	# Script to be able to strip compiled libs from the general Makefile
	configure_file("${CMAKE_CURRENT_LIST_DIR}/android/strip.sh.cmake" "${LINPHONE_BUILDER_WORK_DIR}/strip.sh" @ONLY)
Ghislain MARY's avatar
Ghislain MARY committed
208
endif()