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

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

128

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

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

add_definitions(
	-DUSE_BELLESIP
	-DLIBLINPHONE_EXPORTS
)

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

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

203
if(ENABLE_STATIC)
204 205 206 207
	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>
	)
208
	set_target_properties(linphone-static PROPERTIES OUTPUT_NAME linphone)
209
	add_dependencies(linphone-static liblinphone-git-version)
210 211
	target_include_directories(linphone-static PUBLIC ${LINPHONE_INCLUDE_DIRS})
	target_link_libraries(linphone-static INTERFACE ${LIBS})
Benjamin REIS's avatar
Benjamin REIS committed
212
	if(APPLE)
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
	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} 
223 224
		$<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
			MACOSX_FRAMEWORK_IDENTIFIER org.linphone.linphone
Benjamin REIS's avatar
Benjamin REIS committed
235
			MACOSX_FRAMEWORK_INFO_PLIST Info.plist.in
236
			PUBLIC_HEADER "${LINPHONE_HEADER_FILES}"
237
			RESOURCE "../share/cpim_grammar"
238
		)
239
	endif()
240 241
	if(BELCARD_FOUND)
		if(APPLE)
242 243
			set_target_properties(linphone PROPERTIES LINK_FLAGS "-stdlib=libc++")
		endif()
244 245
	endif()

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

300
add_subdirectory(help)