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 "4")
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/sockio.h HAVE_SYS_SOCKIO_H)
331 check_include_files(sys/strtio.h HAVE_SYS_STRTIO_H)
332 check_include_files(sys/select.h HAVE_SYS_SELECT_H)
337 set(HAVE_INTTYPES_H 1)
338 set(HAVE_SYS_FILIO_H 1)
342 check_struct_has_member("struct tm" tm_gmtoff time.h HAVE_TM_GMTOFF)
344 set(HAVE_TM_GMTOFF 1)
350 if (NOT FREERDP_IOS_EXTERNAL_SSL_PATH)
351 message(STATUS "FREERDP_IOS_EXTERNAL_SSL_PATH not set! Required if openssl is not found in the iOS SDK (which usually isn't")
353 set(CMAKE_FIND_ROOT_PATH ${CMAKE_FIND_ROOT_PATH} ${FREERDP_IOS_EXTERNAL_SSL_PATH})
354 set_property(GLOBAL PROPERTY XCODE_ATTRIBUTE_SKIP_INSTALL YES)
356 if(NOT DEFINED CMAKE_OSX_ARCHITECTURES)
357 set(CMAKE_OSX_ARCHITECTURES i386 x86_64)
360 if(IS_DIRECTORY /opt/local/include)
361 include_directories(/opt/local/include)
362 link_directories(/opt/local/lib)
366 # Temporarily disabled, causes the cmake script to be reexecuted, causing the compilation to fail.
367 # Workaround: specify the parameter in the command-line
369 # set(CMAKE_C_COMPILER "clang")
373 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -v")
374 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -v")
380 set(WITH_MANPAGES "ON")
383 set(WITH_WAYLAND "OFF")
388 set(WITH_LIBRARY_VERSIONING "OFF")
390 if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
391 add_definitions(-DNDK_DEBUG=1)
393 # NOTE: Manually add -gdwarf-3, as newer toolchains default to -gdwarf-4,
394 # which is not supported by the gdbserver binary shipped with
395 # the android NDK (tested with r9b)
396 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_DEBUG} -gdwarf-3")
398 set(CMAKE_C_LINK_FLAGS "${CMAKE_C_LINK_FLAGS} -llog")
400 if (NOT FREERDP_EXTERNAL_JPEG_PATH)
401 if(IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/external/jpeg8d")
402 set(FREERDP_EXTERNAL_JPEG_PATH "${CMAKE_CURRENT_SOURCE_DIR}/external/jpeg8d")
404 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)")
407 if (NOT FREERDP_EXTERNAL_SSL_PATH)
408 if(IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/external/openssl")
409 set(FREERDP_EXTERNAL_SSL_PATH "${CMAKE_CURRENT_SOURCE_DIR}/external/openssl")
411 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)")
414 if (NOT FREERDP_EXTERNAL_PROFILER_PATH)
415 if(IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/external/android-ndk-profiler")
416 set(FREERDP_EXTERNAL_PROFILER_PATH
417 "${CMAKE_CURRENT_SOURCE_DIR}/external/android-ndk-profiler")
419 message(STATUS "FREERDP_EXTERNAL_PROFILER_PATH not set!")
424 set(CMAKE_FIND_ROOT_PATH ${CMAKE_FIND_ROOT_PATH} ${FREERDP_EXTERNAL_SSL_PATH} ${FREERDP_EXTERNAL_JPEG_PATH})
425 set(CMAKE_FIND_ROOT_PATH ${CMAKE_FIND_ROOT_PATH} ${FREERDP_EXTERNAL_PROFILER_PATH})
427 set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/client/Android/FreeRDPCore/jni/${ANDROID_ABI})
428 CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/scripts/regenerate_jni_headers.sh.cmake
429 ${CMAKE_BINARY_DIR}/scripts/regenerate_jni_headers.sh @ONLY)
431 CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/scripts/gprof_generate.sh.cmake ${CMAKE_BINARY_DIR}/scripts/gprof_generate.sh @ONLY)
436 set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
438 if(NOT IOS AND NOT ANDROID)
439 find_package(Threads REQUIRED)
443 check_library_exists(pthread pthread_mutex_timedlock "" HAVE_PTHREAD_MUTEX_TIMEDLOCK)
446 if(WITH_VALGRIND_MEMCHECK)
447 check_include_files(valgrind/memcheck.h HAVE_VALGRIND_MEMCHECK_H)
449 unset(HAVE_VALGRIND_MEMCHECK_H CACHE)
453 check_include_files(sys/eventfd.h HAVE_AIO_H)
454 check_include_files(sys/eventfd.h HAVE_EVENTFD_H)
456 check_symbol_exists(eventfd_read sys/eventfd.h WITH_EVENTFD_READ_WRITE)
458 check_include_files(sys/timerfd.h HAVE_TIMERFD_H)
459 check_include_files(poll.h HAVE_POLL_H)
460 list(APPEND CMAKE_REQUIRED_LIBRARIES m)
461 check_symbol_exists(ceill math.h HAVE_MATH_C99_LONG_DOUBLE)
462 list(REMOVE_ITEM CMAKE_REQUIRED_LIBRARIES m)
463 set(X11_FEATURE_TYPE "RECOMMENDED")
464 set(WAYLAND_FEATURE_TYPE "RECOMMENDED")
466 set(X11_FEATURE_TYPE "DISABLED")
467 set(WAYLAND_FEATURE_TYPE "DISABLED")
471 find_package(PCSCWinPR)
474 set(X11_FEATURE_PURPOSE "X11")
475 set(X11_FEATURE_DESCRIPTION "X11 client and server")
477 set(WAYLAND_FEATURE_PURPOSE "Wayland")
478 set(WAYLAND_FEATURE_DESCRIPTION "Wayland client")
480 set(DIRECTFB_FEATURE_TYPE "OPTIONAL")
481 set(DIRECTFB_FEATURE_PURPOSE "DirectFB")
482 set(DIRECTFB_FEATURE_DESCRIPTION "DirectFB client")
484 set(ZLIB_FEATURE_TYPE "REQUIRED")
485 set(ZLIB_FEATURE_PURPOSE "compression")
486 set(ZLIB_FEATURE_DESCRIPTION "data compression")
488 set(OPENSSL_FEATURE_TYPE "REQUIRED")
489 set(OPENSSL_FEATURE_PURPOSE "cryptography")
490 set(OPENSSL_FEATURE_DESCRIPTION "encryption, certificate validation, hashing functions")
492 set(OPENSLES_FEATURE_TYPE "OPTIONAL")
493 set(OPENSLES_FEATURE_PURPOSE "multimedia")
494 set(OPENSLES_FEATURE_DESCRIPTION "OpenSLES audio / video")
496 set(OSS_FEATURE_TYPE "RECOMMENDED")
497 set(OSS_FEATURE_PURPOSE "sound")
498 set(OSS_FEATURE_DESCRIPTION "audio input, audio output and multimedia redirection")
500 set(ALSA_FEATURE_TYPE "RECOMMENDED")
501 set(ALSA_FEATURE_PURPOSE "sound")
502 set(ALSA_FEATURE_DESCRIPTION "audio input, audio output and multimedia redirection")
504 set(PULSE_FEATURE_TYPE "OPTIONAL")
505 set(PULSE_FEATURE_PURPOSE "sound")
506 set(PULSE_FEATURE_DESCRIPTION "audio input, audio output and multimedia redirection")
508 set(CUPS_FEATURE_TYPE "OPTIONAL")
509 set(CUPS_FEATURE_PURPOSE "printing")
510 set(CUPS_FEATURE_DESCRIPTION "printer device redirection")
512 set(PCSC_FEATURE_TYPE "OPTIONAL")
513 set(PCSC_FEATURE_PURPOSE "smart card")
514 set(PCSC_FEATURE_DESCRIPTION "smart card device redirection")
516 set(FFMPEG_FEATURE_TYPE "RECOMMENDED")
517 set(FFMPEG_FEATURE_PURPOSE "multimedia")
518 set(FFMPEG_FEATURE_DESCRIPTION "multimedia redirection, audio and video playback")
520 set(GSTREAMER_0_10_FEATURE_TYPE "OPTIONAL")
521 set(GSTREAMER_0_10_FEATURE_PURPOSE "multimedia")
522 set(GSTREAMER_0_10_FEATURE_DESCRIPTION "multimedia redirection, audio and video playback, gstreamer 0.10 version")
524 set(GSTREAMER_1_0_FEATURE_TYPE "RECOMMENDED")
525 set(GSTREAMER_1_0_FEATURE_PURPOSE "multimedia")
526 set(GSTREAMER_1_0_FEATURE_DESCRIPTION "multimedia redirection, audio and video playback")
528 set(IPP_FEATURE_TYPE "OPTIONAL")
529 set(IPP_FEATURE_PURPOSE "performance")
530 set(IPP_FEATURE_DESCRIPTION "Intel Integrated Performance Primitives library")
532 set(JPEG_FEATURE_TYPE "OPTIONAL")
533 set(JPEG_FEATURE_PURPOSE "codec")
534 set(JPEG_FEATURE_DESCRIPTION "use JPEG library")
536 set(OPENH264_FEATURE_TYPE "OPTIONAL")
537 set(OPENH264_FEATURE_PURPOSE "codec")
538 set(OPENH264_FEATURE_DESCRIPTION "use OpenH264 library")
540 set(GSM_FEATURE_TYPE "OPTIONAL")
541 set(GSM_FEATURE_PURPOSE "codec")
542 set(GSM_FEATURE_DESCRIPTION "GSM audio codec library")
545 set(X11_FEATURE_TYPE "DISABLED")
546 set(WAYLAND_FEATURE_TYPE "DISABLED")
547 set(ZLIB_FEATURE_TYPE "DISABLED")
548 set(DIRECTFB_FEATURE_TYPE "DISABLED")
549 set(OSS_FEATURE_TYPE "DISABLED")
550 set(ALSA_FEATURE_TYPE "DISABLED")
551 set(PULSE_FEATURE_TYPE "DISABLED")
552 set(CUPS_FEATURE_TYPE "DISABLED")
553 set(PCSC_FEATURE_TYPE "DISABLED")
554 set(FFMPEG_FEATURE_TYPE "DISABLED")
555 set(GSTREAMER_1_0_FEATURE_TYPE "DISABLED")
556 set(GSTREAMER_0_10_FEATURE_TYPE "OPTIONAL")
557 set(OPENSLES_FEATURE_TYPE "DISABLED")
561 set(DIRECTFB_FEATURE_TYPE "DISABLED")
562 set(FFMPEG_FEATURE_TYPE "OPTIONAL")
563 set(GSTREAMER_1_0_FEATURE_TYPE "OPTIONAL")
564 set(X11_FEATURE_TYPE "OPTIONAL")
565 set(WAYLAND_FEATURE_TYPE "DISABLED")
566 set(OSS_FEATURE_TYPE "DISABLED")
567 set(ALSA_FEATURE_TYPE "DISABLED")
569 set(X11_FEATURE_TYPE "DISABLED")
570 set(PULSE_FEATURE_TYPE "DISABLED")
571 set(CUPS_FEATURE_TYPE "DISABLED")
572 set(PCSC_FEATURE_TYPE "DISABLED")
573 set(GSTREAMER_1_0_FEATURE_TYPE "DISABLED")
574 set(GSTREAMER_0_10_FEATURE_TYPE "DISABLED")
576 set(OPENSLES_FEATURE_TYPE "DISABLED")
580 set(X11_FEATURE_TYPE "DISABLED")
581 set(WAYLAND_FEATURE_TYPE "DISABLED")
582 set(DIRECTFB_FEATURE_TYPE "DISABLED")
583 set(OSS_FEATURE_TYPE "DISABLED")
584 set(ALSA_FEATURE_TYPE "DISABLED")
585 set(PULSE_FEATURE_TYPE "DISABLED")
586 set(CUPS_FEATURE_TYPE "DISABLED")
587 set(PCSC_FEATURE_TYPE "DISABLED")
588 set(FFMPEG_FEATURE_TYPE "DISABLED")
589 set(GSTREAMER_1_0_FEATURE_TYPE "DISABLED")
590 set(GSTREAMER_0_10_FEATURE_TYPE "DISABLED")
591 set(OPENSLES_FEATURE_TYPE "REQUIRED")
595 find_feature(X11 ${X11_FEATURE_TYPE} ${X11_FEATURE_PURPOSE} ${X11_FEATURE_DESCRIPTION})
596 find_feature(Wayland ${WAYLAND_FEATURE_TYPE} ${WAYLAND_FEATURE_PURPOSE} ${WAYLAND_FEATURE_DESCRIPTION})
597 find_feature(DirectFB ${DIRECTFB_FEATURE_TYPE} ${DIRECTFB_FEATURE_PURPOSE} ${DIRECTFB_FEATURE_DESCRIPTION})
598 if (${WITH_DIRECTFB})
599 message(WARNING "DIRECTFB is orphaned and not maintained see docs/README.directfb for details")
602 find_feature(ZLIB ${ZLIB_FEATURE_TYPE} ${ZLIB_FEATURE_PURPOSE} ${ZLIB_FEATURE_DESCRIPTION})
603 find_feature(OpenSSL ${OPENSSL_FEATURE_TYPE} ${OPENSSL_FEATURE_PURPOSE} ${OPENSSL_FEATURE_DESCRIPTION})
604 find_feature(OpenSLES ${OPENSLES_FEATURE_TYPE} ${OPENSLES_FEATURE_PURPOSE} ${OPENSLES_FEATURE_DESCRIPTION})
606 find_feature(OSS ${OSS_FEATURE_TYPE} ${OSS_FEATURE_PURPOSE} ${OSS_FEATURE_DESCRIPTION})
607 find_feature(ALSA ${ALSA_FEATURE_TYPE} ${ALSA_FEATURE_PURPOSE} ${ALSA_FEATURE_DESCRIPTION})
608 find_feature(Pulse ${PULSE_FEATURE_TYPE} ${PULSE_FEATURE_PURPOSE} ${PULSE_FEATURE_DESCRIPTION})
610 find_feature(Cups ${CUPS_FEATURE_TYPE} ${CUPS_FEATURE_PURPOSE} ${CUPS_FEATURE_DESCRIPTION})
611 find_feature(PCSC ${PCSC_FEATURE_TYPE} ${PCSC_FEATURE_PURPOSE} ${PCSC_FEATURE_DESCRIPTION})
613 find_feature(FFmpeg ${FFMPEG_FEATURE_TYPE} ${FFMPEG_FEATURE_PURPOSE} ${FFMPEG_FEATURE_DESCRIPTION})
615 find_feature(GStreamer_0_10 ${GSTREAMER_0_10_FEATURE_TYPE} ${GSTREAMER_0_10_FEATURE_PURPOSE} ${GSTREAMER_0_10_FEATURE_DESCRIPTION})
616 find_feature(GStreamer_1_0 ${GSTREAMER_1_0_FEATURE_TYPE} ${GSTREAMER_1_0_FEATURE_PURPOSE} ${GSTREAMER_1_0_FEATURE_DESCRIPTION})
618 find_feature(JPEG ${JPEG_FEATURE_TYPE} ${JPEG_FEATURE_PURPOSE} ${JPEG_FEATURE_DESCRIPTION})
619 find_feature(OpenH264 ${OPENH264_FEATURE_TYPE} ${OPENH264_FEATURE_PURPOSE} ${OPENH264_FEATURE_DESCRIPTION})
620 find_feature(GSM ${GSM_FEATURE_TYPE} ${GSM_FEATURE_PURPOSE} ${GSM_FEATURE_DESCRIPTION})
622 if(TARGET_ARCH MATCHES "x86|x64")
624 # Intel Performance Primitives
625 find_feature(IPP ${IPP_FEATURE_TYPE} ${IPP_FEATURE_PURPOSE} ${IPP_FEATURE_DESCRIPTION})
629 if (TARGET_ARCH MATCHES "sparc")
630 set(HAVE_ALIGNED_REQUIRED 1)
633 # Path to put FreeRDP data
634 set(FREERDP_DATA_PATH "${CMAKE_INSTALL_PREFIX}/share/freerdp")
636 # Path to put plugins
638 set(FREERDP_LIBRARY_PATH "${CMAKE_INSTALL_LIBDIR}")
640 set(FREERDP_PLUGIN_PATH "${CMAKE_INSTALL_LIBDIR}/freerdp")
641 set(FREERDP_ADDIN_PATH "${FREERDP_PLUGIN_PATH}")
643 # Path to put extensions
644 set(FREERDP_EXTENSION_PATH "${CMAKE_INSTALL_FULL_LIBDIR}/freerdp/extensions")
646 # Include directories
647 include_directories(${CMAKE_CURRENT_BINARY_DIR})
648 include_directories(${CMAKE_CURRENT_BINARY_DIR}/include)
649 include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
651 if(IS_DIRECTORY /usr/local/include)
652 include_directories(/usr/local/include)
653 link_directories(/usr/local/lib)
656 if(IS_DIRECTORY /usr/X11R6/include)
657 include_directories(/usr/X11R6/include)
663 add_definitions("-DHAVE_CONFIG_H")
664 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h)
666 # RPATH configuration
668 set(CMAKE_SKIP_RPATH FALSE)
669 set(CMAKE_SKIP_INSTALL_RPATH TRUE)
671 set(CMAKE_SKIP_BUILD_RPATH FALSE)
672 set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
673 set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
674 set(CMAKE_INSTALL_RPATH "\$ORIGIN/../${CMAKE_INSTALL_LIBDIR}:\$ORIGIN/..")
679 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pg")
680 set(PROFILER_LIBRARIES
681 "${FREERDP_EXTERNAL_PROFILER_PATH}/obj/local/${ANDROID_ABI}/libandroid-ndk-profiler.a")
682 include_directories("${FREERDP_EXTERNAL_PROFILER_PATH}")
691 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DFREERDP_TEST_EXPORTS")
696 set(TESTING_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}")
698 set(TESTING_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/Testing")
703 include_directories("${CMAKE_SOURCE_DIR}/winpr/include")
704 include_directories("${CMAKE_BINARY_DIR}/winpr/include")
706 add_subdirectory(winpr)
711 add_subdirectory(third-party)
712 if (NOT "${THIRD_PARTY_INCLUDES}" STREQUAL "")
713 include_directories(${THIRD_PARTY_INCLUDES})
717 add_subdirectory(include)
719 add_subdirectory(libfreerdp)
722 add_subdirectory(channels)
726 set(CMAKE_OSX_DEPLOYMENT_TARGET "")
727 if (IOS_PLATFORM MATCHES "SIMULATOR")
728 set(CMAKE_OSX_SYSROOT "iphonesimulator")
730 set(CMAKE_OSX_SYSROOT "iphoneos")
735 include_directories("${CMAKE_SOURCE_DIR}/rdtk/include")
736 include_directories("${CMAKE_BINARY_DIR}/rdtk/include")
738 add_subdirectory(rdtk)
741 add_subdirectory(client)
745 add_subdirectory(server)
750 if(${CMAKE_VERSION} VERSION_GREATER "2.8.10")
752 export(PACKAGE freerdp)
754 set(FREERDP_CMAKE_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/FreeRDP")
756 set(FREERDP_INCLUDE_DIR "include")
758 # keep for legacy builds
759 set(FREERDP_MONOLITHIC_BUILD OFF)
761 configure_package_config_file(FreeRDPConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/FreeRDPConfig.cmake
762 INSTALL_DESTINATION ${FREERDP_CMAKE_INSTALL_DIR}
763 PATH_VARS FREERDP_INCLUDE_DIR FREERDP_MONOLITHIC_BUILD)
765 write_basic_package_version_file(${CMAKE_CURRENT_BINARY_DIR}/FreeRDPConfigVersion.cmake
766 VERSION ${FREERDP_VERSION} COMPATIBILITY SameMajorVersion)
768 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/FreeRDPConfig.cmake ${CMAKE_CURRENT_BINARY_DIR}/FreeRDPConfigVersion.cmake
769 DESTINATION ${FREERDP_CMAKE_INSTALL_DIR})
771 install(EXPORT FreeRDPTargets DESTINATION ${FREERDP_CMAKE_INSTALL_DIR})
777 set(CMAKE_CPACK_INCLUDE_FILE "CMakeCPack.cmake")
779 if(NOT (VENDOR MATCHES "FreeRDP"))
780 if(DEFINED CLIENT_VENDOR_PATH)
781 if(EXISTS "${CMAKE_SOURCE_DIR}/${CLIENT_VENDOR_PATH}/CMakeCPack.cmake")
782 set(CMAKE_CPACK_INCLUDE_FILE "${CLIENT_VENDOR_PATH}/CMakeCPack.cmake")
787 #message("VENDOR: ${VENDOR} CLIENT_VENDOR_PATH: ${CLIENT_VENDOR_PATH} CMAKE_CPACK_INCLUDE_FILE: ${CMAKE_CPACK_INCLUDE_FILE}")
789 include(${CMAKE_CPACK_INCLUDE_FILE})
791 set(FREERDP_PC_LIBS "-lfreerdp -lfreerdp-client")
792 set(WINPR_PC_LIBS "-lwinpr")
794 set(FREERDP_PC_LIBS "${FREERDP_PC_LIBS} -lfreerdp-server")
797 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/freerdp.pc.in ${CMAKE_CURRENT_BINARY_DIR}/freerdp.pc @ONLY)
798 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/winpr.pc.in ${CMAKE_CURRENT_BINARY_DIR}/winpr.pc @ONLY)
799 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/freerdp.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
800 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/winpr.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)