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 "1")
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)
114 # Configure MSVC Runtime
117 if(NOT DEFINED MSVC_RUNTIME)
118 set(MSVC_RUNTIME "dynamic")
120 if(${MSVC_RUNTIME} STREQUAL "static")
121 message(STATUS "Use the MSVC static runtime option carefully!")
122 message(STATUS "OpenSSL uses /MD by default, and is very picky")
123 message(STATUS "Random freeing errors are a common sign of runtime issues")
125 configure_msvc_runtime()
127 if(NOT DEFINED CMAKE_SUPPRESS_REGENERATION)
128 set(CMAKE_SUPPRESS_REGENERATION ON)
132 # Compiler-specific flags
133 if(CMAKE_COMPILER_IS_GNUCC)
134 if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64" OR CMAKE_SYSTEM_PROCESSOR MATCHES "i686")
135 CHECK_SYMBOL_EXISTS(__x86_64__ "" IS_X86_64)
137 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
139 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=i686")
142 if(CMAKE_POSITION_INDEPENDENT_CODE)
143 if(${CMAKE_VERSION} VERSION_LESS 2.8.9)
144 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
149 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall")
151 CHECK_C_COMPILER_FLAG (-Wno-unused-result Wno-unused-result)
152 if(Wno-unused-result)
153 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-result")
155 CHECK_C_COMPILER_FLAG (-Wno-unused-but-set-variable Wno-unused-but-set-variable)
156 if(Wno-unused-but-set-variable)
157 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-but-set-variable")
159 CHECK_C_COMPILER_FLAG(-Wno-deprecated-declarations Wno-deprecated-declarations)
160 if(Wno-deprecated-declarations)
161 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-deprecated-declarations")
163 CHECK_CXX_COMPILER_FLAG(-Wno-deprecated-declarations Wno-deprecated-declarationsCXX)
164 if(Wno-deprecated-declarationsCXX)
165 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated-declarations")
168 if(NOT EXPORT_ALL_SYMBOLS)
169 message(STATUS "GCC default symbol visibility: hidden")
170 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden")
173 CHECK_C_COMPILER_FLAG(-Wno-format Wno-format)
175 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-format")
178 if(CMAKE_BUILD_TYPE STREQUAL "Release")
179 set(CMAKE_C_FLAGS_RELEASE "-DNDEBUG")
180 set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG")
181 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2")
182 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2")
184 CHECK_C_COMPILER_FLAG (-Wno-builtin-macro-redefined Wno-builtin-macro-redefined)
185 if(Wno-builtin-macro-redefined)
186 set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -Wno-builtin-macro-redefined")
187 set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -D__FILE__='\"$(subst ${CMAKE_BINARY_DIR}/,,$(subst ${CMAKE_SOURCE_DIR}/,,$(abspath $<)))\"'")
190 CHECK_CXX_COMPILER_FLAG (-Wno-builtin-macro-redefined Wno-builtin-macro-redefinedCXX)
191 if(Wno-builtin-macro-redefinedCXX)
192 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wno-builtin-macro-redefined")
193 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -D__FILE__='\"$(subst ${CMAKE_BINARY_DIR}/,,$(subst ${CMAKE_SOURCE_DIR}/,,$(abspath $<)))\"'")
196 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g")
197 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g")
200 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse2")
204 if("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang")
205 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-parameter")
206 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-macros -Wno-padded")
207 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-c11-extensions -Wno-gnu")
209 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mssse3")
211 CHECK_C_COMPILER_FLAG(-Wno-deprecated-declarations Wno-deprecated-declarations)
212 if(Wno-deprecated-declarations)
213 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-deprecated-declarations")
215 CHECK_CXX_COMPILER_FLAG(-Wno-deprecated-declarations Wno-deprecated-declarationsCXX)
216 if(Wno-deprecated-declarationsCXX)
217 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated-declarations")
222 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /Gd")
223 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W3")
225 if(CMAKE_SIZEOF_VOID_P EQUAL 8)
226 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_AMD64_")
228 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_X86_")
231 set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR})
232 set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR})
234 if(CMAKE_BUILD_TYPE STREQUAL "Release")
236 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /Zi")
237 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zi")
243 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DUNICODE -D_UNICODE")
244 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_CRT_SECURE_NO_WARNINGS")
245 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DWIN32_LEAN_AND_MEAN")
247 # Set product and vendor for dll and exe version information.
248 set(RC_VERSION_VENDOR "FreeRDP")
249 set(RC_VERSION_PRODUCT "FreeRDP")
250 set(RC_VERSION_PATCH ${BUILD_NUMBER})
251 set(RC_VERSION_DESCRIPTION ${GIT_REVISION})
253 string(TIMESTAMP RC_VERSION_YEAR "%Y")
255 if(NOT DEFINED CMAKE_WINDOWS_VERSION)
256 set(CMAKE_WINDOWS_VERSION "WINXP")
259 if(CMAKE_WINDOWS_VERSION STREQUAL "WINXP")
260 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DWINVER=0x0501 -DWIN32_WINNT=0x0501")
261 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DWINVER=0x0501 -DWIN32_WINNT=0x0501")
262 elseif(CMAKE_WINDOWS_VERSION STREQUAL "WIN7")
263 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DWINVER=0x0601 -DWIN32_WINNT=0x0601")
264 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DWINVER=0x0601 -DWIN32_WINNT=0x0601")
265 elseif(CMAKE_WINDOWS_VERSION STREQUAL "WIN8")
266 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DWINVER=0x0602 -DWIN32_WINNT=0x0602")
267 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DWINVER=0x0602 -DWIN32_WINNT=0x0602")
270 if (FREERDP_EXTERNAL_SSL_PATH)
271 set(OPENSSL_ROOT_DIR ${FREERDP_EXTERNAL_SSL_PATH})
276 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -isysroot ${CMAKE_IOS_SDK_ROOT} -g")
279 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DWINPR_EXPORTS -DFREERDP_EXPORTS")
280 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DWINPR_EXPORTS -DFREERDP_EXPORTS")
284 check_include_files(fcntl.h HAVE_FCNTL_H)
285 check_include_files(unistd.h HAVE_UNISTD_H)
286 check_include_files(execinfo.h HAVE_EXECINFO_H)
287 check_include_files(stdint.h HAVE_STDINT_H)
288 check_include_files(inttypes.h HAVE_INTTYPES_H)
289 check_include_files(sys/modem.h HAVE_SYS_MODEM_H)
290 check_include_files(sys/filio.h HAVE_SYS_FILIO_H)
291 check_include_files(sys/strtio.h HAVE_SYS_STRTIO_H)
292 check_include_files(sys/select.h HAVE_SYS_SELECT_H)
297 set(HAVE_INTTYPES_H 1)
298 set(HAVE_SYS_FILIO_H 1)
302 check_struct_has_member("struct tm" tm_gmtoff time.h HAVE_TM_GMTOFF)
304 set(HAVE_TM_GMTOFF 1)
310 if (NOT FREERDP_IOS_EXTERNAL_SSL_PATH)
311 message(STATUS "FREERDP_IOS_EXTERNAL_SSL_PATH not set! Required if openssl is not found in the iOS SDK (which usually isn't")
313 set(CMAKE_FIND_ROOT_PATH ${CMAKE_FIND_ROOT_PATH} ${FREERDP_IOS_EXTERNAL_SSL_PATH})
314 set_property(GLOBAL PROPERTY XCODE_ATTRIBUTE_SKIP_INSTALL YES)
316 if(NOT DEFINED CMAKE_OSX_ARCHITECTURES)
317 set(CMAKE_OSX_ARCHITECTURES i386 x86_64)
320 if(IS_DIRECTORY /opt/local/include)
321 include_directories(/opt/local/include)
322 link_directories(/opt/local/lib)
326 # Temporarily disabled, causes the cmake script to be reexecuted, causing the compilation to fail.
327 # Workaround: specify the parameter in the command-line
329 # set(CMAKE_C_COMPILER "clang")
333 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -v")
334 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -v")
340 set(WITH_LIBRARY_VERSIONING "OFF")
342 if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
343 add_definitions(-DNDK_DEBUG=1)
345 # NOTE: Manually add -gdwarf-3, as newer toolchains default to -gdwarf-4,
346 # which is not supported by the gdbserver binary shipped with
347 # the android NDK (tested with r9b)
348 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_DEBUG} -gdwarf-3")
350 set(CMAKE_C_LINK_FLAGS "${CMAKE_C_LINK_FLAGS} -llog")
352 if (NOT FREERDP_EXTERNAL_JPEG_PATH)
353 if(IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/external/jpeg8d")
354 set(FREERDP_EXTERNAL_JPEG_PATH "${CMAKE_CURRENT_SOURCE_DIR}/external/jpeg8d")
356 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)")
359 if (NOT FREERDP_EXTERNAL_SSL_PATH)
360 if(IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/external/openssl")
361 set(FREERDP_EXTERNAL_SSL_PATH "${CMAKE_CURRENT_SOURCE_DIR}/external/openssl")
363 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)")
366 if (NOT FREERDP_EXTERNAL_PROFILER_PATH)
367 if(IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/external/android-ndk-profiler")
368 set(FREERDP_EXTERNAL_PROFILER_PATH
369 "${CMAKE_CURRENT_SOURCE_DIR}/external/android-ndk-profiler")
371 message(STATUS "FREERDP_EXTERNAL_PROFILER_PATH not set!")
376 set(CMAKE_FIND_ROOT_PATH ${CMAKE_FIND_ROOT_PATH} ${FREERDP_EXTERNAL_SSL_PATH} ${FREERDP_EXTERNAL_JPEG_PATH})
377 set(CMAKE_FIND_ROOT_PATH ${CMAKE_FIND_ROOT_PATH} ${FREERDP_EXTERNAL_PROFILER_PATH})
379 set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/client/Android/FreeRDPCore/jni/${ANDROID_ABI})
380 CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/scripts/regenerate_jni_headers.sh.cmake
381 ${CMAKE_BINARY_DIR}/scripts/regenerate_jni_headers.sh @ONLY)
383 CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/scripts/gprof_generate.sh.cmake ${CMAKE_BINARY_DIR}/scripts/gprof_generate.sh @ONLY)
388 set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
390 if(NOT IOS AND NOT ANDROID)
391 find_package(Threads REQUIRED)
395 list(APPEND CMAKE_REQUIRED_DEFINITIONS -D_GNU_SOURCE)
396 check_library_exists(pthread pthread_tryjoin_np "" HAVE_PTHREAD_GNU_EXT)
397 list(REMOVE_ITEM CMAKE_REQUIRED_DEFINITIONS -D_GNU_SOURCE)
400 if(WITH_VALGRIND_MEMCHECK)
401 check_include_files(valgrind/memcheck.h HAVE_VALGRIND_MEMCHECK_H)
403 unset(HAVE_VALGRIND_MEMCHECK_H CACHE)
407 check_include_files(sys/eventfd.h HAVE_AIO_H)
408 check_include_files(sys/eventfd.h HAVE_EVENTFD_H)
409 check_include_files(sys/timerfd.h HAVE_TIMERFD_H)
410 check_include_files(poll.h HAVE_POLL_H)
411 set(X11_FEATURE_TYPE "RECOMMENDED")
412 set(WAYLAND_FEATURE_TYPE "RECOMMENDED")
414 set(X11_FEATURE_TYPE "DISABLED")
415 set(WAYLAND_FEATURE_TYPE "DISABLED")
419 find_package(PCSCWinPR)
422 set(X11_FEATURE_PURPOSE "X11")
423 set(X11_FEATURE_DESCRIPTION "X11 client and server")
425 set(WAYLAND_FEATURE_PURPOSE "Wayland")
426 set(WAYLAND_FEATURE_DESCRIPTION "Wayland client")
428 set(DIRECTFB_FEATURE_TYPE "OPTIONAL")
429 set(DIRECTFB_FEATURE_PURPOSE "DirectFB")
430 set(DIRECTFB_FEATURE_DESCRIPTION "DirectFB client")
432 set(ZLIB_FEATURE_TYPE "REQUIRED")
433 set(ZLIB_FEATURE_PURPOSE "compression")
434 set(ZLIB_FEATURE_DESCRIPTION "data compression")
436 set(OPENSSL_FEATURE_TYPE "REQUIRED")
437 set(OPENSSL_FEATURE_PURPOSE "cryptography")
438 set(OPENSSL_FEATURE_DESCRIPTION "encryption, certificate validation, hashing functions")
440 set(OPENSLES_FEATURE_TYPE "OPTIONAL")
441 set(OPENSLES_FEATURE_PURPOSE "multimedia")
442 set(OPENSLES_FEATURE_DESCRIPTION "OpenSLES audio / video")
444 set(ALSA_FEATURE_TYPE "RECOMMENDED")
445 set(ALSA_FEATURE_PURPOSE "sound")
446 set(ALSA_FEATURE_DESCRIPTION "audio input, audio output and multimedia redirection")
448 set(PULSE_FEATURE_TYPE "OPTIONAL")
449 set(PULSE_FEATURE_PURPOSE "sound")
450 set(PULSE_FEATURE_DESCRIPTION "audio input, audio output and multimedia redirection")
452 set(CUPS_FEATURE_TYPE "OPTIONAL")
453 set(CUPS_FEATURE_PURPOSE "printing")
454 set(CUPS_FEATURE_DESCRIPTION "printer device redirection")
456 set(PCSC_FEATURE_TYPE "OPTIONAL")
457 set(PCSC_FEATURE_PURPOSE "smart card")
458 set(PCSC_FEATURE_DESCRIPTION "smart card device redirection")
460 set(FFMPEG_FEATURE_TYPE "RECOMMENDED")
461 set(FFMPEG_FEATURE_PURPOSE "multimedia")
462 set(FFMPEG_FEATURE_DESCRIPTION "multimedia redirection, audio and video playback")
464 set(GSTREAMER_0_10_FEATURE_TYPE "OPTIONAL")
465 set(GSTREAMER_0_10_FEATURE_PURPOSE "multimedia")
466 set(GSTREAMER_0_10_FEATURE_DESCRIPTION "multimedia redirection, audio and video playback, gstreamer 0.10 version")
468 set(GSTREAMER_1_0_FEATURE_TYPE "RECOMMENDED")
469 set(GSTREAMER_1_0_FEATURE_PURPOSE "multimedia")
470 set(GSTREAMER_1_0_FEATURE_DESCRIPTION "multimedia redirection, audio and video playback")
472 set(IPP_FEATURE_TYPE "OPTIONAL")
473 set(IPP_FEATURE_PURPOSE "performance")
474 set(IPP_FEATURE_DESCRIPTION "Intel Integrated Performance Primitives library")
476 set(JPEG_FEATURE_TYPE "OPTIONAL")
477 set(JPEG_FEATURE_PURPOSE "codec")
478 set(JPEG_FEATURE_DESCRIPTION "use JPEG library")
480 set(OPENH264_FEATURE_TYPE "OPTIONAL")
481 set(OPENH264_FEATURE_PURPOSE "codec")
482 set(OPENH264_FEATURE_DESCRIPTION "use OpenH264 library")
484 set(GSM_FEATURE_TYPE "OPTIONAL")
485 set(GSM_FEATURE_PURPOSE "codec")
486 set(GSM_FEATURE_DESCRIPTION "GSM audio codec library")
489 set(X11_FEATURE_TYPE "DISABLED")
490 set(WAYLAND_FEATURE_TYPE "DISABLED")
491 set(ZLIB_FEATURE_TYPE "DISABLED")
492 set(DIRECTFB_FEATURE_TYPE "DISABLED")
493 set(ALSA_FEATURE_TYPE "DISABLED")
494 set(PULSE_FEATURE_TYPE "DISABLED")
495 set(CUPS_FEATURE_TYPE "DISABLED")
496 set(PCSC_FEATURE_TYPE "DISABLED")
497 set(FFMPEG_FEATURE_TYPE "DISABLED")
498 set(GSTREAMER_1_0_FEATURE_TYPE "DISABLED")
499 set(GSTREAMER_0_10_FEATURE_TYPE "OPTIONAL")
500 set(OPENSLES_FEATURE_TYPE "DISABLED")
504 set(DIRECTFB_FEATURE_TYPE "DISABLED")
505 set(FFMPEG_FEATURE_TYPE "OPTIONAL")
506 set(GSTREAMER_1_0_FEATURE_TYPE "OPTIONAL")
507 set(X11_FEATURE_TYPE "OPTIONAL")
508 set(WAYLAND_FEATURE_TYPE "DISABLED")
509 set(ALSA_FEATURE_TYPE "DISABLED")
511 set(X11_FEATURE_TYPE "DISABLED")
512 set(PULSE_FEATURE_TYPE "DISABLED")
513 set(CUPS_FEATURE_TYPE "DISABLED")
514 set(PCSC_FEATURE_TYPE "DISABLED")
515 set(GSTREAMER_1_0_FEATURE_TYPE "DISABLED")
516 set(GSTREAMER_0_10_FEATURE_TYPE "DISABLED")
518 set(OPENSLES_FEATURE_TYPE "DISABLED")
522 set(X11_FEATURE_TYPE "DISABLED")
523 set(WAYLAND_FEATURE_TYPE "DISABLED")
524 set(DIRECTFB_FEATURE_TYPE "DISABLED")
525 set(ALSA_FEATURE_TYPE "DISABLED")
526 set(PULSE_FEATURE_TYPE "DISABLED")
527 set(CUPS_FEATURE_TYPE "DISABLED")
528 set(PCSC_FEATURE_TYPE "DISABLED")
529 set(FFMPEG_FEATURE_TYPE "DISABLED")
530 set(GSTREAMER_1_0_FEATURE_TYPE "DISABLED")
531 set(GSTREAMER_0_10_FEATURE_TYPE "DISABLED")
532 set(OPENSLES_FEATURE_TYPE "REQUIRED")
536 find_feature(X11 ${X11_FEATURE_TYPE} ${X11_FEATURE_PURPOSE} ${X11_FEATURE_DESCRIPTION})
537 find_feature(Wayland ${WAYLAND_FEATURE_TYPE} ${WAYLAND_FEATURE_PURPOSE} ${WAYLAND_FEATURE_DESCRIPTION})
538 find_feature(DirectFB ${DIRECTFB_FEATURE_TYPE} ${DIRECTFB_FEATURE_PURPOSE} ${DIRECTFB_FEATURE_DESCRIPTION})
539 if (${WITH_DIRECTFB})
540 message(WARNING "DIRECTFB is orphaned and not maintained see docs/README.directfb for details")
543 find_feature(ZLIB ${ZLIB_FEATURE_TYPE} ${ZLIB_FEATURE_PURPOSE} ${ZLIB_FEATURE_DESCRIPTION})
544 find_feature(OpenSSL ${OPENSSL_FEATURE_TYPE} ${OPENSSL_FEATURE_PURPOSE} ${OPENSSL_FEATURE_DESCRIPTION})
545 find_feature(OpenSLES ${OPENSLES_FEATURE_TYPE} ${OPENSLES_FEATURE_PURPOSE} ${OPENSLES_FEATURE_DESCRIPTION})
547 find_feature(ALSA ${ALSA_FEATURE_TYPE} ${ALSA_FEATURE_PURPOSE} ${ALSA_FEATURE_DESCRIPTION})
548 find_feature(Pulse ${PULSE_FEATURE_TYPE} ${PULSE_FEATURE_PURPOSE} ${PULSE_FEATURE_DESCRIPTION})
550 find_feature(Cups ${CUPS_FEATURE_TYPE} ${CUPS_FEATURE_PURPOSE} ${CUPS_FEATURE_DESCRIPTION})
551 find_feature(PCSC ${PCSC_FEATURE_TYPE} ${PCSC_FEATURE_PURPOSE} ${PCSC_FEATURE_DESCRIPTION})
553 find_feature(FFmpeg ${FFMPEG_FEATURE_TYPE} ${FFMPEG_FEATURE_PURPOSE} ${FFMPEG_FEATURE_DESCRIPTION})
555 find_feature(GStreamer_0_10 ${GSTREAMER_0_10_FEATURE_TYPE} ${GSTREAMER_0_10_FEATURE_PURPOSE} ${GSTREAMER_0_10_FEATURE_DESCRIPTION})
556 find_feature(GStreamer_1_0 ${GSTREAMER_1_0_FEATURE_TYPE} ${GSTREAMER_1_0_FEATURE_PURPOSE} ${GSTREAMER_1_0_FEATURE_DESCRIPTION})
558 find_feature(JPEG ${JPEG_FEATURE_TYPE} ${JPEG_FEATURE_PURPOSE} ${JPEG_FEATURE_DESCRIPTION})
559 find_feature(OpenH264 ${OPENH264_FEATURE_TYPE} ${OPENH264_FEATURE_PURPOSE} ${OPENH264_FEATURE_DESCRIPTION})
560 find_feature(GSM ${GSM_FEATURE_TYPE} ${GSM_FEATURE_PURPOSE} ${GSM_FEATURE_DESCRIPTION})
562 if(TARGET_ARCH MATCHES "x86|x64")
564 # Intel Performance Primitives
565 find_feature(IPP ${IPP_FEATURE_TYPE} ${IPP_FEATURE_PURPOSE} ${IPP_FEATURE_DESCRIPTION})
569 # Path to put FreeRDP data
570 set(FREERDP_DATA_PATH "${CMAKE_INSTALL_PREFIX}/share/freerdp")
572 # Path to put plugins
574 set(FREERDP_LIBRARY_PATH "${CMAKE_INSTALL_LIBDIR}")
576 set(FREERDP_PLUGIN_PATH "${CMAKE_INSTALL_LIBDIR}/freerdp")
577 set(FREERDP_ADDIN_PATH "${FREERDP_PLUGIN_PATH}")
579 # Path to put extensions
580 set(FREERDP_EXTENSION_PATH "${CMAKE_INSTALL_FULL_LIBDIR}/freerdp/extensions")
582 # Include directories
583 include_directories(${CMAKE_CURRENT_BINARY_DIR})
584 include_directories(${CMAKE_CURRENT_BINARY_DIR}/include)
585 include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
588 add_definitions("-DHAVE_CONFIG_H")
589 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h)
591 # RPATH configuration
593 set(CMAKE_SKIP_RPATH FALSE)
594 set(CMAKE_SKIP_INSTALL_RPATH TRUE)
596 set(CMAKE_SKIP_BUILD_RPATH FALSE)
597 set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
598 set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
599 set(CMAKE_INSTALL_RPATH "\$ORIGIN/../${CMAKE_INSTALL_LIBDIR}:\$ORIGIN/..")
604 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pg")
605 set(PROFILER_LIBRARIES
606 "${FREERDP_EXTERNAL_PROFILER_PATH}/obj/local/${ANDROID_ABI}/libandroid-ndk-profiler.a")
607 include_directories("${FREERDP_EXTERNAL_PROFILER_PATH}")
616 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DFREERDP_TEST_EXPORTS")
621 set(TESTING_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}")
623 set(TESTING_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/Testing")
628 include_directories("${CMAKE_SOURCE_DIR}/winpr/include")
629 include_directories("${CMAKE_BINARY_DIR}/winpr/include")
631 add_subdirectory(winpr)
636 add_subdirectory(third-party)
637 if (NOT "${THIRD_PARTY_INCLUDES}" STREQUAL "")
638 include_directories(${THIRD_PARTY_INCLUDES})
642 add_subdirectory(include)
644 add_subdirectory(libfreerdp)
647 add_subdirectory(channels)
651 set(CMAKE_OSX_DEPLOYMENT_TARGET "")
652 if (IOS_PLATFORM MATCHES "SIMULATOR")
653 set(CMAKE_OSX_SYSROOT "iphonesimulator")
655 set(CMAKE_OSX_SYSROOT "iphoneos")
660 include_directories("${CMAKE_SOURCE_DIR}/rdtk/include")
661 include_directories("${CMAKE_BINARY_DIR}/rdtk/include")
663 add_subdirectory(rdtk)
666 add_subdirectory(client)
670 add_subdirectory(server)
675 if(${CMAKE_VERSION} VERSION_GREATER "2.8.10")
677 export(PACKAGE freerdp)
679 set(FREERDP_CMAKE_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/FreeRDP")
681 set(FREERDP_INCLUDE_DIR "include")
683 # keep for legacy builds
684 set(FREERDP_MONOLITHIC_BUILD OFF)
686 configure_package_config_file(FreeRDPConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/FreeRDPConfig.cmake
687 INSTALL_DESTINATION ${FREERDP_CMAKE_INSTALL_DIR}
688 PATH_VARS FREERDP_INCLUDE_DIR FREERDP_MONOLITHIC_BUILD)
690 write_basic_package_version_file(${CMAKE_CURRENT_BINARY_DIR}/FreeRDPConfigVersion.cmake
691 VERSION ${FREERDP_VERSION} COMPATIBILITY SameMajorVersion)
693 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/FreeRDPConfig.cmake ${CMAKE_CURRENT_BINARY_DIR}/FreeRDPConfigVersion.cmake
694 DESTINATION ${FREERDP_CMAKE_INSTALL_DIR})
696 install(EXPORT FreeRDPTargets DESTINATION ${FREERDP_CMAKE_INSTALL_DIR})
702 set(CMAKE_CPACK_INCLUDE_FILE "CMakeCPack.cmake")
704 if(NOT (VENDOR MATCHES "FreeRDP"))
705 if(DEFINED CLIENT_VENDOR_PATH)
706 if(EXISTS "${CMAKE_SOURCE_DIR}/${CLIENT_VENDOR_PATH}/CMakeCPack.cmake")
707 set(CMAKE_CPACK_INCLUDE_FILE "${CLIENT_VENDOR_PATH}/CMakeCPack.cmake")
712 #message("VENDOR: ${VENDOR} CLIENT_VENDOR_PATH: ${CLIENT_VENDOR_PATH} CMAKE_CPACK_INCLUDE_FILE: ${CMAKE_CPACK_INCLUDE_FILE}")
714 include(${CMAKE_CPACK_INCLUDE_FILE})
716 set(FREERDP_PC_LIBS "-lfreerdp -lfreerdp-client")
717 set(WINPR_PC_LIBS "-lwinpr")
719 set(FREERDP_PC_LIBS "${FREERDP_PC_LIBS} -lfreerdp-server")
722 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/freerdp.pc.in ${CMAKE_CURRENT_BINARY_DIR}/freerdp.pc @ONLY)
723 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/winpr.pc.in ${CMAKE_CURRENT_BINARY_DIR}/winpr.pc @ONLY)
724 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/freerdp.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
725 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/winpr.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)