CMakeLists.txt 8.41 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 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
	set_source_files_properties(${LINPHONE_JNI_SOURCES} PROPERTIES GENERATED TRUE)
118
endif()
119

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

126

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

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

add_definitions(
	-DUSE_BELLESIP
	-DLIBLINPHONE_EXPORTS
)

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

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

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

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

292
add_subdirectory(help)