CMakeLists.txt 9.15 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
set(LINPHONE_PRIVATE_HEADER_FILES
Ronan's avatar
Ronan committed
38 39 40 41 42 43 44 45
	../src/cpim/cpim.h
	../src/cpim/header/cpim-core-headers.h
	../src/cpim/header/cpim-generic-header.h
	../src/cpim/header/cpim-header-p.h
	../src/cpim/header/cpim-header.h
	../src/cpim/message/cpim-message.h
	../src/cpim/parser/cpim-grammar.h
	../src/cpim/parser/cpim-parser.h
46 47 48
	../src/object/object.h
	../src/object/singleton.h
	../src/utils/general.h
Ronan's avatar
Ronan committed
49
	../src/utils/utils.h
50
	bellesip_sal/sal_impl.h
51 52 53 54 55 56 57
	carddav.h
	conference_private.h
	contact_providers_priv.h
	enum.h
	lime.h
	lpc2xml.h
	offeranswer.h
58
	private.h
59 60 61 62
	quality_reporting.h
	sqlite3_bctbx_vfs.h
	vcard_private.h
	xml2lpc.h
63 64
)

65
set(LINPHONE_SOURCE_FILES_C
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 120 121 122 123 124 125 126 127 128 129 130 131 132
	account_creator.c
	account_creator_service.c
	address.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
133
)
Ronan's avatar
Ronan committed
134 135 136 137 138 139 140 141 142 143
set(LINPHONE_SOURCE_FILES_CXX
	../src/cpim/header/cpim-core-headers.cpp
	../src/cpim/header/cpim-generic-header.cpp
	../src/cpim/header/cpim-header.cpp
	../src/cpim/message/cpim-message.cpp
	../src/cpim/parser/cpim-grammar.cpp
	../src/cpim/parser/cpim-parser.cpp
	../src/utils/utils.cpp
	conference.cc
)
144 145 146 147
if(ANDROID)
	list(APPEND LINPHONE_SOURCE_FILES_CXX linphonecore_jni.cc)
	set_source_files_properties(linphonecore_jni.cc PROPERTIES COMPILE_DEFINITIONS "USE_JAVAH")
endif()
148

149 150 151
set(LINPHONE_SOURCE_FILES_OBJC)
if (IOS)
	list(APPEND LINPHONE_SOURCE_FILES_OBJC ringtoneplayer_ios.m ringtoneplayer_ios.h)
152
	list(APPEND LINPHONE_SOURCE_FILES_CXX linphonecore_ios.cc)
153 154
endif()

155

156
if(ENABLE_TUNNEL)
157
	list(APPEND LINPHONE_SOURCE_FILES_CXX
158
		linphone_tunnel.cc
159 160 161
		TunnelManager.cc
	)
	add_definitions(-DTUNNEL_ENABLED)
162
else()
163
	list(APPEND LINPHONE_SOURCE_FILES_C linphone_tunnel_stubs.c)
164 165
endif()

166
bc_git_version(liblinphone ${PROJECT_VERSION})
167 168 169 170 171 172

add_definitions(
	-DUSE_BELLESIP
	-DLIBLINPHONE_EXPORTS
)

173
set(LIBS
174
	${BCTOOLBOX_CORE_LIBRARIES}
175
	${BELLESIP_LIBRARIES}
176
	${MEDIASTREAMER2_LIBRARIES}
Ghislain MARY's avatar
Ghislain MARY committed
177
	${ORTP_LIBRARIES}
178
	${XML2_LIBRARIES}
Ronan's avatar
Ronan committed
179
	${BELR_LIBRARIES}
180
)
181
if(WIN32 AND NOT CMAKE_SYSTEM_NAME STREQUAL "WindowsStore")
François Grisez's avatar
François Grisez committed
182 183
	list(APPEND LIBS "Ws2_32")
endif()
184 185 186
if(ENABLE_LIME)
	list(APPEND LIBS ${BZRTP_LIBRARIES})
endif()
187 188 189
if(ZLIB_FOUND)
	list(APPEND LIBS ${ZLIB_LIBRARIES})
endif()
190 191 192
if(SQLITE3_FOUND)
	list(APPEND LIBS ${SQLITE3_LIBRARIES})
endif()
Ghislain MARY's avatar
Ghislain MARY committed
193 194 195
if(ICONV_FOUND)
	list(APPEND LIBS ${ICONV_LIBRARIES})
endif()
196 197 198
if(ENABLE_TUNNEL)
	list(APPEND LIBS ${TUNNEL_LIBRARIES})
endif()
199
if(MSVC AND NOT CMAKE_SYSTEM_NAME STREQUAL "WindowsPhone" AND NOT CMAKE_SYSTEM_NAME STREQUAL "WindowsStore")
200 201
	list(APPEND LIBS ${LIBGCC} ${LIBMINGWEX})
