2015-02-10 18:05:40 +01:00
|
|
|
include(CMakeDependentOption)
|
2012-08-12 18:05:25 -04:00
|
|
|
|
2014-09-08 16:24:43 -04:00
|
|
|
if((CMAKE_SYSTEM_PROCESSOR MATCHES "i386|i686|x86|AMD64") AND (CMAKE_SIZEOF_VOID_P EQUAL 4))
|
2012-10-12 17:55:12 -04:00
|
|
|
set(TARGET_ARCH "x86")
|
|
|
|
elseif((CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|AMD64") AND (CMAKE_SIZEOF_VOID_P EQUAL 8))
|
|
|
|
set(TARGET_ARCH "x64")
|
2013-03-11 22:05:49 +01:00
|
|
|
elseif((CMAKE_SYSTEM_PROCESSOR MATCHES "i386") AND (CMAKE_SIZEOF_VOID_P EQUAL 8) AND (APPLE))
|
|
|
|
# Mac is weird like that.
|
|
|
|
set(TARGET_ARCH "x64")
|
2015-02-03 13:14:40 -08:00
|
|
|
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^arm*")
|
2012-10-22 19:01:19 -04:00
|
|
|
set(TARGET_ARCH "ARM")
|
2015-02-05 08:46:56 -08:00
|
|
|
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "sparc")
|
|
|
|
set(TARGET_ARCH "sparc")
|
2012-10-12 17:55:12 -04:00
|
|
|
endif()
|
|
|
|
|
2012-03-22 13:33:01 +01:00
|
|
|
option(WITH_MANPAGES "Generate manpages." ON)
|
|
|
|
option(WITH_PROFILER "Compile profiler." OFF)
|
2013-09-18 13:12:52 +02:00
|
|
|
option(WITH_GPROF "Compile with GProf profiler." OFF)
|
2012-10-12 17:55:12 -04:00
|
|
|
|
|
|
|
if((TARGET_ARCH MATCHES "x86|x64") AND (NOT DEFINED WITH_SSE2))
|
|
|
|
option(WITH_SSE2 "Enable SSE2 optimization." ON)
|
|
|
|
else()
|
|
|
|
option(WITH_SSE2 "Enable SSE2 optimization." OFF)
|
|
|
|
endif()
|
|
|
|
|
2013-02-20 01:08:27 +01:00
|
|
|
if(TARGET_ARCH MATCHES "ARM")
|
|
|
|
if (NOT DEFINED WITH_NEON)
|
|
|
|
option(WITH_NEON "Enable NEON optimization." ON)
|
|
|
|
else()
|
|
|
|
option(WITH_NEON "Enable NEON optimization." OFF)
|
|
|
|
endif()
|
2013-02-28 11:13:43 +01:00
|
|
|
else()
|
|
|
|
if(NOT APPLE)
|
|
|
|
option(WITH_IPP "Use Intel Performance Primitives." OFF)
|
|
|
|
endif()
|
2012-10-22 19:01:19 -04:00
|
|
|
endif()
|
2013-05-31 13:51:50 -04:00
|
|
|
|
2012-07-24 18:26:24 -07:00
|
|
|
option(WITH_JPEG "Use JPEG decoding." OFF)
|
2012-03-22 13:33:01 +01:00
|
|
|
|
2013-05-31 13:51:50 -04:00
|
|
|
if(CMAKE_C_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
|
|
|
set(CMAKE_COMPILER_IS_CLANG 1)
|
2012-08-12 18:05:25 -04:00
|
|
|
endif()
|
|
|
|
|
2014-05-12 18:01:29 +02:00
|
|
|
if(NOT WIN32)
|
2016-10-10 19:17:21 +02:00
|
|
|
CMAKE_DEPENDENT_OPTION(WITH_VALGRIND_MEMCHECK "Compile with valgrind helpers." OFF
|
|
|
|
"NOT WITH_SANITIZE_ADDRESS; NOT WITH_SANITIZE_MEMORY; NOT WITH_SANITIZE_THREAD" OFF)
|
|
|
|
CMAKE_DEPENDENT_OPTION(WITH_SANITIZE_ADDRESS "Compile with gcc/clang address sanitizer." OFF
|
|
|
|
"NOT WITH_VALGRIND_MEMCHECK; NOT WITH_SANITIZE_MEMORY; NOT WITH_SANITIZE_THREAD" OFF)
|
|
|
|
CMAKE_DEPENDENT_OPTION(WITH_SANITIZE_MEMORY "Compile with gcc/clang memory sanitizer." OFF
|
|
|
|
"NOT WITH_VALGRIND_MEMCHECK; NOT WITH_SANITIZE_ADDRESS; NOT WITH_SANITIZE_THREAD" OFF)
|
|
|
|
CMAKE_DEPENDENT_OPTION(WITH_SANITIZE_THREAD "Compile with gcc/clang thread sanitizer." OFF
|
|
|
|
"NOT WITH_VALGRIND_MEMCHECK; NOT WITH_SANITIZE_ADDRESS; NOT WITH_SANITIZE_MEMORY" OFF)
|
2015-08-11 07:51:59 +02:00
|
|
|
else()
|
2016-03-29 16:03:15 -04:00
|
|
|
if(NOT UWP)
|
2017-07-17 10:56:45 +02:00
|
|
|
option(WITH_MEDIA_FOUNDATION "Enable H264 media foundation decoder." ON)
|
2017-07-17 09:32:34 +02:00
|
|
|
endif()
|
2014-05-12 18:01:29 +02:00
|
|
|
endif()
|
|
|
|
|
2016-03-29 16:03:15 -04:00
|
|
|
if(WIN32 AND NOT UWP)
|
2012-08-12 20:43:24 -04:00
|
|
|
option(WITH_NATIVE_SSPI "Use native SSPI modules" ON)
|
2012-12-27 19:19:52 +08:00
|
|
|
option(WITH_WINMM "Use Windows Multimedia" ON)
|
2012-09-19 17:51:06 -04:00
|
|
|
option(WITH_WIN8 "Use Windows 8 libraries" OFF)
|
2012-08-12 20:43:24 -04:00
|
|
|
endif()
|
|
|
|
|
2014-05-26 15:57:37 -04:00
|
|
|
option(WITH_SMARTCARD_INSPECT "Enable SmartCard API Inspector" OFF)
|
|
|
|
|
2012-10-13 09:50:02 -04:00
|
|
|
option(BUILD_TESTING "Build unit tests" OFF)
|
2016-04-19 12:46:54 +02:00
|
|
|
CMAKE_DEPENDENT_OPTION(TESTS_WTSAPI_EXTRA "Build extra WTSAPI tests (interactive)" OFF "BUILD_TESTING" OFF)
|
2016-05-02 16:59:25 +02:00
|
|
|
CMAKE_DEPENDENT_OPTION(BUILD_COMM_TESTS "Build comm related tests (require comm port)" OFF "BUILD_TESTING" OFF)
|
2015-02-10 18:05:40 +01:00
|
|
|
|
2012-10-13 20:55:28 -04:00
|
|
|
option(WITH_SAMPLE "Build sample code" OFF)
|
2012-10-02 11:56:10 -04:00
|
|
|
|
2015-11-04 09:53:13 +01:00
|
|
|
option(WITH_CLIENT_COMMON "Build client common library" ON)
|
2020-02-25 16:17:47 +01:00
|
|
|
CMAKE_DEPENDENT_OPTION(WITH_CLIENT "Build client binaries" ON "WITH_CLIENT_COMMON" OFF)
|
2015-11-04 13:15:37 +01:00
|
|
|
|
2012-08-12 18:05:25 -04:00
|
|
|
option(WITH_SERVER "Build server binaries" OFF)
|
2012-10-04 23:19:05 -04:00
|
|
|
|
2016-06-15 13:36:27 +02:00
|
|
|
option(BUILTIN_CHANNELS "Combine all channels into their respective base library" ON)
|
2012-10-22 19:01:19 -04:00
|
|
|
|
2012-08-12 18:05:25 -04:00
|
|
|
option(WITH_CHANNELS "Build virtual channel plugins" ON)
|
2012-09-22 20:16:38 -04:00
|
|
|
|
2021-06-10 09:54:35 +02:00
|
|
|
option(FREERDP_UNIFIED_BUILD "Build WinPR, uwac, RdTk and FreeRDP in one go" ON)
|
2019-08-14 15:10:00 +02:00
|
|
|
|
2020-02-25 16:17:47 +01:00
|
|
|
CMAKE_DEPENDENT_OPTION(WITH_CLIENT_CHANNELS "Build virtual channel plugins" ON
|
2015-11-10 14:18:51 +01:00
|
|
|
"WITH_CLIENT_COMMON;WITH_CHANNELS" OFF)
|
2012-09-22 20:16:38 -04:00
|
|
|
|
2020-02-25 16:17:47 +01:00
|
|
|
CMAKE_DEPENDENT_OPTION(WITH_MACAUDIO "Enable OSX sound backend" ON "APPLE;NOT IOS" OFF)
|
2016-02-02 11:58:05 -08:00
|
|
|
|
2012-09-22 20:16:38 -04:00
|
|
|
if(WITH_SERVER AND WITH_CHANNELS)
|
|
|
|
option(WITH_SERVER_CHANNELS "Build virtual channel plugins" ON)
|
|
|
|
endif()
|
|
|
|
|
2012-08-12 18:05:25 -04:00
|
|
|
option(WITH_THIRD_PARTY "Build third-party components" OFF)
|
|
|
|
|
2016-05-09 10:25:31 +02:00
|
|
|
option(WITH_CLIENT_INTERFACE "Build clients as a library with an interface" OFF)
|
2013-04-29 19:53:56 -04:00
|
|
|
option(WITH_SERVER_INTERFACE "Build servers as a library with an interface" ON)
|
2012-09-15 22:19:26 -04:00
|
|
|
|
2012-09-08 15:27:00 -04:00
|
|
|
option(WITH_DEBUG_ALL "Print all debug messages." OFF)
|
|
|
|
|
|
|
|
if(WITH_DEBUG_ALL)
|
2020-11-26 14:41:59 +01:00
|
|
|
message(WARNING "WITH_DEBUG_ALL=ON, the build will be slow and might leak sensitive information, do not use with release builds!")
|
2012-09-08 15:27:00 -04:00
|
|
|
set(DEFAULT_DEBUG_OPTION "ON")
|
|
|
|
else()
|
|
|
|
set(DEFAULT_DEBUG_OPTION "OFF")
|
|
|
|
endif()
|
|
|
|
|
|
|
|
option(WITH_DEBUG_CERTIFICATE "Print certificate related debug messages." ${DEFAULT_DEBUG_OPTION})
|
2020-11-26 14:41:59 +01:00
|
|
|
if(WITH_DEBUG_CERTIFICATE)
|
|
|
|
message(WARNING "WITH_DEBUG_CERTIFICATE=ON, the build might leak sensitive information, do not use with release builds!")
|
|
|
|
endif()
|
2013-02-12 16:25:16 -05:00
|
|
|
option(WITH_DEBUG_CAPABILITIES "Print capability negotiation debug messages." ${DEFAULT_DEBUG_OPTION})
|
2012-09-08 15:27:00 -04:00
|
|
|
option(WITH_DEBUG_CHANNELS "Print channel manager debug messages." ${DEFAULT_DEBUG_OPTION})
|
|
|
|
option(WITH_DEBUG_CLIPRDR "Print clipboard redirection debug messages" ${DEFAULT_DEBUG_OPTION})
|
2019-06-04 10:28:03 +03:00
|
|
|
option(WITH_DEBUG_RDPGFX "Print RDPGFX debug messages" ${DEFAULT_DEBUG_OPTION})
|
2012-09-08 15:27:00 -04:00
|
|
|
option(WITH_DEBUG_DVC "Print dynamic virtual channel debug messages." ${DEFAULT_DEBUG_OPTION})
|
2020-02-25 15:21:16 +01:00
|
|
|
CMAKE_DEPENDENT_OPTION(WITH_DEBUG_TSMF "Print TSMF virtual channel debug messages." ${DEFAULT_DEBUG_OPTION} "CHANNEL_TSMF" OFF)
|
2012-09-08 15:27:00 -04:00
|
|
|
option(WITH_DEBUG_KBD "Print keyboard related debug messages." ${DEFAULT_DEBUG_OPTION})
|
2020-11-26 14:41:59 +01:00
|
|
|
if(WITH_DEBUG_KBD)
|
|
|
|
message(WARNING "WITH_DEBUG_KBD=ON, the build might leak sensitive information, do not use with release builds!")
|
|
|
|
endif()
|
2012-09-08 15:27:00 -04:00
|
|
|
option(WITH_DEBUG_LICENSE "Print license debug messages." ${DEFAULT_DEBUG_OPTION})
|
2020-11-26 14:41:59 +01:00
|
|
|
if(WITH_DEBUG_LICENSE)
|
|
|
|
message(WARNING "WITH_DEBUG_LICENSE=ON, the build might leak sensitive information, do not use with release builds!")
|
|
|
|
endif()
|
2012-09-08 15:27:00 -04:00
|
|
|
option(WITH_DEBUG_NEGO "Print negotiation related debug messages." ${DEFAULT_DEBUG_OPTION})
|
2020-11-26 14:41:59 +01:00
|
|
|
if(WITH_DEBUG_NEGO)
|
|
|
|
message(WARNING "WITH_DEBUG_NEGO=ON, the build might leak sensitive information, do not use with release builds!")
|
|
|
|
endif()
|
2012-09-08 15:27:00 -04:00
|
|
|
option(WITH_DEBUG_NLA "Print authentication related debug messages." ${DEFAULT_DEBUG_OPTION})
|
2020-11-26 14:41:59 +01:00
|
|
|
if(WITH_DEBUG_NLA)
|
|
|
|
message(WARNING "WITH_DEBUG_NLA=ON, the build might leak sensitive information, do not use with release builds!")
|
|
|
|
endif()
|
2012-09-08 15:27:00 -04:00
|
|
|
option(WITH_DEBUG_NTLM "Print NTLM debug messages" ${DEFAULT_DEBUG_OPTION})
|
2020-11-26 14:41:59 +01:00
|
|
|
if(WITH_DEBUG_NTLM)
|
|
|
|
message(WARNING "WITH_DEBUG_NTLM=ON, the build might leak sensitive information, do not use with release builds!")
|
|
|
|
endif()
|
2012-09-08 15:27:00 -04:00
|
|
|
option(WITH_DEBUG_TSG "Print Terminal Server Gateway debug messages" ${DEFAULT_DEBUG_OPTION})
|
|
|
|
option(WITH_DEBUG_RAIL "Print RemoteApp debug messages" ${DEFAULT_DEBUG_OPTION})
|
|
|
|
option(WITH_DEBUG_RDP "Print RDP debug messages" ${DEFAULT_DEBUG_OPTION})
|
2016-12-13 22:47:08 +01:00
|
|
|
option(WITH_DEBUG_RDPEI "Print input virtual channel debug messages" ${DEFAULT_DEBUG_OPTION})
|
2012-09-08 15:27:00 -04:00
|
|
|
option(WITH_DEBUG_REDIR "Redirection debug messages" ${DEFAULT_DEBUG_OPTION})
|
2016-11-30 13:48:33 -08:00
|
|
|
option(WITH_DEBUG_RDPDR "Rdpdr debug messages" ${DEFAULT_DEBUG_OPTION})
|
2012-09-08 15:27:00 -04:00
|
|
|
option(WITH_DEBUG_RFX "Print RemoteFX debug messages." ${DEFAULT_DEBUG_OPTION})
|
|
|
|
option(WITH_DEBUG_SCARD "Print smartcard debug messages" ${DEFAULT_DEBUG_OPTION})
|
2013-09-23 12:38:44 +02:00
|
|
|
option(WITH_DEBUG_SND "Print rdpsnd debug messages" ${DEFAULT_DEBUG_OPTION})
|
2012-09-08 15:27:00 -04:00
|
|
|
option(WITH_DEBUG_SVC "Print static virtual channel debug messages." ${DEFAULT_DEBUG_OPTION})
|
|
|
|
option(WITH_DEBUG_TRANSPORT "Print transport debug messages." ${DEFAULT_DEBUG_OPTION})
|
2014-07-14 19:36:31 +02:00
|
|
|
option(WITH_DEBUG_THREADS "Print thread debug messages, enables handle dump" ${DEFAULT_DEBUG_OPTION})
|
2015-04-28 08:55:26 +02:00
|
|
|
option(WITH_DEBUG_MUTEX "Print mutex debug messages" ${DEFAULT_DEBUG_OPTION})
|
2012-09-08 15:27:00 -04:00
|
|
|
option(WITH_DEBUG_TIMEZONE "Print timezone debug messages." ${DEFAULT_DEBUG_OPTION})
|
|
|
|
option(WITH_DEBUG_WND "Print window order debug messages" ${DEFAULT_DEBUG_OPTION})
|
|
|
|
option(WITH_DEBUG_X11_CLIPRDR "Print X11 clipboard redirection debug messages" ${DEFAULT_DEBUG_OPTION})
|
|
|
|
option(WITH_DEBUG_X11_LOCAL_MOVESIZE "Print X11 Client local movesize debug messages" ${DEFAULT_DEBUG_OPTION})
|
|
|
|
option(WITH_DEBUG_X11 "Print X11 Client debug messages" ${DEFAULT_DEBUG_OPTION})
|
|
|
|
option(WITH_DEBUG_XV "Print XVideo debug messages" ${DEFAULT_DEBUG_OPTION})
|
2015-02-03 15:28:05 +01:00
|
|
|
option(WITH_DEBUG_RINGBUFFER "Enable Ringbuffer debug messages" ${DEFAULT_DEBUG_OPTION})
|
2015-12-15 17:19:58 +01:00
|
|
|
|
|
|
|
option(WITH_DEBUG_SYMBOLS "Pack debug symbols to installer" OFF)
|
2017-01-25 09:05:27 +01:00
|
|
|
option(WITH_CCACHE "Use ccache support if available" ON)
|
2019-05-23 14:14:31 +02:00
|
|
|
option(WITH_CLANG_FORMAT "Detect clang-format. run 'cmake --build . --target clangformat' to format." ON)
|
2017-07-26 12:58:34 +02:00
|
|
|
option(WITH_ICU "Use ICU for unicode conversion" OFF)
|
2018-11-29 13:00:22 +01:00
|
|
|
option(WITH_GSSAPI "Compile support for kerberos authentication. (EXPERIMENTAL)" OFF)
|
2012-08-12 18:05:25 -04:00
|
|
|
|
2018-03-14 16:10:12 +01:00
|
|
|
option(WITH_DSP_EXPERIMENTAL "Enable experimental sound encoder/decoder formats" OFF)
|
2018-02-20 12:15:30 +01:00
|
|
|
if (WITH_FFMPEG)
|
|
|
|
option(WITH_DSP_FFMPEG "Use FFMPEG for audio encoding/decoding" OFF)
|
2020-01-16 09:53:39 +01:00
|
|
|
option(WITH_VAAPI "Use FFMPEG VAAPI" OFF)
|
2018-02-20 12:15:30 +01:00
|
|
|
endif(WITH_FFMPEG)
|
|
|
|
|
2017-11-08 14:22:38 +01:00
|
|
|
option(USE_VERSION_FROM_GIT_TAG "Extract FreeRDP version from git tag." OFF)
|
|
|
|
|
2019-05-06 13:18:31 +02:00
|
|
|
option(WITH_CAIRO "Use CAIRO image library for screen resizing" OFF)
|
|
|
|
option(WITH_SWSCALE "Use SWScale image library for screen resizing" OFF)
|
|
|
|
|
|
|
|
if (ANDROID)
|
|
|
|
include(ConfigOptionsAndroid)
|
2013-01-29 12:59:58 +01:00
|
|
|
endif(ANDROID)
|
2013-02-14 14:59:12 +01:00
|
|
|
|
2019-05-06 13:18:31 +02:00
|
|
|
if (IOS)
|
|
|
|
include(ConfigOptionsiOS)
|
2013-02-14 14:59:12 +01:00
|
|
|
endif(IOS)
|
2020-12-22 15:45:40 +03:00
|
|
|
|
|
|
|
option(BUILD_FUZZERS "Use BUILD_FUZZERS to build fuzzing tests" OFF)
|
|
|
|
|
|
|
|
if (BUILD_FUZZERS)
|
|
|
|
if (NOT OSS_FUZZ)
|
|
|
|
add_compile_flags("C;CXX" -fsanitize=fuzzer-no-link)
|
|
|
|
endif ()
|
|
|
|
|
|
|
|
if (OSS_FUZZ AND NOT DEFINED ENV{LIB_FUZZING_ENGINE})
|
|
|
|
message(SEND_ERROR
|
|
|
|
"OSS-Fuzz builds require the environment variable "
|
|
|
|
"LIB_FUZZING_ENGINE to be set. If you are seeing this "
|
|
|
|
"warning, it points to a deeper problem in the ossfuzz "
|
|
|
|
"build setup.")
|
|
|
|
endif ()
|
|
|
|
|
|
|
|
if (CMAKE_COMPILER_IS_GNUCC)
|
|
|
|
message(FATAL_ERROR
|
|
|
|
"\n"
|
|
|
|
"Fuzzing is unsupported with GCC compiler. Use Clang:\n"
|
|
|
|
" $ CC=clang CXX=clang++ cmake . <...> -DBUILD_FUZZERS=ON && make -j\n"
|
|
|
|
"\n")
|
|
|
|
endif ()
|
|
|
|
|
|
|
|
set(BUILD_TESTING ON)
|
|
|
|
|
|
|
|
# A special target with fuzzer and sanitizer flags.
|
|
|
|
add_library(fuzzer_config INTERFACE)
|
|
|
|
|
|
|
|
target_compile_options(
|
|
|
|
fuzzer_config
|
|
|
|
INTERFACE
|
|
|
|
$<$<NOT:$<BOOL:${OSS_FUZZ}>>:
|
|
|
|
-fsanitize=fuzzer
|
|
|
|
>
|
|
|
|
$<$<BOOL:${OSS_FUZZ}>:
|
|
|
|
${CXX}
|
|
|
|
${CXXFLAGS}
|
|
|
|
>
|
|
|
|
)
|
|
|
|
target_link_libraries(
|
|
|
|
fuzzer_config
|
|
|
|
INTERFACE
|
|
|
|
$<$<NOT:$<BOOL:${OSS_FUZZ}>>:
|
|
|
|
-fsanitize=fuzzer
|
|
|
|
>
|
|
|
|
$<$<BOOL:${OSS_FUZZ}>:
|
|
|
|
$ENV{LIB_FUZZING_ENGINE}
|
|
|
|
>
|
|
|
|
)
|
|
|
|
endif()
|