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/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 list(APPEND CMAKE_REQUIRED_LIBRARIES m)
460 check_symbol_exists(ceill math.h HAVE_MATH_C99_LONG_DOUBLE)
461 list(REMOVE_ITEM CMAKE_REQUIRED_LIBRARIES m)
462 set(X11_FEATURE_TYPE "RECOMMENDED")
463 set(WAYLAND_FEATURE_TYPE "RECOMMENDED")
465 set(X11_FEATURE_TYPE "DISABLED")
466 set(WAYLAND_FEATURE_TYPE "DISABLED")
470 find_package(PCSCWinPR)
473 set(X11_FEATURE_PURPOSE "X11")
474 set(X11_FEATURE_DESCRIPTION "X11 client and server")
476 set(WAYLAND_FEATURE_PURPOSE "Wayland")
477 set(WAYLAND_FEATURE_DESCRIPTION "Wayland client")
479 set(DIRECTFB_FEATURE_TYPE "OPTIONAL")
480 set(DIRECTFB_FEATURE_PURPOSE "DirectFB")
481 set(DIRECTFB_FEATURE_DESCRIPTION "DirectFB client")
483 set(ZLIB_FEATURE_TYPE "REQUIRED")
484 set(ZLIB_FEATURE_PURPOSE "compression")
485 set(ZLIB_FEATURE_DESCRIPTION "data compression")
487 set(OPENSSL_FEATURE_TYPE "REQUIRED")
488 set(OPENSSL_FEATURE_PURPOSE "cryptography")
489 set(OPENSSL_FEATURE_DESCRIPTION "encryption, certificate validation, hashing functions")
491 set(OPENSLES_FEATURE_TYPE "OPTIONAL")
492 set(OPENSLES_FEATURE_PURPOSE "multimedia")
493 set(OPENSLES_FEATURE_DESCRIPTION "OpenSLES audio / video")
495 set(OSS_FEATURE_TYPE "RECOMMENDED")
496 set(OSS_FEATURE_PURPOSE "sound")
497 set(OSS_FEATURE_DESCRIPTION "audio input, audio output and multimedia redirection")
499 set(ALSA_FEATURE_TYPE "RECOMMENDED")
500 set(ALSA_FEATURE_PURPOSE "sound")
501 set(ALSA_FEATURE_DESCRIPTION "audio input, audio output and multimedia redirection")
503 set(PULSE_FEATURE_TYPE "OPTIONAL")
504 set(PULSE_FEATURE_PURPOSE "sound")
505 set(PULSE_FEATURE_DESCRIPTION "audio input, audio output and multimedia redirection")
507 set(CUPS_FEATURE_TYPE "OPTIONAL")
508 set(CUPS_FEATURE_PURPOSE "printing")
509 set(CUPS_FEATURE_DESCRIPTION "printer device redirection")
511 set(PCSC_FEATURE_TYPE "OPTIONAL")
512 set(PCSC_FEATURE_PURPOSE "smart card")
513 set(PCSC_FEATURE_DESCRIPTION "smart card device redirection")
515 set(FFMPEG_FEATURE_TYPE "RECOMMENDED")
516 set(FFMPEG_FEATURE_PURPOSE "multimedia")
517 set(FFMPEG_FEATURE_DESCRIPTION "multimedia redirection, audio and video playback")
519 set(GSTREAMER_0_10_FEATURE_TYPE "OPTIONAL")
520 set(GSTREAMER_0_10_FEATURE_PURPOSE "multimedia")
521 set(GSTREAMER_0_10_FEATURE_DESCRIPTION "multimedia redirection, audio and video playback, gstreamer 0.10 version")
523 set(GSTREAMER_1_0_FEATURE_TYPE "RECOMMENDED")
524 set(GSTREAMER_1_0_FEATURE_PURPOSE "multimedia")
525 set(GSTREAMER_1_0_FEATURE_DESCRIPTION "multimedia redirection, audio and video playback")
527 set(IPP_FEATURE_TYPE "OPTIONAL")
528 set(IPP_FEATURE_PURPOSE "performance")
529 set(IPP_FEATURE_DESCRIPTION "Intel Integrated Performance Primitives library")
531 set(JPEG_FEATURE_TYPE "OPTIONAL")
532 set(JPEG_FEATURE_PURPOSE "codec")
533 set(JPEG_FEATURE_DESCRIPTION "use JPEG library")
535 set(OPENH264_FEATURE_TYPE "OPTIONAL")
536 set(OPENH264_FEATURE_PURPOSE "codec")
537 set(OPENH264_FEATURE_DESCRIPTION "use OpenH264 library")
539 set(GSM_FEATURE_TYPE "OPTIONAL")
540 set(GSM_FEATURE_PURPOSE "codec")
541 set(GSM_FEATURE_DESCRIPTION "GSM audio codec library")
544 set(X11_FEATURE_TYPE "DISABLED")
545 set(WAYLAND_FEATURE_TYPE "DISABLED")
546 set(ZLIB_FEATURE_TYPE "DISABLED")
547 set(DIRECTFB_FEATURE_TYPE "DISABLED")
548 set(OSS_FEATURE_TYPE "DISABLED")
549 set(ALSA_FEATURE_TYPE "DISABLED")
550 set(PULSE_FEATURE_TYPE "DISABLED")
551 set(CUPS_FEATURE_TYPE "DISABLED")
552 set(PCSC_FEATURE_TYPE "DISABLED")
553 set(FFMPEG_FEATURE_TYPE "DISABLED")
554 set(GSTREAMER_1_0_FEATURE_TYPE "DISABLED")
555 set(GSTREAMER_0_10_FEATURE_TYPE "OPTIONAL")
556 set(OPENSLES_FEATURE_TYPE "DISABLED")
560 set(DIRECTFB_FEATURE_TYPE "DISABLED")
561 set(FFMPEG_FEATURE_TYPE "OPTIONAL")
562 set(GSTREAMER_1_0_FEATURE_TYPE "OPTIONAL")
563 set(X11_FEATURE_TYPE "OPTIONAL")
564 set(WAYLAND_FEATURE_TYPE "DISABLED")
565 set(OSS_FEATURE_TYPE "DISABLED")
566 set(ALSA_FEATURE_TYPE "DISABLED")
568 set(X11_FEATURE_TYPE "DISABLED")
569 set(PULSE_FEATURE_TYPE "DISABLED")
570 set(CUPS_FEATURE_TYPE "DISABLED")
571 set(PCSC_FEATURE_TYPE "DISABLED")
572 set(GSTREAMER_1_0_FEATURE_TYPE "DISABLED")
573 set(GSTREAMER_0_10_FEATURE_TYPE "DISABLED")
575 set(OPENSLES_FEATURE_TYPE "DISABLED")
579 set(X11_FEATURE_TYPE "DISABLED")
580 set(WAYLAND_FEATURE_TYPE "DISABLED")
581 set(DIRECTFB_FEATURE_TYPE "DISABLED")
582 set(OSS_FEATURE_TYPE "DISABLED")
583 set(ALSA_FEATURE_TYPE "DISABLED")
584 set(PULSE_FEATURE_TYPE "DISABLED")
585 set(CUPS_FEATURE_TYPE "DISABLED")
586 set(PCSC_FEATURE_TYPE "DISABLED")
587 set(FFMPEG_FEATURE_TYPE "DISABLED")
588 set(GSTREAMER_1_0_FEATURE_TYPE "DISABLED")
589 set(GSTREAMER_0_10_FEATURE_TYPE "DISABLED")
590 set(OPENSLES_FEATURE_TYPE "REQUIRED")
594 find_feature(X11 ${X11_FEATURE_TYPE} ${X11_FEATURE_PURPOSE} ${X11_FEATURE_DESCRIPTION})
595 find_feature(Wayland ${WAYLAND_FEATURE_TYPE} ${WAYLAND_FEATURE_PURPOSE} ${WAYLAND_FEATURE_DESCRIPTION})
596 find_feature(DirectFB ${DIRECTFB_FEATURE_TYPE} ${DIRECTFB_FEATURE_PURPOSE} ${DIRECTFB_FEATURE_DESCRIPTION})
597 if (${WITH_DIRECTFB})
598 message(WARNING "DIRECTFB is orphaned and not maintained see docs/README.directfb for details")
601 find_feature(ZLIB ${ZLIB_FEATURE_TYPE} ${ZLIB_FEATURE_PURPOSE} ${ZLIB_FEATURE_DESCRIPTION})
602 find_feature(OpenSSL ${OPENSSL_FEATURE_TYPE} ${OPENSSL_FEATURE_PURPOSE} ${OPENSSL_FEATURE_DESCRIPTION})
603 find_feature(OpenSLES ${OPENSLES_FEATURE_TYPE} ${OPENSLES_FEATURE_PURPOSE} ${OPENSLES_FEATURE_DESCRIPTION})
605 find_feature(OSS ${OSS_FEATURE_TYPE} ${OSS_FEATURE_PURPOSE} ${OSS_FEATURE_DESCRIPTION})
606 find_feature(ALSA ${ALSA_FEATURE_TYPE} ${ALSA_FEATURE_PURPOSE} ${ALSA_FEATURE_DESCRIPTION})
607 find_feature(Pulse ${PULSE_FEATURE_TYPE} ${PULSE_FEATURE_PURPOSE} ${PULSE_FEATURE_DESCRIPTION})
609 find_feature(Cups ${CUPS_FEATURE_TYPE} ${CUPS_FEATURE_PURPOSE} ${CUPS_FEATURE_DESCRIPTION})
610 find_feature(PCSC ${PCSC_FEATURE_TYPE} ${PCSC_FEATURE_PURPOSE} ${PCSC_FEATURE_DESCRIPTION})
612 find_feature(FFmpeg ${FFMPEG_FEATURE_TYPE} ${FFMPEG_FEATURE_PURPOSE} ${FFMPEG_FEATURE_DESCRIPTION})
614 find_feature(GStreamer_0_10 ${GSTREAMER_0_10_FEATURE_TYPE} ${GSTREAMER_0_10_FEATURE_PURPOSE} ${GSTREAMER_0_10_FEATURE_DESCRIPTION})
615 find_feature(GStreamer_1_0 ${GSTREAMER_1_0_FEATURE_TYPE} ${GSTREAMER_1_0_FEATURE_PURPOSE} ${GSTREAMER_1_0_FEATURE_DESCRIPTION})
617 find_feature(JPEG ${JPEG_FEATURE_TYPE} ${JPEG_FEATURE_PURPOSE} ${JPEG_FEATURE_DESCRIPTION})
618 find_feature(OpenH264 ${OPENH264_FEATURE_TYPE} ${OPENH264_FEATURE_PURPOSE} ${OPENH264_FEATURE_DESCRIPTION})
619 find_feature(GSM ${GSM_FEATURE_TYPE} ${GSM_FEATURE_PURPOSE} ${GSM_FEATURE_DESCRIPTION})
621 if(TARGET_ARCH MATCHES "x86|x64")
623 # Intel Performance Primitives
624 find_feature(IPP ${IPP_FEATURE_TYPE} ${IPP_FEATURE_PURPOSE} ${IPP_FEATURE_DESCRIPTION})
628 if (TARGET_ARCH MATCHES "sparc")
629 set(HAVE_ALIGNED_REQUIRED 1)
632 # Path to put FreeRDP data
633 set(FREERDP_DATA_PATH "${CMAKE_INSTALL_PREFIX}/share/freerdp")
635 # Path to put plugins
637 set(FREERDP_LIBRARY_PATH "${CMAKE_INSTALL_LIBDIR}")
639 set(FREERDP_PLUGIN_PATH "${CMAKE_INSTALL_LIBDIR}/freerdp")
640 set(FREERDP_ADDIN_PATH "${FREERDP_PLUGIN_PATH}")
642 # Path to put extensions
643 set(FREERDP_EXTENSION_PATH "${CMAKE_INSTALL_FULL_LIBDIR}/freerdp/extensions")
645 # Include directories
646 include_directories(${CMAKE_CURRENT_BINARY_DIR})
647 include_directories(${CMAKE_CURRENT_BINARY_DIR}/include)
648 include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
650 if(IS_DIRECTORY /usr/local/include)
651 include_directories(/usr/local/include)
652 link_directories(/usr/local/lib)
655 if(IS_DIRECTORY /usr/X11R6/include)
656 include_directories(/usr/X11R6/include)
662 add_definitions("-DHAVE_CONFIG_H")
663 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h)
665 # RPATH configuration
667 set(CMAKE_SKIP_RPATH FALSE)
668 set(CMAKE_SKIP_INSTALL_RPATH TRUE)
670 set(CMAKE_SKIP_BUILD_RPATH FALSE)
671 set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
672 set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
673 set(CMAKE_INSTALL_RPATH "\$ORIGIN/../${CMAKE_INSTALL_LIBDIR}:\$ORIGIN/..")
678 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pg")
679 set(PROFILER_LIBRARIES
680 "${FREERDP_EXTERNAL_PROFILER_PATH}/obj/local/${ANDROID_ABI}/libandroid-ndk-profiler.a")
681 include_directories("${FREERDP_EXTERNAL_PROFILER_PATH}")
690 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DFREERDP_TEST_EXPORTS")
695 set(TESTING_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}")
697 set(TESTING_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/Testing")
702 include_directories("${CMAKE_SOURCE_DIR}/winpr/include")
703 include_directories("${CMAKE_BINARY_DIR}/winpr/include")
705 add_subdirectory(winpr)
710 add_subdirectory(third-party)
711 if (NOT "${THIRD_PARTY_INCLUDES}" STREQUAL "")
712 include_directories(${THIRD_PARTY_INCLUDES})
716 add_subdirectory(include)
718 add_subdirectory(libfreerdp)
721 add_subdirectory(channels)
725 set(CMAKE_OSX_DEPLOYMENT_TARGET "")
726 if (IOS_PLATFORM MATCHES "SIMULATOR")
727 set(CMAKE_OSX_SYSROOT "iphonesimulator")
729 set(CMAKE_OSX_SYSROOT "iphoneos")
734 include_directories("${CMAKE_SOURCE_DIR}/rdtk/include")
735 include_directories("${CMAKE_BINARY_DIR}/rdtk/include")
737 add_subdirectory(rdtk)
740 add_subdirectory(client)
744 add_subdirectory(server)
749 if(${CMAKE_VERSION} VERSION_GREATER "2.8.10")
751 export(PACKAGE freerdp)
753 set(FREERDP_CMAKE_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/FreeRDP")
755 set(FREERDP_INCLUDE_DIR "include")
757 # keep for legacy builds
758 set(FREERDP_MONOLITHIC_BUILD OFF)
760 configure_package_config_file(FreeRDPConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/FreeRDPConfig.cmake
761 INSTALL_DESTINATION ${FREERDP_CMAKE_INSTALL_DIR}
762 PATH_VARS FREERDP_INCLUDE_DIR FREERDP_MONOLITHIC_BUILD)
764 write_basic_package_version_file(${CMAKE_CURRENT_BINARY_DIR}/FreeRDPConfigVersion.cmake
765 VERSION ${FREERDP_VERSION} COMPATIBILITY SameMajorVersion)
767 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/FreeRDPConfig.cmake ${CMAKE_CURRENT_BINARY_DIR}/FreeRDPConfigVersion.cmake
768 DESTINATION ${FREERDP_CMAKE_INSTALL_DIR})
770 install(EXPORT FreeRDPTargets DESTINATION ${FREERDP_CMAKE_INSTALL_DIR})
776 set(CMAKE_CPACK_INCLUDE_FILE "CMakeCPack.cmake")
778 if(NOT (VENDOR MATCHES "FreeRDP"))
779 if(DEFINED CLIENT_VENDOR_PATH)
780 if(EXISTS "${CMAKE_SOURCE_DIR}/${CLIENT_VENDOR_PATH}/CMakeCPack.cmake")
781 set(CMAKE_CPACK_INCLUDE_FILE "${CLIENT_VENDOR_PATH}/CMakeCPack.cmake")
786 #message("VENDOR: ${VENDOR} CLIENT_VENDOR_PATH: ${CLIENT_VENDOR_PATH} CMAKE_CPACK_INCLUDE_FILE: ${CMAKE_CPACK_INCLUDE_FILE}")
788 include(${CMAKE_CPACK_INCLUDE_FILE})
790 set(FREERDP_PC_LIBS "-lfreerdp -lfreerdp-client")
791 set(WINPR_PC_LIBS "-lwinpr")
793 set(FREERDP_PC_LIBS "${FREERDP_PC_LIBS} -lfreerdp-server")
796 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/freerdp.pc.in ${CMAKE_CURRENT_BINARY_DIR}/freerdp.pc @ONLY)
797 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/winpr.pc.in ${CMAKE_CURRENT_BINARY_DIR}/winpr.pc @ONLY)
798 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/freerdp.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
799 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/winpr.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)