endif()
202
if(WIN32 AND NOT CMAKE_SYSTEM_NAME STREQUAL "WindowsPhone" AND NOT CMAKE_SYSTEM_NAME STREQUAL "WindowsStore")
203 204
	list(APPEND LIBS shlwapi)
endif()
205
if(INTL_FOUND)
206 207
	list(APPEND LIBS ${INTL_LIBRARIES})
endif()
208 209
if(BELCARD_FOUND)
	list(APPEND LIBS ${BELCARD_LIBRARIES})
210
	list(APPEND LINPHONE_SOURCE_FILES_CXX vcard.cc)
211 212 213
	if(NOT MSVC)
		list(APPEND STRICT_OPTIONS_CXX "-std=c++11")
	endif()
214 215 216
	if(APPLE)
		list(APPEND STRICT_OPTIONS_CXX "-stdlib=libc++")
	endif()
217
else()
218
	list(APPEND LINPHONE_SOURCE_FILES_C vcard_stubs.c)
219
endif()
220

221 222
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)
223 224
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)
225

226
if(ENABLE_STATIC)
227
	add_library(linphone-static STATIC ${LINPHONE_HEADER_FILES} ${LINPHONE_PRIVATE_HEADER_FILES} ${LINPHONE_SOURCE_FILES_C} ${LINPHONE_SOURCE_FILES_CXX} ${LINPHONE_SOURCE_FILES_OBJC})
228
	set_target_properties(linphone-static PROPERTIES OUTPUT_NAME linphone)
229
	add_dependencies(linphone-static liblinphone-git-version)
230 231
	target_include_directories(linphone-static PUBLIC ${LINPHONE_INCLUDE_DIRS})
	target_link_libraries(linphone-static INTERFACE ${LIBS})
232 233 234
	if(ANDROID)
		add_dependencies(linphone-static linphonecore-jni-header)
	endif()
235
	if(IOS)
236
		target_link_libraries(linphone-static INTERFACE "-framework Foundation" "-framework AVFoundation")
237 238 239 240 241 242 243
	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)
244
	add_library(linphone SHARED ${LINPHONE_HEADER_FILES} ${LINPHONE_PRIVATE_HEADER_FILES} ${LINPHONE_SOURCE_FILES_C} ${LINPHONE_SOURCE_FILES_CXX} ${LINPHONE_SOURCE_FILES_OBJC})
245
	if(IOS)
246 247 248 249 250 251
		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/")
252 253
		set_target_properties(linphone PROPERTIES
			FRAMEWORK TRUE
254 255
			MACOSX_FRAMEWORK_IDENTIFIER org.linphone.linphone
  			MACOSX_FRAMEWORK_INFO_PLIST Info.plist.in
256
			PUBLIC_HEADER "${LINPHONE_HEADER_FILES}"
257
		)
258
	endif()
259 260
	if(BELCARD_FOUND)
		if(APPLE)
261 262
			set_target_properties(linphone PROPERTIES LINK_FLAGS "-stdlib=libc++")
		endif()
263 264
	endif()

265 266 267 268 269
	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()
270
	add_dependencies(linphone liblinphone-git-version)
271
	target_include_directories(linphone PUBLIC ${LINPHONE_INCLUDE_DIRS})
272
	target_link_libraries(linphone PRIVATE ${LIBS})
273 274
	if(WIN32 AND CMAKE_SYSTEM_NAME STREQUAL "WindowsPhone" AND NOT CMAKE_SYSTEM_NAME STREQUAL "WindowsStore")
		set_target_properties(linphone PROPERTIES PREFIX "lib")
275
	elseif(ANDROID)
276
		target_link_libraries(linphone PUBLIC "log" ${SUPPORT_LIBRARIES} ${CPUFEATURES_LIBRARIES})
277
		add_dependencies(linphone linphonecore-jni-header)
278
	endif()
279
	if(MSVC)
280 281
		if(CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
			install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}/linphone.pdb
282
				DESTINATION ${CMAKE_INSTALL_BINDIR}
283 284 285 286
				PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
			)
		endif()
	endif()
287 288 289 290
	install(TARGETS linphone EXPORT ${EXPORT_TARGETS_NAME}Targets
		RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
		LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
		ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
291
		FRAMEWORK DESTINATION Frameworks
292 293
		PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
	)
294
endif()
Ghislain MARY's avatar
Ghislain MARY committed
295
if(ICONV_FOUND)
296 297
	if(APPLE)
		# Prevent conflict between the system iconv.h header and the one from macports.
298 299 300 301 302 303
		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()
304
	else()
305 306 307 308 309 310
		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()
311
	endif()
Ghislain MARY's avatar
Ghislain MARY committed
312
endif()
313

314
add_subdirectory(help)