CMakeLists.txt 8.62 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
	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
	contactprovider.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
107
)
Ronan's avatar
Ronan committed
108 109
set(LINPHONE_SOURCE_FILES_CXX
	conference.cc
110
	tester_utils.cpp
Ronan's avatar
Ronan committed
111
)
112 113
if(ENABLE_JAVA_WRAPPER)
	list(APPEND LINPHONE_SOURCE_FILES_CXX ${LINPHONE_JNI_SOURCES})
114
	set_source_files_properties(${LINPHONE_JNI_SOURCES} PROPERTIES GENERATED TRUE)
115
else()
116 117 118
	if(ANDROID)
		list(APPEND LINPHONE_SOURCE_FILES_C linphonecore_jni.cc)
	endif()
119
endif()
120

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

127

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

138
bc_git_version(liblinphone ${PROJECT_VERSION})
139 140 141 142 143 144

add_definitions(
	-DUSE_BELLESIP
	-DLIBLINPHONE_EXPORTS
)

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

197 198
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)
199 200
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)
201

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

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

299
add_subdirectory(help)