CMakeLists.txt 8.34 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()
35

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

52
set(LINPHONE_SOURCE_FILES_C
53 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
	account_creator.c
	account_creator_service.c
	authentication.c
	bellesip_sal/sal_address_impl.c
	bellesip_sal/sal_impl.c
	bellesip_sal/sal_op_impl.c
	bellesip_sal/sal_sdp.c
	buffer.c
	callbacks.c
	call_log.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
	siplogin.c
	sipsetup.c
	sqlite3_bctbx_vfs.c
	video_definition.c
	xml2lpc.c
	xml.c
	xmlrpc.c
	vtables.c
109
)
Ronan's avatar
Ronan committed
110 111
set(LINPHONE_SOURCE_FILES_CXX
	conference.cc
112
	tester_utils.cpp
Ronan's avatar
Ronan committed
113
)
Benjamin REIS's avatar
Benjamin REIS committed
114
set(LINPHONE_INCLUDE_DIRS ${LINPHONE_INCLUDE_DIRS})
115 116
if(ENABLE_JAVA_WRAPPER)
	list(APPEND LINPHONE_SOURCE_FILES_CXX ${LINPHONE_JNI_SOURCES})
117
endif()
118

119 120 121
set(LINPHONE_SOURCE_FILES_OBJC)
if (IOS)
	list(APPEND LINPHONE_SOURCE_FILES_OBJC ringtoneplayer_ios.m ringtoneplayer_ios.h)
122
	list(APPEND LINPHONE_SOURCE_FILES_CXX linphonecore_ios.cc)
123 124
endif()

125

126
if(ENABLE_TUNNEL)
127
	list(APPEND LINPHONE_SOURCE_FILES_CXX
128
		linphone_tunnel.cc
129 130 131
		TunnelManager.cc
	)
	add_definitions(-DTUNNEL_ENABLED)
132
else()
133
	list(APPEND LINPHONE_SOURCE_FILES_C linphone_tunnel_stubs.c)
134 135
endif()

136
bc_git_version(liblinphone ${PROJECT_VERSION})
137 138 139 140 141 142

add_definitions(
	-DUSE_BELLESIP
	-DLIBLINPHONE_EXPORTS
)

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

195 196
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)
197 198
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)
199

200
if(ENABLE_STATIC)
201 202 203 204
	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>
	)
205
	set_target_properties(linphone-static PROPERTIES OUTPUT_NAME linphone)
206
	add_dependencies(linphone-static liblinphone-git-version)
207 208
	target_include_directories(linphone-static PUBLIC ${LINPHONE_INCLUDE_DIRS})
	target_link_libraries(linphone-static INTERFACE ${LIBS})
209
	if(IOS)
210
		target_link_libraries(linphone-static INTERFACE "-framework Foundation" "-framework AVFoundation")
211 212 213 214 215 216 217
	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)
218 219 220 221
	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>
	)
222
	if(IOS)
223 224 225 226 227 228
		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/")
229 230
		set_target_properties(linphone PROPERTIES
			FRAMEWORK TRUE
231 232
			MACOSX_FRAMEWORK_IDENTIFIER org.linphone.linphone
  			MACOSX_FRAMEWORK_INFO_PLIST Info.plist.in
233
			PUBLIC_HEADER "${LINPHONE_HEADER_FILES}"
234
		)
235
	endif()
236 237
	if(BELCARD_FOUND)
		if(APPLE)
238 239
			set_target_properties(linphone PROPERTIES LINK_FLAGS "-stdlib=libc++")
		endif()
240 241
	endif()

242 243 244 245 246
	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()
247
	add_dependencies(linphone liblinphone-git-version)
248
	target_include_directories(linphone PUBLIC ${LINPHONE_INCLUDE_DIRS})
249
	target_link_libraries(linphone PRIVATE ${LIBS})
250 251
	if(WIN32 AND CMAKE_SYSTEM_NAME STREQUAL "WindowsPhone" AND NOT CMAKE_SYSTEM_NAME STREQUAL "WindowsStore")
		set_target_properties(linphone PROPERTIES PREFIX "lib")
252
	elseif(ANDROID)
253
		target_link_libraries(linphone PUBLIC "log" ${SUPPORT_LIBRARIES} ${CPUFEATURES_LIBRARIES})
254
		add_dependencies(linphone linphonej)
255
	endif()
256
	if(MSVC)
257 258
		if(CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
			install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}/linphone.pdb
259
				DESTINATION ${CMAKE_INSTALL_BINDIR}
260 261 262 263
				PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
			)
		endif()
	endif()
264 265 266 267
	install(TARGETS linphone EXPORT ${EXPORT_TARGETS_NAME}Targets
		RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
		LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
		ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
268
		FRAMEWORK DESTINATION Frameworks
269 270
		PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
	)
271
endif()
272
if(ICONV_FOUND)
273 274
	if(APPLE)
		# Prevent conflict between the system iconv.h header and the one from macports.
275 276 277 278 279 280
		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()
281
	else()
282 283 284 285 286 287
		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()
288
	endif()
289
endif()
290

291
add_subdirectory(help)