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(CheckStructHasMember)
47 include(FindPkgConfig)
48 include(TestBigEndian)
51 include(AutoVersioning)
52 include(ConfigOptions)
53 include(ComplexLibrary)
54 include(FeatureSummary)
55 include(CheckCCompilerFlag)
56 include(CheckCXXCompilerFlag)
57 include(GNUInstallDirsWrapper)
58 include(CMakePackageConfigHelpers)
62 if ($ENV{BUILD_NUMBER})
63 set(BUILD_NUMBER $ENV{BUILD_NUMBER})
65 set(WITH_LIBRARY_VERSIONING "ON")
66 set(FREERDP_VERSION_MAJOR "1")
67 set(FREERDP_VERSION_MINOR "2")
68 set(FREERDP_VERSION_REVISION "1")
69 set(FREERDP_VERSION_SUFFIX "dev")
70 set(FREERDP_API_VERSION "${FREERDP_VERSION_MAJOR}.${FREERDP_VERSION_MINOR}")
71 set(FREERDP_VERSION "${FREERDP_API_VERSION}.${FREERDP_VERSION_REVISION}")
72 if (FREERDP_VERSION_SUFFIX)
73 set(FREERDP_VERSION_FULL "${FREERDP_VERSION}-${FREERDP_VERSION_SUFFIX}")
75 set(FREERDP_VERSION_FULL "${FREERDP_VERSION}")
78 # Allow to search the host machine for git
80 SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM BOTH)
82 include(GetGitRevisionDescription)
83 git_get_exact_tag(GIT_REVISION --tags --always)
84 if (${GIT_REVISION} STREQUAL "n/a")
85 git_rev_parse(GIT_REVISION --short)
88 SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY)
91 message(STATUS "Git Revision ${GIT_REVISION}")
93 # Turn on solution folders (2.8.4+)
94 set_property(GLOBAL PROPERTY USE_FOLDERS ON)
96 # Default to release build type
97 if(NOT CMAKE_BUILD_TYPE)
98 set(CMAKE_BUILD_TYPE "Release")
101 if(NOT DEFINED BUILD_SHARED_LIBS)
102 if(ANDROID OR IOS OR APPLE)
103 set(BUILD_SHARED_LIBS OFF)
105 set(BUILD_SHARED_LIBS ON)
109 if(NOT DEFINED EXPORT_ALL_SYMBOLS)
110 set(EXPORT_ALL_SYMBOLS TRUE)
113 # Configure MSVC Runtime
116 if(NOT DEFINED MSVC_RUNTIME)
117 set(MSVC_RUNTIME "dynamic")
119 if(${MSVC_RUNTIME} STREQUAL "static")
120 message(STATUS "Use the MSVC static runtime option carefully!")
121 message(STATUS "OpenSSL uses /MD by default, and is very picky")
122 message(STATUS "Random freeing errors are a common sign of runtime issues")
124 configure_msvc_runtime()
126 if(NOT DEFINED CMAKE_SUPPRESS_REGENERATION)
127 set(CMAKE_SUPPRESS_REGENERATION ON)
131 # Compiler-specific flags
132 if(CMAKE_COMPILER_IS_GNUCC)
133 if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64" OR CMAKE_SYSTEM_PROCESSOR MATCHES "i686")
134 if(CMAKE_SIZEOF_VOID_P EQUAL 8)
135 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
137 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=i686")
140 if(CMAKE_POSITION_INDEPENDENT_CODE)
141 if(${CMAKE_VERSION} VERSION_LESS 2.8.9)
142 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
147 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall")
149 CHECK_C_COMPILER_FLAG (-Wno-unused-result Wno-unused-result)
150 if(Wno-unused-result)
151 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-result")
153 CHECK_C_COMPILER_FLAG (-Wno-unused-but-set-variable Wno-unused-but-set-variable)
154 if(Wno-unused-but-set-variable)
155 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-but-set-variable")
157 CHECK_C_COMPILER_FLAG(-Wno-deprecated-declarations Wno-deprecated-declarations)
158 if(Wno-deprecated-declarations)
159 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-deprecated-declarations")
161 CHECK_CXX_COMPILER_FLAG(-Wno-deprecated-declarations Wno-deprecated-declarationsCXX)
162 if(Wno-deprecated-declarationsCXX)
163 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated-declarations")
166 if(NOT EXPORT_ALL_SYMBOLS)
167 message(STATUS "GCC default symbol visibility: hidden")
168 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden")
171 CHECK_C_COMPILER_FLAG(-Wno-format Wno-format)
173 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-format")
176 if(CMAKE_BUILD_TYPE STREQUAL "Release")
177 set(CMAKE_C_FLAGS_RELEASE "-DNDEBUG")
178 set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG")
179 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2")
180 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2")
182 CHECK_C_COMPILER_FLAG (-Wno-builtin-macro-redefined Wno-builtin-macro-redefined)
183 if(Wno-builtin-macro-redefined)
184 set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -Wno-builtin-macro-redefined")
185 set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -D__FILE__='\"$(subst ${CMAKE_BINARY_DIR}/,,$(subst ${CMAKE_SOURCE_DIR}/,,$(abspath $<)))\"'")
188 CHECK_CXX_COMPILER_FLAG (-Wno-builtin-macro-redefined Wno-builtin-macro-redefinedCXX)
189 if(Wno-builtin-macro-redefinedCXX)
190 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wno-builtin-macro-redefined")
191 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -D__FILE__='\"$(subst ${CMAKE_BINARY_DIR}/,,$(subst ${CMAKE_SOURCE_DIR}/,,$(abspath $<)))\"'")
194 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g")
195 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g")
198 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse2")
202 if("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang")
203 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-parameter")
204 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-macros -Wno-padded")
205 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-c11-extensions -Wno-gnu")
207 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mssse3")
209 CHECK_C_COMPILER_FLAG(-Wno-deprecated-declarations Wno-deprecated-declarations)
210 if(Wno-deprecated-declarations)
211 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-deprecated-declarations")
213 CHECK_CXX_COMPILER_FLAG(-Wno-deprecated-declarations Wno-deprecated-declarationsCXX)
214 if(Wno-deprecated-declarationsCXX)
215 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated-declarations")
220 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /Gd")
221 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W3")
223 if(CMAKE_SIZEOF_VOID_P EQUAL 8)
224 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_AMD64_")
226 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_X86_")
229 set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR})
230 set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR})
232 if(CMAKE_BUILD_TYPE STREQUAL "Release")
234 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /Zi")
235 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zi")
241 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DUNICODE -D_UNICODE")
242 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_CRT_SECURE_NO_WARNINGS")
243 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DWIN32_LEAN_AND_MEAN")
245 # Set product and vendor for dll and exe version information.
246 set(RC_VERSION_VENDOR "FreeRDP")
247 set(RC_VERSION_PRODUCT "FreeRDP")
248 set(RC_VERSION_PATCH ${BUILD_NUMBER})
249 set(RC_VERSION_DESCRIPTION ${GIT_REVISION})
251 string(TIMESTAMP RC_VERSION_YEAR "%Y")
253 if(NOT DEFINED CMAKE_WINDOWS_VERSION)
254 set(CMAKE_WINDOWS_VERSION "WINXP")
257 if(CMAKE_WINDOWS_VERSION STREQUAL "WINXP")
258 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DWINVER=0x0501 -DWIN32_WINNT=0x0501")
259 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DWINVER=0x0501 -DWIN32_WINNT=0x0501")
260 elseif(CMAKE_WINDOWS_VERSION STREQUAL "WIN7")
261 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DWINVER=0x0601 -DWIN32_WINNT=0x0601")
262 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DWINVER=0x0601 -DWIN32_WINNT=0x0601")
263 elseif(CMAKE_WINDOWS_VERSION STREQUAL "WIN8")
264 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DWINVER=0x0602 -DWIN32_WINNT=0x0602")
265 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DWINVER=0x0602 -DWIN32_WINNT=0x0602")
268 if (FREERDP_EXTERNAL_SSL_PATH)
269 set(OPENSSL_ROOT_DIR ${FREERDP_EXTERNAL_SSL_PATH})
274 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -isysroot ${CMAKE_IOS_SDK_ROOT} -g")
277 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DWINPR_EXPORTS -DFREERDP_EXPORTS")
278 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DWINPR_EXPORTS -DFREERDP_EXPORTS")
282 check_include_files(fcntl.h HAVE_FCNTL_H)
283 check_include_files(unistd.h HAVE_UNISTD_H)
284 check_include_files(execinfo.h HAVE_EXECINFO_H)
285 check_include_files(stdint.h HAVE_STDINT_H)
286 check_include_files(inttypes.h HAVE_INTTYPES_H)
287 check_include_files(sys/modem.h HAVE_SYS_MODEM_H)
288 check_include_files(sys/filio.h HAVE_SYS_FILIO_H)
289 check_include_files(sys/strtio.h HAVE_SYS_STRTIO_H)
290 check_include_files(sys/select.h HAVE_SYS_SELECT_H)
295 set(HAVE_INTTYPES_H 1)
296 set(HAVE_SYS_FILIO_H 1)
300 check_struct_has_member("struct tm" tm_gmtoff time.h HAVE_TM_GMTOFF)
302 set(HAVE_TM_GMTOFF 1)
308 if (NOT FREERDP_IOS_EXTERNAL_SSL_PATH)
309 message(STATUS "FREERDP_IOS_EXTERNAL_SSL_PATH not set! Required if openssl is not found in the iOS SDK (which usually isn't")
311 set(CMAKE_FIND_ROOT_PATH ${CMAKE_FIND_ROOT_PATH} ${FREERDP_IOS_EXTERNAL_SSL_PATH})
312 set_property(GLOBAL PROPERTY XCODE_ATTRIBUTE_SKIP_INSTALL YES)
314 if(NOT DEFINED CMAKE_OSX_ARCHITECTURES)
315 set(CMAKE_OSX_ARCHITECTURES i386 x86_64)
318 if(IS_DIRECTORY /opt/local/include)
319 include_directories(/opt/local/include)
320 link_directories(/opt/local/lib)
324 # Temporarily disabled, causes the cmake script to be reexecuted, causing the compilation to fail.
325 # Workaround: specify the parameter in the command-line
327 # set(CMAKE_C_COMPILER "clang")
331 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -v")
332 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -v")
338 set(WITH_LIBRARY_VERSIONING "OFF")
340 if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
341 add_definitions(-DNDK_DEBUG=1)
343 # NOTE: Manually add -gdwarf-3, as newer toolchains default to -gdwarf-4,
344 # which is not supported by the gdbserver binary shipped with
345 # the android NDK (tested with r9b)
346 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_DEBUG} -gdwarf-3")
348 set(CMAKE_C_LINK_FLAGS "${CMAKE_C_LINK_FLAGS} -llog")
350 if (NOT FREERDP_EXTERNAL_JPEG_PATH)
351 if(IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/external/jpeg8d")
352 set(FREERDP_EXTERNAL_JPEG_PATH "${CMAKE_CURRENT_SOURCE_DIR}/external/jpeg8d")
354 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)")
357 if (NOT FREERDP_EXTERNAL_SSL_PATH)
358 if(IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/external/openssl")
359 set(FREERDP_EXTERNAL_SSL_PATH "${CMAKE_CURRENT_SOURCE_DIR}/external/openssl")
361 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)")
364 if (NOT FREERDP_EXTERNAL_PROFILER_PATH)
365 if(IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/external/android-ndk-profiler")
366 set(FREERDP_EXTERNAL_PROFILER_PATH
367 "${CMAKE_CURRENT_SOURCE_DIR}/external/android-ndk-profiler")
369 message(STATUS "FREERDP_EXTERNAL_PROFILER_PATH not set!")
374 set(CMAKE_FIND_ROOT_PATH ${CMAKE_FIND_ROOT_PATH} ${FREERDP_EXTERNAL_SSL_PATH} ${FREERDP_EXTERNAL_JPEG_PATH})
375 set(CMAKE_FIND_ROOT_PATH ${CMAKE_FIND_ROOT_PATH} ${FREERDP_EXTERNAL_PROFILER_PATH})
377 set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/client/Android/FreeRDPCore/jni/${ANDROID_ABI})
378 CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/scripts/regenerate_jni_headers.sh.cmake
379 ${CMAKE_BINARY_DIR}/scripts/regenerate_jni_headers.sh @ONLY)
381 CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/scripts/gprof_generate.sh.cmake ${CMAKE_BINARY_DIR}/scripts/gprof_generate.sh @ONLY)
386 set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
388 if(NOT IOS AND NOT ANDROID)
389 find_package(Threads REQUIRED)
393 list(APPEND CMAKE_REQUIRED_DEFINITIONS -D_GNU_SOURCE)
394 check_library_exists(pthread pthread_tryjoin_np "" HAVE_PTHREAD_GNU_EXT)
395 list(REMOVE_ITEM CMAKE_REQUIRED_DEFINITIONS -D_GNU_SOURCE)
398 if(WITH_VALGRIND_MEMCHECK)
399 check_include_files(valgrind/memcheck.h HAVE_VALGRIND_MEMCHECK_H)
401 unset(HAVE_VALGRIND_MEMCHECK_H CACHE)
405 check_include_files(sys/eventfd.h HAVE_AIO_H)
406 check_include_files(sys/eventfd.h HAVE_EVENTFD_H)
407 check_include_files(sys/timerfd.h HAVE_TIMERFD_H)
408 check_include_files(poll.h HAVE_POLL_H)
409 set(X11_FEATURE_TYPE "RECOMMENDED")
410 set(WAYLAND_FEATURE_TYPE "RECOMMENDED")
412 set(X11_FEATURE_TYPE "DISABLED")
413 set(WAYLAND_FEATURE_TYPE "DISABLED")
417 find_package(PCSCWinPR)
420 set(X11_FEATURE_PURPOSE "X11")
421 set(X11_FEATURE_DESCRIPTION "X11 client and server")
423 set(WAYLAND_FEATURE_PURPOSE "Wayland")
424 set(WAYLAND_FEATURE_DESCRIPTION "Wayland client")
426 set(DIRECTFB_FEATURE_TYPE "OPTIONAL")
427 set(DIRECTFB_FEATURE_PURPOSE "DirectFB")
428 set(DIRECTFB_FEATURE_DESCRIPTION "DirectFB client")
430 set(ZLIB_FEATURE_TYPE "REQUIRED")
431 set(ZLIB_FEATURE_PURPOSE "compression")
432 set(ZLIB_FEATURE_DESCRIPTION "data compression")
434 set(OPENSSL_FEATURE_TYPE "REQUIRED")
435 set(OPENSSL_FEATURE_PURPOSE "cryptography")
436 set(OPENSSL_FEATURE_DESCRIPTION "encryption, certificate validation, hashing functions")
438 set(OPENSLES_FEATURE_TYPE "OPTIONAL")
439 set(OPENSLES_FEATURE_PURPOSE "multimedia")
440 set(OPENSLES_FEATURE_DESCRIPTION "OpenSLES audio / video")
442 set(ALSA_FEATURE_TYPE "RECOMMENDED")
443 set(ALSA_FEATURE_PURPOSE "sound")
444 set(ALSA_FEATURE_DESCRIPTION "audio input, audio output and multimedia redirection")
446 set(PULSE_FEATURE_TYPE "OPTIONAL")
447 set(PULSE_FEATURE_PURPOSE "sound")
448 set(PULSE_FEATURE_DESCRIPTION "audio input, audio output and multimedia redirection")
450 set(CUPS_FEATURE_TYPE "OPTIONAL")
451 set(CUPS_FEATURE_PURPOSE "printing")
452 set(CUPS_FEATURE_DESCRIPTION "printer device redirection")
454 set(PCSC_FEATURE_TYPE "OPTIONAL")
455 set(PCSC_FEATURE_PURPOSE "smart card")
456 set(PCSC_FEATURE_DESCRIPTION "smart card device redirection")
458 set(FFMPEG_FEATURE_TYPE "RECOMMENDED")
459 set(FFMPEG_FEATURE_PURPOSE "multimedia")
460 set(FFMPEG_FEATURE_DESCRIPTION "multimedia redirection, audio and video playback")
462 set(GSTREAMER_0_10_FEATURE_TYPE "OPTIONAL")
463 set(GSTREAMER_0_10_FEATURE_PURPOSE "multimedia")
464 set(GSTREAMER_0_10_FEATURE_DESCRIPTION "multimedia redirection, audio and video playback, gstreamer 0.10 version")
466 set(GSTREAMER_1_0_FEATURE_TYPE "RECOMMENDED")
467 set(GSTREAMER_1_0_FEATURE_PURPOSE "multimedia")
468 set(GSTREAMER_1_0_FEATURE_DESCRIPTION "multimedia redirection, audio and video playback")
470 set(IPP_FEATURE_TYPE "OPTIONAL")
471 set(IPP_FEATURE_PURPOSE "performance")
472 set(IPP_FEATURE_DESCRIPTION "Intel Integrated Performance Primitives library")
474 set(JPEG_FEATURE_TYPE "OPTIONAL")
475 set(JPEG_FEATURE_PURPOSE "codec")
476 set(JPEG_FEATURE_DESCRIPTION "use JPEG library")
478 set(OPENH264_FEATURE_TYPE "OPTIONAL")
479 set(OPENH264_FEATURE_PURPOSE "codec")
480 set(OPENH264_FEATURE_DESCRIPTION "use OpenH264 library")
482 set(GSM_FEATURE_TYPE "OPTIONAL")
483 set(GSM_FEATURE_PURPOSE "codec")
484 set(GSM_FEATURE_DESCRIPTION "GSM audio codec library")
487 set(X11_FEATURE_TYPE "DISABLED")
488 set(WAYLAND_FEATURE_TYPE "DISABLED")
489 set(ZLIB_FEATURE_TYPE "DISABLED")
490 set(DIRECTFB_FEATURE_TYPE "DISABLED")
491 set(ALSA_FEATURE_TYPE "DISABLED")
492 set(PULSE_FEATURE_TYPE "DISABLED")
493 set(CUPS_FEATURE_TYPE "DISABLED")
494 set(PCSC_FEATURE_TYPE "DISABLED")
495 set(FFMPEG_FEATURE_TYPE "DISABLED")
496 set(GSTREAMER_1_0_FEATURE_TYPE "DISABLED")
497 set(GSTREAMER_0_10_FEATURE_TYPE "OPTIONAL")
498 set(OPENSLES_FEATURE_TYPE "DISABLED")
502 set(DIRECTFB_FEATURE_TYPE "DISABLED")
503 set(FFMPEG_FEATURE_TYPE "OPTIONAL")
504 set(GSTREAMER_1_0_FEATURE_TYPE "OPTIONAL")
505 set(X11_FEATURE_TYPE "OPTIONAL")
506 set(WAYLAND_FEATURE_TYPE "DISABLED")
507 set(ALSA_FEATURE_TYPE "DISABLED")
509 set(X11_FEATURE_TYPE "DISABLED")
510 set(PULSE_FEATURE_TYPE "DISABLED")
511 set(CUPS_FEATURE_TYPE "DISABLED")
512 set(PCSC_FEATURE_TYPE "DISABLED")
513 set(GSTREAMER_1_0_FEATURE_TYPE "DISABLED")
514 set(GSTREAMER_0_10_FEATURE_TYPE "DISABLED")
516 set(OPENSLES_FEATURE_TYPE "DISABLED")
520 set(X11_FEATURE_TYPE "DISABLED")
521 set(WAYLAND_FEATURE_TYPE "DISABLED")
522 set(DIRECTFB_FEATURE_TYPE "DISABLED")
523 set(ALSA_FEATURE_TYPE "DISABLED")
524 set(PULSE_FEATURE_TYPE "DISABLED")
525 set(CUPS_FEATURE_TYPE "DISABLED")
526 set(PCSC_FEATURE_TYPE "DISABLED")
527 set(FFMPEG_FEATURE_TYPE "DISABLED")
528 set(GSTREAMER_1_0_FEATURE_TYPE "DISABLED")
529 set(GSTREAMER_0_10_FEATURE_TYPE "DISABLED")
530 set(OPENSLES_FEATURE_TYPE "REQUIRED")
534 find_feature(X11 ${X11_FEATURE_TYPE} ${X11_FEATURE_PURPOSE} ${X11_FEATURE_DESCRIPTION})
535 find_feature(Wayland ${WAYLAND_FEATURE_TYPE} ${WAYLAND_FEATURE_PURPOSE} ${WAYLAND_FEATURE_DESCRIPTION})
536 find_feature(DirectFB ${DIRECTFB_FEATURE_TYPE} ${DIRECTFB_FEATURE_PURPOSE} ${DIRECTFB_FEATURE_DESCRIPTION})
537 if (${WITH_DIRECTFB})
538 message(WARNING "DIRECTFB is orphaned and not maintained see docs/README.directfb for details")
541 find_feature(ZLIB ${ZLIB_FEATURE_TYPE} ${ZLIB_FEATURE_PURPOSE} ${ZLIB_FEATURE_DESCRIPTION})
542 find_feature(OpenSSL ${OPENSSL_FEATURE_TYPE} ${OPENSSL_FEATURE_PURPOSE} ${OPENSSL_FEATURE_DESCRIPTION})
543 find_feature(OpenSLES ${OPENSLES_FEATURE_TYPE} ${OPENSLES_FEATURE_PURPOSE} ${OPENSLES_FEATURE_DESCRIPTION})
545 find_feature(ALSA ${ALSA_FEATURE_TYPE} ${ALSA_FEATURE_PURPOSE} ${ALSA_FEATURE_DESCRIPTION})
546 find_feature(Pulse ${PULSE_FEATURE_TYPE} ${PULSE_FEATURE_PURPOSE} ${PULSE_FEATURE_DESCRIPTION})
548 find_feature(Cups ${CUPS_FEATURE_TYPE} ${CUPS_FEATURE_PURPOSE} ${CUPS_FEATURE_DESCRIPTION})
549 find_feature(PCSC ${PCSC_FEATURE_TYPE} ${PCSC_FEATURE_PURPOSE} ${PCSC_FEATURE_DESCRIPTION})
551 find_feature(FFmpeg ${FFMPEG_FEATURE_TYPE} ${FFMPEG_FEATURE_PURPOSE} ${FFMPEG_FEATURE_DESCRIPTION})
553 find_feature(GStreamer_0_10 ${GSTREAMER_0_10_FEATURE_TYPE} ${GSTREAMER_0_10_FEATURE_PURPOSE} ${GSTREAMER_0_10_FEATURE_DESCRIPTION})
554 find_feature(GStreamer_1_0 ${GSTREAMER_1_0_FEATURE_TYPE} ${GSTREAMER_1_0_FEATURE_PURPOSE} ${GSTREAMER_1_0_FEATURE_DESCRIPTION})
556 find_feature(JPEG ${JPEG_FEATURE_TYPE} ${JPEG_FEATURE_PURPOSE} ${JPEG_FEATURE_DESCRIPTION})
557 find_feature(OpenH264 ${OPENH264_FEATURE_TYPE} ${OPENH264_FEATURE_PURPOSE} ${OPENH264_FEATURE_DESCRIPTION})
558 find_feature(GSM ${GSM_FEATURE_TYPE} ${GSM_FEATURE_PURPOSE} ${GSM_FEATURE_DESCRIPTION})
560 if(TARGET_ARCH MATCHES "x86|x64")
562 # Intel Performance Primitives
563 find_feature(IPP ${IPP_FEATURE_TYPE} ${IPP_FEATURE_PURPOSE} ${IPP_FEATURE_DESCRIPTION})
567 # Path to put FreeRDP data
568 set(FREERDP_DATA_PATH "${CMAKE_INSTALL_PREFIX}/share/freerdp")
570 # Path to put plugins
572 set(FREERDP_LIBRARY_PATH "${CMAKE_INSTALL_LIBDIR}")
574 set(FREERDP_PLUGIN_PATH "${CMAKE_INSTALL_LIBDIR}/freerdp")
575 set(FREERDP_ADDIN_PATH "${FREERDP_PLUGIN_PATH}")
577 # Path to put extensions
578 set(FREERDP_EXTENSION_PATH "${CMAKE_INSTALL_FULL_LIBDIR}/freerdp/extensions")
580 # Include directories
581 include_directories(${CMAKE_CURRENT_BINARY_DIR})
582 include_directories(${CMAKE_CURRENT_BINARY_DIR}/include)
583 include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
586 add_definitions("-DHAVE_CONFIG_H")
587 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h)
589 # RPATH configuration
591 set(CMAKE_SKIP_RPATH FALSE)
592 set(CMAKE_SKIP_INSTALL_RPATH TRUE)
594 set(CMAKE_SKIP_BUILD_RPATH FALSE)
595 set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
596 set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
597 set(CMAKE_INSTALL_RPATH "\$ORIGIN/../${CMAKE_INSTALL_LIBDIR}:\$ORIGIN/..")
602 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pg")
603 set(PROFILER_LIBRARIES
604 "${FREERDP_EXTERNAL_PROFILER_PATH}/obj/local/${ANDROID_ABI}/libandroid-ndk-profiler.a")
605 include_directories("${FREERDP_EXTERNAL_PROFILER_PATH}")
614 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DFREERDP_TEST_EXPORTS")
619 set(TESTING_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}")
621 set(TESTING_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/Testing")
626 include_directories("${CMAKE_SOURCE_DIR}/winpr/include")
627 include_directories("${CMAKE_BINARY_DIR}/winpr/include")
629 add_subdirectory(winpr)
634 add_subdirectory(third-party)
635 if (NOT "${THIRD_PARTY_INCLUDES}" STREQUAL "")
636 include_directories(${THIRD_PARTY_INCLUDES})
640 add_subdirectory(include)
642 add_subdirectory(libfreerdp)
645 add_subdirectory(channels)
649 set(CMAKE_OSX_DEPLOYMENT_TARGET "")
650 if (IOS_PLATFORM MATCHES "SIMULATOR")
651 set(CMAKE_OSX_SYSROOT "iphonesimulator")
653 set(CMAKE_OSX_SYSROOT "iphoneos")
658 include_directories("${CMAKE_SOURCE_DIR}/rdtk/include")
659 include_directories("${CMAKE_BINARY_DIR}/rdtk/include")
661 add_subdirectory(rdtk)
664 add_subdirectory(client)
668 add_subdirectory(server)
673 if(${CMAKE_VERSION} VERSION_GREATER "2.8.10")
675 export(PACKAGE freerdp)
677 set(FREERDP_CMAKE_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/FreeRDP")
679 set(FREERDP_INCLUDE_DIR "include")
681 # keep for legacy builds
682 set(FREERDP_MONOLITHIC_BUILD OFF)
684 configure_package_config_file(FreeRDPConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/FreeRDPConfig.cmake
685 INSTALL_DESTINATION ${FREERDP_CMAKE_INSTALL_DIR}
686 PATH_VARS FREERDP_INCLUDE_DIR FREERDP_MONOLITHIC_BUILD)
688 write_basic_package_version_file(${CMAKE_CURRENT_BINARY_DIR}/FreeRDPConfigVersion.cmake
689 VERSION ${FREERDP_VERSION} COMPATIBILITY SameMajorVersion)
691 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/FreeRDPConfig.cmake ${CMAKE_CURRENT_BINARY_DIR}/FreeRDPConfigVersion.cmake
692 DESTINATION ${FREERDP_CMAKE_INSTALL_DIR})
694 install(EXPORT FreeRDPTargets DESTINATION ${FREERDP_CMAKE_INSTALL_DIR})
700 set(CMAKE_CPACK_INCLUDE_FILE "CMakeCPack.cmake")
702 if(NOT (VENDOR MATCHES "FreeRDP"))
703 if(DEFINED CLIENT_VENDOR_PATH)
704 if(EXISTS "${CMAKE_SOURCE_DIR}/${CLIENT_VENDOR_PATH}/CMakeCPack.cmake")
705 set(CMAKE_CPACK_INCLUDE_FILE "${CLIENT_VENDOR_PATH}/CMakeCPack.cmake")
710 #message("VENDOR: ${VENDOR} CLIENT_VENDOR_PATH: ${CLIENT_VENDOR_PATH} CMAKE_CPACK_INCLUDE_FILE: ${CMAKE_CPACK_INCLUDE_FILE}")
712 include(${CMAKE_CPACK_INCLUDE_FILE})
714 set(FREERDP_PC_LIBS "-lfreerdp -lfreerdp-client")
715 set(WINPR_PC_LIBS "-lwinpr")
717 set(FREERDP_PC_LIBS "${FREERDP_PC_LIBS} -lfreerdp-server")
720 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/freerdp.pc.in ${CMAKE_CURRENT_BINARY_DIR}/freerdp.pc @ONLY)
721 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/winpr.pc.in ${CMAKE_CURRENT_BINARY_DIR}/winpr.pc @ONLY)
722 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/freerdp.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
723 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/winpr.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)