CMakeLists.txt 8.69 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
############################################################################
# CMakeLists.txt
# Copyright (C) 2014  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.
20 21 22
#
############################################################################

23
if(MSVC AND NOT CMAKE_SYSTEM_NAME STREQUAL "WindowsPhone" AND NOT CMAKE_SYSTEM_NAME STREQUAL "WindowsStore")
24 25 26
	find_library(LIBGCC NAMES gcc)
	find_library(LIBMINGWEX NAMES mingwex)
endif()
Ghislain MARY's avatar
Ghislain MARY committed
27

28
if(NOT WIN32)
29
	find_package(Iconv QUIET)
30
endif()
31 32 33 34
if(ANDROID)
	find_package(CpuFeatures REQUIRED)
	find_package(Support REQUIRED)
endif()
Ghislain MARY's avatar
Ghislain MARY committed
35

36

37
list(APPEND LINPHONE_PRIVATE_HEADER_FILES
38
	bellesip_sal/sal_impl.h
39 40 41 42 43 44 45
	carddav.h
	conference_private.h
	contact_providers_priv.h
	enum.h
	lime.h
	lpc2xml.h
	offeranswer.h
46
	private.h
47 48 49 50
	quality_reporting.h
	sqlite3_bctbx_vfs.h
	vcard_private.h
	xml2lpc.h
51 52
)

53
set(LINPHONE_SOURCE_FILES_C
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
	account_creator.c
	account_creator_service.c
	authentication.c
	bellesip_sal/sal_address_impl.c
	bellesip_sal/sal_impl.c
	bellesip_sal/sal_op_call.c
	bellesip_sal/sal_op_call_transfer.c
	bellesip_sal/sal_op_events.c
	bellesip_sal/sal_op_impl.c
	bellesip_sal/sal_op_info.c
	bellesip_sal/sal_op_message.c
	bellesip_sal/sal_op_presence.c
	bellesip_sal/sal_op_publish.c
	bellesip_sal/sal_op_registration.c
	bellesip_sal/sal_sdp.c
	buffer.c
	callbacks.c
	call_log.c
	call_params.c
	carddav.c
	chat.c
	chat_file_transfer.c
	contactprovider.c
	content.c
	dial_plan.c
	dict.c
	ec-calibrator.c
	echo-tester.c
	enum.c
	error_info.c
	event.c
	factory.c
	friend.c
	friendlist.c
	im_notif_policy.c
	info.c
	ldapprovider.c
	lime.c
	im_encryption_engine.c
	linphonecall.c
	linphonecore.c
	linphone_tunnel_config.c
	localplayer.c
	lpc2xml.c
	lpconfig.c
	lsd.c
	message_storage.c
	misc.c
	nat_policy.c
	offeranswer.c
	payload_type.c
	player.c
	presence.c
	proxy.c
	quality_reporting.c
	remote_provisioning.c
	ringtoneplayer.c
	sal.c
	siplogin.c
	sipsetup.c
	sqlite3_bctbx_vfs.c
	video_definition.c
	xml2lpc.c
	xml.c
	xmlrpc.c
	vtables.c
120
)
Ronan's avatar
Ronan committed
121 122 123
set(LINPHONE_SOURCE_FILES_CXX
	conference.cc
)
124 125 126 127
if(ANDROID)
	list(APPEND LINPHONE_SOURCE_FILES_CXX linphonecore_jni.cc)
	set_source_files_properties(linphonecore_jni.cc PROPERTIES COMPILE_DEFINITIONS "USE_JAVAH")
endif()
128

129 130 131
set(LINPHONE_SOURCE_FILES_OBJC)
if (IOS)
	list(APPEND LINPHONE_SOURCE_FILES_OBJC ringtoneplayer_ios.m ringtoneplayer_ios.h)
132
	list(APPEND LINPHONE_SOURCE_FILES_CXX linphonecore_ios.cc)
133 134
endif()

135

136
if(ENABLE_TUNNEL)
137
	list(APPEND LINPHONE_SOURCE_FILES_CXX
138
		linphone_tunnel.cc
139 140 141
		TunnelManager.cc
	)
	add_definitions(-DTUNNEL_ENABLED)
142
else()
143
	list(APPEND LINPHONE_SOURCE_FILES_C linphone_tunnel_stubs.c)
144 145
endif()

146
bc_git_version(liblinphone ${PROJECT_VERSION})
147 148 149 150 151 152

