CMakeLists.txt 8.65 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
list(APPEND LINPHONE_PRIVATE_HEADER_FILES
37
	bellesip_sal/sal_impl.h
38 39 40
	carddav.h
	conference_private.h
	contact_providers_priv.h
41
	core_private.h
42 43 44 45
	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
	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
	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
)
114 115
if(ENABLE_JAVA_WRAPPER)
	list(APPEND LINPHONE_SOURCE_FILES_CXX ${LINPHONE_JNI_SOURCES})
116
	set_source_files_properties(${LINPHONE_JNI_SOURCES} PROPERTIES GENERATED TRUE)
117
else()
118 119 120
	if(ANDROID)
		list(APPEND LINPHONE_SOURCE_FILES_C linphonecore_jni.cc)
	endif()
121
endif()
122

123 124 125
set(LINPHONE_SOURCE_FILES_OBJC)
if (IOS)
	list(APPEND LINPHONE_SOURCE_FILES_OBJC ringtoneplayer_ios.m ringtoneplayer_ios.h)
126
	list(APPEND LINPHONE_SOURCE_FILES_CXX linphonecore_ios.cc)
127 128
endif()

129

130
if(ENABLE_TUNNEL)
131
	list(APPEND LINPHONE_SOURCE_FILES_CXX
132
		linphone_tunnel.cc
133 134 135
		TunnelManager.cc
	)
	add_definitions(-DTUNNEL_ENABLED)
136
else()
137
	list(APPEND LINPHONE_SOURCE_FILES_C linphone_tunnel_stubs.c)
138 139
endif()

140
bc_git_version(liblinphone ${PROJECT_VERSION})
141 142 143 144 145 146

add_definitions(
	-DUSE_BELLESIP
	-DLIBLINPHONE_EXPORTS
)

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

199 200
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)
201 202
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)
203

204
if(ENABLE_STATIC)
205 206 207 208
	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>
	)
209
	set_target_properties(linphone-static PROPERTIES OUTPUT_NAME linphone)
210
	add_dependencies(linphone-static liblinphone-git-version)
211 212
	target_include_directories(linphone-static PUBLIC ${LINPHONE_INCLUDE_DIRS})
	target_link_libraries(linphone-static INTERFACE ${LIBS})
Benjamin REIS's avatar
Benjamin REIS committed
213
	if(APPLE)
214
		target_link_libraries(linphone-static INTERFACE "-framework Foundation" "-framework AVFoundation")
215 216 217 218 219 220 221
	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)
222 223
	add_library(linphone SHARED "../share/cpim_grammar" ${LINPHONE_HEADER_FILES} ${LINPHONE_PRIVATE_HEADER_FILES}
		${LINPHONE_SOURCE_FILES_C} ${LINPHONE_SOURCE_FILES_CXX} ${LINPHONE_SOURCE_FILES_OBJC} 
224 225
		$<TARGET_OBJECTS:linphone-cxx-objects>
	)
226
	if(IOS)
227 228 229 230 231 232
		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/")
233 234
		set_target_properties(linphone PROPERTIES
			FRAMEWORK TRUE
235
			MACOSX_FRAMEWORK_IDENTIFIER org.linphone.linphone
Benjamin REIS's avatar
Benjamin REIS committed
236
			MACOSX_FRAMEWORK_INFO_PLIST Info.plist.in
237
			PUBLIC_HEADER "${LINPHONE_HEADER_FILES}"
238
			RESOURCE "../share/cpim_grammar"
239
		)
240
	endif()
241 242
	if(BELCARD_FOUND)
		if(APPLE)
243 244
			set_target_properties(linphone PROPERTIES LINK_FLAGS "-stdlib=libc++")
		endif()
245 246
	endif()

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

301
add_subdirectory(help)