1 # FreeRDP: A Remote Desktop Protocol Implementation
2 # FreeRDP cmake build script
4 # Copyright 2011 O.S. Systems Software Ltda.
5 # Copyright 2011 Otavio Salvador <otavio@ossystems.com.br>
6 # Copyright 2011 Marc-Andre Moreau <marcandre.moreau@gmail.com>
7 # Copyright 2012 HP Development Company, LLC
9 # Licensed under the Apache License, Version 2.0 (the "License");
10 # you may not use this file except in compliance with the License.
11 # You may obtain a copy of the License at
13 # http://www.apache.org/licenses/LICENSE-2.0
15 # Unless required by applicable law or agreed to in writing, software
16 # distributed under the License is distributed on an "AS IS" BASIS,
17 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 # See the License for the specific language governing permissions and
19 # limitations under the License.
21 cmake_minimum_required(VERSION 2.8)
23 project(FreeRDP C CXX)
25 if(NOT DEFINED VENDOR)
26 set(VENDOR "FreeRDP" CACHE STRING "FreeRDP package vendor")
29 if(NOT DEFINED FREERDP_VENDOR)
33 set(CMAKE_COLOR_MAKEFILE ON)
35 set(CMAKE_POSITION_INDEPENDENT_CODE ON)
37 # Include our extra modules
38 set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/)
40 # Check for cmake compatibility (enable/disable features)
41 include(CheckCmakeCompat)
43 # Include cmake modules
44 include(CheckIncludeFiles)
45 include(CheckLibraryExists)
46 include(CheckSymbolExists)
47 include(CheckStructHasMember)
48 include(FindPkgConfig)
49 include(TestBigEndian)
52 include(AutoVersioning)
53 include(ConfigOptions)
54 include(ComplexLibrary)
55 include(FeatureSummary)
56 include(CheckCCompilerFlag)
57 include(CheckCXXCompilerFlag)
58 include(GNUInstallDirsWrapper)
59 include(CMakePackageConfigHelpers)
63 if ($ENV{BUILD_NUMBER})
64 set(BUILD_NUMBER $ENV{BUILD_NUMBER})
66 set(WITH_LIBRARY_VERSIONING "ON")
67 set(FREERDP_VERSION_MAJOR "1")
68 set(FREERDP_VERSION_MINOR "2")
69 set(FREERDP_VERSION_REVISION "2")
70 set(FREERDP_VERSION_SUFFIX "dev")
71 set(FREERDP_API_VERSION "${FREERDP_VERSION_MAJOR}.${FREERDP_VERSION_MINOR}")
72 set(FREERDP_VERSION "${FREERDP_API_VERSION}.${FREERDP_VERSION_REVISION}")
73 if (FREERDP_VERSION_SUFFIX)
74 set(FREERDP_VERSION_FULL "${FREERDP_VERSION}-${FREERDP_VERSION_SUFFIX}")
76 set(FREERDP_VERSION_FULL "${FREERDP_VERSION}")
79 # Allow to search the host machine for git
81 SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM BOTH)
83 include(GetGitRevisionDescription)
84 git_get_exact_tag(GIT_REVISION --tags --always)
85 if (${GIT_REVISION} STREQUAL "n/a")
86 git_rev_parse(GIT_REVISION --short)
89 SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY)
92 message(STATUS "Git Revision ${GIT_REVISION}")
94 # Turn on solution folders (2.8.4+)
95 set_property(GLOBAL PROPERTY USE_FOLDERS ON)
97 # Default to release build type
98 if(NOT CMAKE_BUILD_TYPE)
99 set(CMAKE_BUILD_TYPE "Release")
102 if(NOT DEFINED BUILD_SHARED_LIBS)
103 if(ANDROID OR IOS OR APPLE)
104 set(BUILD_SHARED_LIBS OFF)
106 set(BUILD_SHARED_LIBS ON)
110 if(NOT DEFINED EXPORT_ALL_SYMBOLS)
111 set(EXPORT_ALL_SYMBOLS TRUE)
115 if(${CMAKE_SYSTEM_NAME} MATCHES "BSD")
117 if(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD")
120 if(${CMAKE_SYSTEM_NAME} MATCHES "OpenBSD")
125 # Configure MSVC Runtime
128 if(NOT DEFINED MSVC_RUNTIME)
129 set(MSVC_RUNTIME "dynamic")
131 if(${MSVC_RUNTIME} STREQUAL "static")
132 message(STATUS "Use the MSVC static runtime option carefully!")
133 message(STATUS "OpenSSL uses /MD by default, and is very picky")
134 message(STATUS "Random freeing errors are a common sign of runtime issues")
136 configure_msvc_runtime()
138 if(NOT DEFINED CMAKE_SUPPRESS_REGENERATION)
139 set(CMAKE_SUPPRESS_REGENERATION ON)
143 # Compiler-specific flags
144 if(CMAKE_COMPILER_IS_GNUCC)
145 if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64" OR CMAKE_SYSTEM_PROCESSOR MATCHES "i686")
146 CHECK_SYMBOL_EXISTS(__x86_64__ "" IS_X86_64)
148 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
150 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=i686")
153 if(CMAKE_POSITION_INDEPENDENT_CODE)
154 if(${CMAKE_VERSION} VERSION_LESS 2.8.9)
155 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
160 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall")
162 CHECK_C_COMPILER_FLAG (-Wno-unused-result Wno-unused-result)
163 if(Wno-unused-result)
164 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-result")
166 CHECK_C_COMPILER_FLAG (-Wno-unused-but-set-variable Wno-unused-but-set-variable)
167 if(Wno-unused-but-set-variable)
168 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-but-set-variable")
170 CHECK_C_COMPILER_FLAG(-Wno-deprecated-declarations Wno-deprecated-declarations)
171 if(Wno-deprecated-declarations)
172 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-deprecated-declarations")
174 CHECK_CXX_COMPILER_FLAG(-Wno-deprecated-declarations Wno-deprecated-declarationsCXX)
175 if(Wno-deprecated-declarationsCXX)
176 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated-declarations")
179 if(NOT EXPORT_ALL_SYMBOLS)
180 message(STATUS "GCC default symbol visibility: hidden")
181 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden")
184 CHECK_C_COMPILER_FLAG(-Wno-format Wno-format)
186 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-format")
189 CHECK_C_COMPILER_FLAG (-Wimplicit-function-declaration Wimplicit-function-declaration)
190 if(Wimplicit-function-declaration)
191 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wimplicit-function-declaration")
195 CHECK_C_COMPILER_FLAG (-Wredundant-decls Wredundant-decls)
197 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wredundant-decls")
200 if(CMAKE_BUILD_TYPE STREQUAL "Release")
201 set(CMAKE_C_FLAGS_RELEASE "-DNDEBUG")
202 set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG")
204 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2")
205 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2")
208 CHECK_C_COMPILER_FLAG (-Wno-builtin-macro-redefined Wno-builtin-macro-redefined)
209 if(Wno-builtin-macro-redefined)
210 set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -Wno-builtin-macro-redefined")
211 set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -D__FILE__='\"$(subst ${CMAKE_BINARY_DIR}/,,$(subst ${CMAKE_SOURCE_DIR}/,,$(abspath $<)))\"'")
214 CHECK_CXX_COMPILER_FLAG (-Wno-builtin-macro-redefined Wno-builtin-macro-redefinedCXX)
215 if(Wno-builtin-macro-redefinedCXX)
216 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wno-builtin-macro-redefined")
217 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -D__FILE__='\"$(subst ${CMAKE_BINARY_DIR}/,,$(subst ${CMAKE_SOURCE_DIR}/,,$(abspath $<)))\"'")
220 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g")
221 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g")
224 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse2")
228 if("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang")
229 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-parameter")
230 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-macros -Wno-padded")
231 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-c11-extensions -Wno-gnu")
233 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mssse3")
235 CHECK_C_COMPILER_FLAG(-Wno-deprecated-declarations Wno-deprecated-declarations)
236 if(Wno-deprecated-declarations)
237 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-deprecated-declarations")
239 CHECK_CXX_COMPILER_FLAG(-Wno-deprecated-declarations Wno-deprecated-declarationsCXX)
240 if(Wno-deprecated-declarationsCXX)
241 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated-declarations")
246 # Remove previous warning definitions,
247 # NMake is otherwise complaining.
248 foreach (flags_var_to_scrub
251 CMAKE_CXX_FLAGS_RELEASE
252 CMAKE_CXX_FLAGS_RELWITHDEBINFO
253 CMAKE_CXX_FLAGS_MINSIZEREL
254 CMAKE_C_FLAGS_RELEASE
255 CMAKE_C_FLAGS_RELWITHDEBINFO
256 CMAKE_C_FLAGS_MINSIZEREL)
257 string (REGEX REPLACE "(^| )[/-]W[ ]*[1-9]" " "
258 "${flags_var_to_scrub}" "${${flags_var_to_scrub}}")
261 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /Gd")
262 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W3")
264 if(CMAKE_SIZEOF_VOID_P EQUAL 8)
265 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_AMD64_")
267 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_X86_")
270 set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR})
271 set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR})
273 if(CMAKE_BUILD_TYPE STREQUAL "Release")
275 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /Zi")
276 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zi")
282 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DUNICODE -D_UNICODE")
283 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_CRT_SECURE_NO_WARNINGS")
284 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DWIN32_LEAN_AND_MEAN")
286 # Set product and vendor for dll and exe version information.
287 set(RC_VERSION_VENDOR "FreeRDP")
288 set(RC_VERSION_PRODUCT "FreeRDP")
289 set(RC_VERSION_PATCH ${BUILD_NUMBER})
290 set(RC_VERSION_DESCRIPTION ${GIT_REVISION})
292 string(TIMESTAMP RC_VERSION_YEAR "%Y")
294 if(NOT DEFINED CMAKE_WINDOWS_VERSION)
295 set(CMAKE_WINDOWS_VERSION "WINXP")
298 if(CMAKE_WINDOWS_VERSION STREQUAL "WINXP")
299 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DWINVER=0x0501 -DWIN32_WINNT=0x0501")
300 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DWINVER=0x0501 -DWIN32_WINNT=0x0501")
301 elseif(CMAKE_WINDOWS_VERSION STREQUAL "WIN7")
302 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DWINVER=0x0601 -DWIN32_WINNT=0x0601")
303 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DWINVER=0x0601 -DWIN32_WINNT=0x0601")
304 elseif(CMAKE_WINDOWS_VERSION STREQUAL "WIN8")
305 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DWINVER=0x0602 -DWIN32_WINNT=0x0602")
306 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DWINVER=0x0602 -DWIN32_WINNT=0x0602")
309 if (FREERDP_EXTERNAL_SSL_PATH)
310 set(OPENSSL_ROOT_DIR ${FREERDP_EXTERNAL_SSL_PATH})
315 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -isysroot ${CMAKE_IOS_SDK_ROOT} -g")
318 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DWINPR_EXPORTS -DFREERDP_EXPORTS")
319 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DWINPR_EXPORTS -DFREERDP_EXPORTS")
323 check_include_files(fcntl.h HAVE_FCNTL_H)
324 check_include_files(unistd.h HAVE_UNISTD_H)
325 check_include_files(execinfo.h HAVE_EXECINFO_H)
326 check_include_files(stdint.h HAVE_STDINT_H)
327 check_include_files(inttypes.h HAVE_INTTYPES_H)
328 check_include_files(sys/modem.h HAVE_SYS_MODEM_H)
329 check_include_files(sys/filio.h HAVE_SYS_FILIO_H)
330 check_include_files(sys/strtio.h HAVE_SYS_STRTIO_H)
331 check_include_files(sys/select.h HAVE_SYS_SELECT_H)
336 set(HAVE_INTTYPES_H 1)
337 set(HAVE_SYS_FILIO_H 1)
341 check_struct_has_member("struct tm" tm_gmtoff time.h HAVE_TM_GMTOFF)
343 set(HAVE_TM_GMTOFF 1)
349 if (NOT FREERDP_IOS_EXTERNAL_SSL_PATH)
350 message(STATUS "FREERDP_IOS_EXTERNAL_SSL_PATH not set! Required if openssl is not found in the iOS SDK (which usually isn't")
352 set(CMAKE_FIND_ROOT_PATH ${CMAKE_FIND_ROOT_PATH} ${FREERDP_IOS_EXTERNAL_SSL_PATH})
353 set_property(GLOBAL PROPERTY XCODE_ATTRIBUTE_SKIP_INSTALL YES)
355 if(NOT DEFINED CMAKE_OSX_ARCHITECTURES)
356 set(CMAKE_OSX_ARCHITECTURES i386 x86_64)
359 if(IS_DIRECTORY /opt/local/include)
360 include_directories(/opt/local/include)
361 link_directories(/opt/local/lib)
365 # Temporarily disabled, causes the cmake script to be reexecuted, causing the compilation to fail.
366 # Workaround: specify the parameter in the command-line
368 # set(CMAKE_C_COMPILER "clang")
372 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -v")
373 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -v")
379 set(WITH_MANPAGES "ON")
382 set(WITH_WAYLAND "OFF")
387 set(WITH_LIBRARY_VERSIONING "OFF")
389 if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
390 add_definitions(-DNDK_DEBUG=1)
392 # NOTE: Manually add -gdwarf-3, as newer toolchains default to -gdwarf-4,
393 # which is not supported by the gdbserver binary shipped with
394 # the android NDK (tested with r9b)
395 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_DEBUG} -gdwarf-3")
397 set(CMAKE_C_LINK_FLAGS "${CMAKE_C_LINK_FLAGS} -llog")
399 if (NOT FREERDP_EXTERNAL_JPEG_PATH)
400 if(IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/external/jpeg8d")
401 set(FREERDP_EXTERNAL_JPEG_PATH "${CMAKE_CURRENT_SOURCE_DIR}/external/jpeg8d")
403 message(STATUS "FREERDP_EXTERNAL_SSL_PATH not set! - Needs to be set if openssl is not found in the android NDK (which usually isn't)")
406 if (NOT FREERDP_EXTERNAL_SSL_PATH)
407 if(IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/external/openssl")
408 set(FREERDP_EXTERNAL_SSL_PATH "${CMAKE_CURRENT_SOURCE_DIR}/external/openssl")
410 message(STATUS "FREERDP_EXTERNAL_SSL_PATH not set! - Needs to be set if openssl is not found in the android NDK (which usually isn't)")
413 if (NOT FREERDP_EXTERNAL_PROFILER_PATH)
414 if(IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/external/android-ndk-profiler")
415 set(FREERDP_EXTERNAL_PROFILER_PATH
416 "${CMAKE_CURRENT_SOURCE_DIR}/external/android-ndk-profiler")
418 message(STATUS "FREERDP_EXTERNAL_PROFILER_PATH not set!")
423 set(CMAKE_FIND_ROOT_PATH ${CMAKE_FIND_ROOT_PATH} ${FREERDP_EXTERNAL_SSL_PATH} ${FREERDP_EXTERNAL_JPEG_PATH})
424 set(CMAKE_FIND_ROOT_PATH ${CMAKE_FIND_ROOT_PATH} ${FREERDP_EXTERNAL_PROFILER_PATH})
426 set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/client/Android/FreeRDPCore/jni/${ANDROID_ABI})
427 CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/scripts/regenerate_jni_headers.sh.cmake
428 ${CMAKE_BINARY_DIR}/scripts/regenerate_jni_headers.sh @ONLY)
430 CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/scripts/gprof_generate.sh.cmake ${CMAKE_BINARY_DIR}/scripts/gprof_generate.sh @ONLY)
435 set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
437 if(NOT IOS AND NOT ANDROID)
438 find_package(Threads REQUIRED)
442 check_library_exists(pthread pthread_mutex_timedlock "" HAVE_PTHREAD_MUTEX_TIMEDLOCK)
445 if(WITH_VALGRIND_MEMCHECK)
446 check_include_files(valgrind/memcheck.h HAVE_VALGRIND_MEMCHECK_H)
448 unset(HAVE_VALGRIND_MEMCHECK_H CACHE)
452 check_include_files(sys/eventfd.h HAVE_AIO_H)
453 check_include_files(sys/eventfd.h HAVE_EVENTFD_H)
455 check_symbol_exists(eventfd_read sys/eventfd.h WITH_EVENTFD_READ_WRITE)
457 check_include_files(sys/timerfd.h HAVE_TIMERFD_H)
458 check_include_files(poll.h HAVE_POLL_H)
459 set(X11_FEATURE_TYPE "RECOMMENDED")
460 set(WAYLAND_FEATURE_TYPE "RECOMMENDED")
462 set(X11_FEATURE_TYPE "DISABLED")
463 set(WAYLAND_FEATURE_TYPE "DISABLED")
467 find_package(PCSCWinPR)
470 set(X11_FEATURE_PURPOSE "X11")
471 set(X11_FEATURE_DESCRIPTION "X11 client and server")
473 set(WAYLAND_FEATURE_PURPOSE "Wayland")
474 set(WAYLAND_FEATURE_DESCRIPTION "Wayland client")
476 set(DIRECTFB_FEATURE_TYPE "OPTIONAL")
477 set(DIRECTFB_FEATURE_PURPOSE "DirectFB")
478 set(DIRECTFB_FEATURE_DESCRIPTION "DirectFB client")
480 set(ZLIB_FEATURE_TYPE "REQUIRED")
481 set(ZLIB_FEATURE_PURPOSE "compression")
482 set(ZLIB_FEATURE_DESCRIPTION "data compression")
484 set(OPENSSL_FEATURE_TYPE "REQUIRED")
485 set(OPENSSL_FEATURE_PURPOSE "cryptography")
486 set(OPENSSL_FEATURE_DESCRIPTION "encryption, certificate validation, hashing functions")
488 set(OPENSLES_FEATURE_TYPE "OPTIONAL")
489 set(OPENSLES_FEATURE_PURPOSE "multimedia")
490 set(OPENSLES_FEATURE_DESCRIPTION "OpenSLES audio / video")
492 set(OSS_FEATURE_TYPE "RECOMMENDED")
493 set(OSS_FEATURE_PURPOSE "sound")
494 set(OSS_FEATURE_DESCRIPTION "audio input, audio output and multimedia redirection")
496 set(ALSA_FEATURE_TYPE "RECOMMENDED")
497 set(ALSA_FEATURE_PURPOSE "sound")
498 set(ALSA_FEATURE_DESCRIPTION "audio input, audio output and multimedia redirection")
500 set(PULSE_FEATURE_TYPE "OPTIONAL")
501 set(PULSE_FEATURE_PURPOSE "sound")
502 set(PULSE_FEATURE_DESCRIPTION "audio input, audio output and multimedia redirection")
504 set(CUPS_FEATURE_TYPE "OPTIONAL")
505 set(CUPS_FEATURE_PURPOSE "printing")
506 set(CUPS_FEATURE_DESCRIPTION "printer device redirection")
508 set(PCSC_FEATURE_TYPE "OPTIONAL")
509 set(PCSC_FEATURE_PURPOSE "smart card")
510 set(PCSC_FEATURE_DESCRIPTION "smart card device redirection")
512 set(FFMPEG_FEATURE_TYPE "RECOMMENDED")
513 set(FFMPEG_FEATURE_PURPOSE "multimedia")
514 set(FFMPEG_FEATURE_DESCRIPTION "multimedia redirection, audio and video playback")
516 set(GSTREAMER_0_10_FEATURE_TYPE "OPTIONAL")
517 set(GSTREAMER_0_10_FEATURE_PURPOSE "multimedia")
518 set(GSTREAMER_0_10_FEATURE_DESCRIPTION "multimedia redirection, audio and video playback, gstreamer 0.10 version")
520 set(GSTREAMER_1_0_FEATURE_TYPE "RECOMMENDED")
521 set(GSTREAMER_1_0_FEATURE_PURPOSE "multimedia")
522 set(GSTREAMER_1_0_FEATURE_DESCRIPTION "multimedia redirection, audio and video playback")
524 set(IPP_FEATURE_TYPE "OPTIONAL")
525 set(IPP_FEATURE_PURPOSE "performance")
526 set(IPP_FEATURE_DESCRIPTION "Intel Integrated Performance Primitives library")
528 set(JPEG_FEATURE_TYPE "OPTIONAL")
529 set(JPEG_FEATURE_PURPOSE "codec")
530 set(JPEG_FEATURE_DESCRIPTION "use JPEG library")
532 set(OPENH264_FEATURE_TYPE "OPTIONAL")
533 set(OPENH264_FEATURE_PURPOSE "codec")
534 set(OPENH264_FEATURE_DESCRIPTION "use OpenH264 library")
536 set(GSM_FEATURE_TYPE "OPTIONAL")
537 set(GSM_FEATURE_PURPOSE "codec")
538 set(GSM_FEATURE_DESCRIPTION "GSM audio codec library")
541 set(X11_FEATURE_TYPE "DISABLED")
542 set(WAYLAND_FEATURE_TYPE "DISABLED")
543 set(ZLIB_FEATURE_TYPE "DISABLED")
544 set(DIRECTFB_FEATURE_TYPE "DISABLED")
545 set(OSS_FEATURE_TYPE "DISABLED")
546 set(ALSA_FEATURE_TYPE "DISABLED")
547 set(PULSE_FEATURE_TYPE "DISABLED")
548 set(CUPS_FEATURE_TYPE "DISABLED")
549 set(PCSC_FEATURE_TYPE "DISABLED")
550 set(FFMPEG_FEATURE_TYPE "DISABLED")
551 set(GSTREAMER_1_0_FEATURE_TYPE "DISABLED")
552 set(GSTREAMER_0_10_FEATURE_TYPE "OPTIONAL")
553 set(OPENSLES_FEATURE_TYPE "DISABLED")
557 set(DIRECTFB_FEATURE_TYPE "DISABLED")
558 set(FFMPEG_FEATURE_TYPE "OPTIONAL")
559 set(GSTREAMER_1_0_FEATURE_TYPE "OPTIONAL")
560 set(X11_FEATURE_TYPE "OPTIONAL")
561 set(WAYLAND_FEATURE_TYPE "DISABLED")
562 set(OSS_FEATURE_TYPE "DISABLED")
563 set(ALSA_FEATURE_TYPE "DISABLED")
565 set(X11_FEATURE_TYPE "DISABLED")
566 set(PULSE_FEATURE_TYPE "DISABLED")
567 set(CUPS_FEATURE_TYPE "DISABLED")
568 set(PCSC_FEATURE_TYPE "DISABLED")
569 set(GSTREAMER_1_0_FEATURE_TYPE "DISABLED")
570 set(GSTREAMER_0_10_FEATURE_TYPE "DISABLED")
572 set(OPENSLES_FEATURE_TYPE "DISABLED")
576 set(X11_FEATURE_TYPE "DISABLED")
577 set(WAYLAND_FEATURE_TYPE "DISABLED")
578 set(DIRECTFB_FEATURE_TYPE "DISABLED")
579 set(OSS_FEATURE_TYPE "DISABLED")
580 set(ALSA_FEATURE_TYPE "DISABLED")
581 set(PULSE_FEATURE_TYPE "DISABLED")
582 set(CUPS_FEATURE_TYPE "DISABLED")
583 set(PCSC_FEATURE_TYPE "DISABLED")
584 set(FFMPEG_FEATURE_TYPE "DISABLED")
585 set(GSTREAMER_1_0_FEATURE_TYPE "DISABLED")
586 set(GSTREAMER_0_10_FEATURE_TYPE "DISABLED")
587 set(OPENSLES_FEATURE_TYPE "REQUIRED")
591 find_feature(X11 ${X11_FEATURE_TYPE} ${X11_FEATURE_PURPOSE} ${X11_FEATURE_DESCRIPTION})
592 find_feature(Wayland ${WAYLAND_FEATURE_TYPE} ${WAYLAND_FEATURE_PURPOSE} ${WAYLAND_FEATURE_DESCRIPTION})
593 find_feature(DirectFB ${DIRECTFB_FEATURE_TYPE} ${DIRECTFB_FEATURE_PURPOSE} ${DIRECTFB_FEATURE_DESCRIPTION})
594 if (${WITH_DIRECTFB})
595 message(WARNING "DIRECTFB is orphaned and not maintained see docs/README.directfb for details")
598 find_feature(ZLIB ${ZLIB_FEATURE_TYPE} ${ZLIB_FEATURE_PURPOSE} ${ZLIB_FEATURE_DESCRIPTION})
599 find_feature(OpenSSL ${OPENSSL_FEATURE_TYPE} ${OPENSSL_FEATURE_PURPOSE} ${OPENSSL_FEATURE_DESCRIPTION})
600 find_feature(OpenSLES ${OPENSLES_FEATURE_TYPE} ${OPENSLES_FEATURE_PURPOSE} ${OPENSLES_FEATURE_DESCRIPTION})
602 find_feature(OSS ${OSS_FEATURE_TYPE} ${OSS_FEATURE_PURPOSE} ${OSS_FEATURE_DESCRIPTION})
603 find_feature(ALSA ${ALSA_FEATURE_TYPE} ${ALSA_FEATURE_PURPOSE} ${ALSA_FEATURE_DESCRIPTION})
604 find_feature(Pulse ${PULSE_FEATURE_TYPE} ${PULSE_FEATURE_PURPOSE} ${PULSE_FEATURE_DESCRIPTION})
606 find_feature(Cups ${CUPS_FEATURE_TYPE} ${CUPS_FEATURE_PURPOSE} ${CUPS_FEATURE_DESCRIPTION})
607 find_feature(PCSC ${PCSC_FEATURE_TYPE} ${PCSC_FEATURE_PURPOSE} ${PCSC_FEATURE_DESCRIPTION})
609 find_feature(FFmpeg ${FFMPEG_FEATURE_TYPE} ${FFMPEG_FEATURE_PURPOSE} ${FFMPEG_FEATURE_DESCRIPTION})
611 find_feature(GStreamer_0_10 ${GSTREAMER_0_10_FEATURE_TYPE} ${GSTREAMER_0_10_FEATURE_PURPOSE} ${GSTREAMER_0_10_FEATURE_DESCRIPTION})
612 find_feature(GStreamer_1_0 ${GSTREAMER_1_0_FEATURE_TYPE} ${GSTREAMER_1_0_FEATURE_PURPOSE} ${GSTREAMER_1_0_FEATURE_DESCRIPTION})
614 find_feature(JPEG ${JPEG_FEATURE_TYPE} ${JPEG_FEATURE_PURPOSE} ${JPEG_FEATURE_DESCRIPTION})
615 find_feature(OpenH264 ${OPENH264_FEATURE_TYPE} ${OPENH264_FEATURE_PURPOSE} ${OPENH264_FEATURE_DESCRIPTION})
616 find_feature(GSM ${GSM_FEATURE_TYPE} ${GSM_FEATURE_PURPOSE} ${GSM_FEATURE_DESCRIPTION})
618 if(TARGET_ARCH MATCHES "x86|x64")
620 # Intel Performance Primitives
621 find_feature(IPP ${IPP_FEATURE_TYPE} ${IPP_FEATURE_PURPOSE} ${IPP_FEATURE_DESCRIPTION})
625 if (TARGET_ARCH MATCHES "sparc")
626 set(HAVE_ALIGNED_REQUIRED 1)
629 # Path to put FreeRDP data
630 set(FREERDP_DATA_PATH "${CMAKE_INSTALL_PREFIX}/share/freerdp")
632 # Path to put plugins
634 set(FREERDP_LIBRARY_PATH "${CMAKE_INSTALL_LIBDIR}")
636 set(FREERDP_PLUGIN_PATH "${CMAKE_INSTALL_LIBDIR}/freerdp")
637 set(FREERDP_ADDIN_PATH "${FREERDP_PLUGIN_PATH}")
639 # Path to put extensions
640 set(FREERDP_EXTENSION_PATH "${CMAKE_INSTALL_FULL_LIBDIR}/freerdp/extensions")
642 # Include directories
643 include_directories(${CMAKE_CURRENT_BINARY_DIR})
644 include_directories(${CMAKE_CURRENT_BINARY_DIR}/include)
645 include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
647 if(IS_DIRECTORY /usr/local/include)
648 include_directories(/usr/local/include)
649 link_directories(/usr/local/lib)
652 if(IS_DIRECTORY /usr/X11R6/include)
653 include_directories(/usr/X11R6/include)
659 add_definitions("-DHAVE_CONFIG_H")
660 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h)
662 # RPATH configuration
664 set(CMAKE_SKIP_RPATH FALSE)
665 set(CMAKE_SKIP_INSTALL_RPATH TRUE)
667 set(CMAKE_SKIP_BUILD_RPATH FALSE)
668 set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
669 set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
670 set(CMAKE_INSTALL_RPATH "\$ORIGIN/../${CMAKE_INSTALL_LIBDIR}:\$ORIGIN/..")
675 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pg")
676 set(PROFILER_LIBRARIES
677 "${FREERDP_EXTERNAL_PROFILER_PATH}/obj/local/${ANDROID_ABI}/libandroid-ndk-profiler.a")
678 include_directories("${FREERDP_EXTERNAL_PROFILER_PATH}")
687 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DFREERDP_TEST_EXPORTS")
692 set(TESTING_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}")
694 set(TESTING_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/Testing")
699 include_directories("${CMAKE_SOURCE_DIR}/winpr/include")
700 include_directories("${CMAKE_BINARY_DIR}/winpr/include")
702 add_subdirectory(winpr)
707 add_subdirectory(third-party)
708 if (NOT "${THIRD_PARTY_INCLUDES}" STREQUAL "")
709 include_directories(${THIRD_PARTY_INCLUDES})
713 add_subdirectory(include)
715 add_subdirectory(libfreerdp)
718 add_subdirectory(channels)
722 set(CMAKE_OSX_DEPLOYMENT_TARGET "")
723 if (IOS_PLATFORM MATCHES "SIMULATOR")
724 set(CMAKE_OSX_SYSROOT "iphonesimulator")
726 set(CMAKE_OSX_SYSROOT "iphoneos")
731 include_directories("${CMAKE_SOURCE_DIR}/rdtk/include")
732 include_directories("${CMAKE_BINARY_DIR}/rdtk/include")
734 add_subdirectory(rdtk)
737 add_subdirectory(client)
741 add_subdirectory(server)
746 if(${CMAKE_VERSION} VERSION_GREATER "2.8.10")
748 export(PACKAGE freerdp)
750 set(FREERDP_CMAKE_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/FreeRDP")
752 set(FREERDP_INCLUDE_DIR "include")
754 # keep for legacy builds
755 set(FREERDP_MONOLITHIC_BUILD OFF)
757 configure_package_config_file(FreeRDPConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/FreeRDPConfig.cmake
758 INSTALL_DESTINATION ${FREERDP_CMAKE_INSTALL_DIR}
759 PATH_VARS FREERDP_INCLUDE_DIR FREERDP_MONOLITHIC_BUILD)
761 write_basic_package_version_file(${CMAKE_CURRENT_BINARY_DIR}/FreeRDPConfigVersion.cmake
762 VERSION ${FREERDP_VERSION} COMPATIBILITY SameMajorVersion)
764 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/FreeRDPConfig.cmake ${CMAKE_CURRENT_BINARY_DIR}/FreeRDPConfigVersion.cmake
765 DESTINATION ${FREERDP_CMAKE_INSTALL_DIR})
767 install(EXPORT FreeRDPTargets DESTINATION ${FREERDP_CMAKE_INSTALL_DIR})
773 set(CMAKE_CPACK_INCLUDE_FILE "CMakeCPack.cmake")
775 if(NOT (VENDOR MATCHES "FreeRDP"))
776 if(DEFINED CLIENT_VENDOR_PATH)
777 if(EXISTS "${CMAKE_SOURCE_DIR}/${CLIENT_VENDOR_PATH}/CMakeCPack.cmake")
778 set(CMAKE_CPACK_INCLUDE_FILE "${CLIENT_VENDOR_PATH}/CMakeCPack.cmake")
783 #message("VENDOR: ${VENDOR} CLIENT_VENDOR_PATH: ${CLIENT_VENDOR_PATH} CMAKE_CPACK_INCLUDE_FILE: ${CMAKE_CPACK_INCLUDE_FILE}")
785 include(${CMAKE_CPACK_INCLUDE_FILE})
787 set(FREERDP_PC_LIBS "-lfreerdp -lfreerdp-client")
788 set(WINPR_PC_LIBS "-lwinpr")
790 set(FREERDP_PC_LIBS "${FREERDP_PC_LIBS} -lfreerdp-server")
793 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/freerdp.pc.in ${CMAKE_CURRENT_BINARY_DIR}/freerdp.pc @ONLY)
794 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/winpr.pc.in ${CMAKE_CURRENT_BINARY_DIR}/winpr.pc @ONLY)
795 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/freerdp.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
796 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/winpr.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)