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

37 38
set(LINPHONE_PRIVATE_HEADER_FILES
	bellesip_sal/sal_impl.h
Ghislain MARY's avatar
Ghislain MARY committed
39 40 41 42 43 44 45
	CardDav.h
	Conference.h
	ContactProvider.h
	Enum.h
	Lime.h
	Lpc2Xml.h
	OfferAnswer.h
46
	private.h
Ghislain MARY's avatar
Ghislain MARY committed
47 48 49 50
	QualityReporting.h
	Sqlite3BctbxVfs.h
	Vcard.h
	Xml2Lpc.h
51 52
)

53
set(LINPHONE_SOURCE_FILES_C
Ghislain MARY's avatar
Ghislain MARY committed
54 55 56 57 58 59 60 61 62 63 64 65
	bellesip_sal/sal_address_impl.cc
	bellesip_sal/sal_impl.cc
	bellesip_sal/sal_op_call.cc
	bellesip_sal/sal_op_call_transfer.cc
	bellesip_sal/sal_op_events.cc
	bellesip_sal/sal_op_impl.cc
	bellesip_sal/sal_op_info.cc
	bellesip_sal/sal_op_message.cc
	bellesip_sal/sal_op_presence.cc
	bellesip_sal/sal_op_publish.cc
	bellesip_sal/sal_op_registration.cc
	bellesip_sal/sal_sdp.cc
66
)
Ghislain MARY's avatar
Ghislain MARY committed
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 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125
set(LINPHONE_SOURCE_FILES_CXX
	AccountCreator.cc
	AccountCreatorService.cc
	Address.cc
	Authentication.cc
	Buffer.cc
	Call.cc
	Callbacks.cc
	CallLog.cc
	CallParams.cc
	CardDav.cc
	Chat.cc
	ChatFileTransfer.cc
	Conference.cc
	Config.cc
	ContactProvider.cc
	Content.cc
	Core.cc
	DialPlan.cc
	Dict.cc
	EcCalibrator.cc
	EchoTester.cc
	Enum.cc
	ErrorInfo.cc
	Event.cc
	Factory.cc
	Friend.cc
	FriendList.cc
	ImEncryptionEngine.cc
	ImNotifPolicy.cc
	Info.cc
	LdapProvider.cc
	Lime.cc
	LocalPlayer.cc
	Lpc2Xml.cc
	Lsd.cc
	MessageStorage.cc
	Misc.cc
	NatPolicy.cc
	OfferAnswer.cc
	PayloadType.cc
	Player.cc
	Presence.cc
	Proxy.cc
	QualityReporting.cc
	RemoteProvisioning.cc
	RingTonePlayer.cc
	Sal.cc
	SipLogin.cc
	SipSetup.cc
	Sqlite3BctbxVfs.cc
	TunnelConfig.cc
	VideoDefinition.cc
	Vtables.cc
	Xml.cc
	Xml2Lpc.cc
	XmlRpc.cc
)

126 127 128 129
if(ANDROID)
	list(APPEND LINPHONE_SOURCE_FILES_CXX linphonecore_jni.cc)
	set_source_files_properties(linphonecore_jni.cc PROPERTIES COMPILE_DEFINITIONS "USE_JAVAH")
endif()
130

131 132 133
set(LINPHONE_SOURCE_FILES_OBJC)
if (IOS)
	list(APPEND LINPHONE_SOURCE_FILES_OBJC ringtoneplayer_ios.m ringtoneplayer_ios.h)
134
	list(APPEND LINPHONE_SOURCE_FILES_CXX linphonecore_ios.cc)
135 136
endif()

137

138
if(ENABLE_TUNNEL)
139
	list(APPEND LINPHONE_SOURCE_FILES_CXX
Ghislain MARY's avatar
Ghislain MARY committed
140
		Tunnel.cc
141 142 143
		TunnelManager.cc
	)
	add_definitions(-DTUNNEL_ENABLED)
144
else()
Ghislain MARY's avatar
Ghislain MARY committed
145
	list(APPEND LINPHONE_SOURCE_FILES_CXX TunnelStubs.cc)
146 147
endif()

148
bc_git_version(liblinphone ${PROJECT_VERSION})
149 150 151 152 153 154

add_definitions(
	-DUSE_BELLESIP
	-DLIBLINPHONE_EXPORTS
)

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

202 203 204
bc_apply_compile_flags(LINPHONE_SOURCE_FILES_C STRICT_OPTIONS_CPP STRICT_OPTIONS_C)
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)
205

206
if(ENABLE_STATIC)
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})
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})
212 213 214
	if(ANDROID)
		add_dependencies(linphone-static linphonecore-jni-header)
	endif()
215
	if(IOS)
216
		target_link_libraries(linphone-static INTERFACE "-framework Foundation" "-framework AVFoundation")
217 218 219 220 221 222 223
	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)
224
	add_library(linphone SHARED ${LINPHONE_HEADER_FILES} ${LINPHONE_PRIVATE_HEADER_FILES} ${LINPHONE_SOURCE_FILES_C} ${LINPHONE_SOURCE_FILES_CXX} ${LINPHONE_SOURCE_FILES_OBJC})
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 237 238
			PUBLIC_HEADER "${LINPHONE_HEADER_FILES}"
		) 
	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
		add_dependencies(linphone linphonecore-jni-header)
258
	endif()
259
	if(MSVC)
260 261
		if(CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
			install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}/linphone.pdb
262
				DESTINATION ${CMAKE_INSTALL_BINDIR}
263 264 265 266
				PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
			)
		endif()
	endif()
267 268 269 270
	install(TARGETS linphone EXPORT ${EXPORT_TARGETS_NAME}Targets
		RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
		LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
		ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
271
		FRAMEWORK DESTINATION Frameworks
272 273
		PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
	)
274
endif()
Ghislain MARY's avatar
Ghislain MARY committed
275
if(ICONV_FOUND)
276 277
	if(APPLE)
		# Prevent conflict between the system iconv.h header and the one from macports.
278 279 280 281 282 283
		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()
284
	else()
285 286 287 288 289 290
		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()
291
	endif()
Ghislain MARY's avatar
Ghislain MARY committed
292
endif()
293

294
add_subdirectory(help)