add_definitions(
	-DUSE_BELLESIP
	-DLIBLINPHONE_EXPORTS
)

153
set(LIBS
154
	${BCTOOLBOX_CORE_LIBRARIES}
155
	${BELLESIP_LIBRARIES}
156
	${MEDIASTREAMER2_LIBRARIES}
Ghislain MARY's avatar
Ghislain MARY committed
157
	${ORTP_LIBRARIES}
158
	${XML2_LIBRARIES}
Ronan's avatar
Ronan committed
159
	${BELR_LIBRARIES}
160
)
161
if(WIN32 AND NOT CMAKE_SYSTEM_NAME STREQUAL "WindowsStore")
François Grisez's avatar
François Grisez committed
162 163
	list(APPEND LIBS "Ws2_32")
endif()
164 165 166
if(ENABLE_LIME)
	list(APPEND LIBS ${BZRTP_LIBRARIES})
endif()
167 168 169
if(ZLIB_FOUND)
	list(APPEND LIBS ${ZLIB_LIBRARIES})
endif()
170 171 172
if(SOCI_FOUND)
	list(APPEND LIBS ${SOCI_LIBRARIES})
endif()
173 174 175
if(SQLITE3_FOUND)
	list(APPEND LIBS ${SQLITE3_LIBRARIES})
endif()
Ghislain MARY's avatar
Ghislain MARY committed
176 177 178
if(ICONV_FOUND)
	list(APPEND LIBS ${ICONV_LIBRARIES})
endif()
179 180 181
if(ENABLE_TUNNEL)
	list(APPEND LIBS ${TUNNEL_LIBRARIES})
endif()
182
if(MSVC AND NOT CMAKE_SYSTEM_NAME STREQUAL "WindowsPhone" AND NOT CMAKE_SYSTEM_NAME STREQUAL "WindowsStore")
183 184
	list(APPEND LIBS ${LIBGCC} ${LIBMINGWEX})
endif()
185
if(WIN32 AND NOT CMAKE_SYSTEM_NAME STREQUAL "WindowsPhone" AND NOT CMAKE_SYSTEM_NAME STREQUAL "WindowsStore")
186 187
	list(APPEND LIBS shlwapi)
endif()
188
if(INTL_FOUND)
189 190
	list(APPEND LIBS ${INTL_LIBRARIES})
endif()
191 192
if(BELCARD_FOUND)
	list(APPEND LIBS ${BELCARD_LIBRARIES})
193
	list(APPEND LINPHONE_SOURCE_FILES_CXX vcard.cc)
194 195 196
	if(NOT MSVC)
		list(APPEND STRICT_OPTIONS_CXX "-std=c++11")
	endif()
197 198 199
	if(APPLE)
		list(APPEND STRICT_OPTIONS_CXX "-stdlib=libc++")
	endif()
200
else()
201
	list(APPEND LINPHONE_SOURCE_FILES_C vcard_stubs.c)
202
endif()
203

204 205
set_source_files_properties(${LINPHONE_SOURCE_FILES_C} PROPERTIES LANGUAGE CXX)
bc_apply_compile_flags(LINPHONE_SOURCE_FILES_C STRICT_OPTIONS_CPP STRICT_OPTIONS_CXX)
206 207
bc_apply_compile_flags(LINPHONE_SOURCE_FILES_CXX STRICT_OPTIONS_CPP STRICT_OPTIONS_CXX)
bc_apply_compile_flags(LINPHONE_SOURCE_FILES_OBJC STRICT_OPTIONS_CPP STRICT_OPTIONS_OBJC)
208

209
if(ENABLE_STATIC)
210 211 212 213
	add_library(linphone-static STATIC ${LINPHONE_HEADER_FILES} ${LINPHONE_PRIVATE_HEADER_FILES}
		${LINPHONE_SOURCE_FILES_C} ${LINPHONE_SOURCE_FILES_CXX} ${LINPHONE_SOURCE_FILES_OBJC}
		$<TARGET_OBJECTS:linphone-cxx-objects-static>
	)
214
	set_target_properties(linphone-static PROPERTIES OUTPUT_NAME linphone)
215
	add_dependencies(linphone-static liblinphone-git-version)
216 217
	target_include_directories(linphone-static PUBLIC ${LINPHONE_INCLUDE_DIRS})
	target_link_libraries(linphone-static INTERFACE ${LIBS})
