CMakeLists.txt 8.38 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
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()
Ghislain MARY's avatar
Ghislain MARY committed
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 210 211
	if(ANDROID)
		add_dependencies(linphone-static linphonecore-jni-header)
	endif()
212
	if(IOS)
213
		target_link_libraries(linphone-static INTERFACE "-framework Foundation" "-framework AVFoundation")
214 215 216 217 218 219 220
	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)
221 222 223 224
	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>
	)
225
	if(IOS)
226 227 228 229 230 231
		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/")
232 233
		set_target_properties(linphone PROPERTIES
			FRAMEWORK TRUE
234 235
			MACOSX_FRAMEWORK_IDENTIFIER org.linphone.linphone
  			MACOSX_FRAMEWORK_INFO_PLIST Info.plist.in
236
			PUBLIC_HEADER "${LINPHONE_HEADER_FILES}"
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})
253 254
	if(WIN32 AND CMAKE_SYSTEM_NAME STREQUAL "WindowsPhone" AND NOT CMAKE_SYSTEM_NAME STREQUAL "WindowsStore")
		set_target_properties(linphone PROPERTIES PREFIX "lib")
255
	elseif(ANDROID)
256
		target_link_libraries(linphone PUBLIC "log" ${SUPPORT_LIBRARIES} ${CPUFEATURES_LIBRARIES})
257
	endif()
258
	if(MSVC)
259 260
		if(CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
			install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}/linphone.pdb
261
				DESTINATION ${CMAKE_INSTALL_BINDIR}
262 263 264 265
				PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
			)
		endif()
	endif()
266 267 268 269
	install(TARGETS linphone EXPORT ${EXPORT_TARGETS_NAME}Targets
		RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
		LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
		ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
270
		FRAMEWORK DESTINATION Frameworks
271 272
		PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
	)
273
endif()
Ghislain MARY's avatar
Ghislain MARY committed
274
if(ICONV_FOUND)
275 276
	if(APPLE)
		# Prevent conflict between the system iconv.h header and the one from macports.
277 278 279 280 281 282
		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()
283
	else()
284 285 286 287 288 289
		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()
290
	endif()
Ghislain MARY's avatar
Ghislain MARY committed
291
endif()
292

293
add_subdirectory(help)