218 219 220
	if(ANDROID)
		add_dependencies(linphone-static linphonecore-jni-header)
	endif()
221
	if(IOS)
222
		target_link_libraries(linphone-static INTERFACE "-framework Foundation" "-framework AVFoundation")
223 224 225 226 227 228 229
	endif()
	install(TARGETS linphone-static EXPORT ${EXPORT_TARGETS_NAME}Targets
		ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
		PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
	)
endif()
if(ENABLE_SHARED)
230 231 232 233
	add_library(linphone SHARED ${LINPHONE_HEADER_FILES} ${LINPHONE_PRIVATE_HEADER_FILES}
		${LINPHONE_SOURCE_FILES_C} ${LINPHONE_SOURCE_FILES_CXX} ${LINPHONE_SOURCE_FILES_OBJC}
		$<TARGET_OBJECTS:linphone-cxx-objects>
	)
234
	if(IOS)
235 236 237 238 239 240
		if(IOS)
			set(MIN_OS ${LINPHONE_IOS_DEPLOYMENT_TARGET})
		else()
			set(MIN_OS ${CMAKE_OSX_DEPLOYMENT_TARGET})
		endif()
		set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/build/osx/")
241 242
		set_target_properties(linphone PROPERTIES
			FRAMEWORK TRUE
243 244
			MACOSX_FRAMEWORK_IDENTIFIER org.linphone.linphone
  			MACOSX_FRAMEWORK_INFO_PLIST Info.plist.in
245
			PUBLIC_HEADER "${LINPHONE_HEADER_FILES}"
246
		)
247
	endif()
248 249
	if(BELCARD_FOUND)
		if(APPLE)
250 251
			set_target_properties(linphone PROPERTIES LINK_FLAGS "-stdlib=libc++")
		endif()
252 253
	endif()

254 255 256 257 258
	set_target_properties(linphone PROPERTIES LINKER_LANGUAGE CXX)
	if(NOT ANDROID)
		# Do not version shared library on Android
		set_target_properties(linphone PROPERTIES SOVERSION ${LINPHONE_SO_VERSION})
	endif()
259
	add_dependencies(linphone liblinphone-git-version)
260
	target_include_directories(linphone PUBLIC ${LINPHONE_INCLUDE_DIRS})
261
	target_link_libraries(linphone PRIVATE ${LIBS})
262 263
	if(WIN32 AND CMAKE_SYSTEM_NAME STREQUAL "WindowsPhone" AND NOT CMAKE_SYSTEM_NAME STREQUAL "WindowsStore")
		set_target_properties(linphone PROPERTIES PREFIX "lib")
264
	elseif(ANDROID)
265
		target_link_libraries(linphone PUBLIC "log" ${SUPPORT_LIBRARIES} ${CPUFEATURES_LIBRARIES})
266
		add_dependencies(linphone linphonecore-jni-header)
267
	endif()
268
	if(MSVC)
269 270
		if(CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
			install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}/linphone.pdb
271
				DESTINATION ${CMAKE_INSTALL_BINDIR}
272 273 274 275
				PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
			)
		endif()
	endif()
276 277 278 279
	install(TARGETS linphone EXPORT ${EXPORT_TARGETS_NAME}Targets
		RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
		LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
		ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
280
		FRAMEWORK DESTINATION Frameworks
281 282
		PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
	)
283
endif()
Ghislain MARY's avatar
Ghislain MARY committed
284
if(ICONV_FOUND)
285 286
	if(APPLE)
		# Prevent conflict between the system iconv.h header and the one from macports.
287 288 289 290 291 292
		if(ENABLE_STATIC)
			target_compile_options(linphone-static PRIVATE "-include" "${ICONV_INCLUDE_DIRS}/iconv.h")
		endif()
		if(ENABLE_SHARED)
			target_compile_options(linphone PRIVATE "-include" "${ICONV_INCLUDE_DIRS}/iconv.h")
		endif()
293
	else()
294 295 296 297 298 299
		if(ENABLE_STATIC)
			target_include_directories(linphone-static PRIVATE ${ICONV_INCLUDE_DIRS})
		endif()
		if(ENABLE_SHARED)
			target_include_directories(linphone PRIVATE ${ICONV_INCLUDE_DIRS})
		endif()
300
	endif()
Ghislain MARY's avatar
Ghislain MARY committed
301
endif()
302

303
add_subdirectory(help)