diff --git a/CMakeLists.txt b/CMakeLists.txt index f86f938bf..af4b3cef3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -199,48 +199,9 @@ if(BUILD_TESTING_INTERNAL) add_compile_definitions(BUILD_TESTING_INTERNAL) elseif(BUILD_TESTING) set(EXPORT_ALL_SYMBOLS OFF CACHE BOOL "testing default" FORCE) -else() - option(EXPORT_ALL_SYMBOLS "Export all symbols form library" OFF) endif() -if(EXPORT_ALL_SYMBOLS) - # set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) - add_compile_definitions(EXPORT_ALL_SYMBOLS) -endif(EXPORT_ALL_SYMBOLS) - -# Compiler-specific flags -if(CMAKE_COMPILER_IS_GNUCC) - if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64" OR CMAKE_SYSTEM_PROCESSOR MATCHES "i686") - check_symbol_exists(__x86_64__ "" IS_X86_64) - if(IS_X86_64) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC") - else() - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=i686") - endif() - endif() - - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall") - - if(NOT EXPORT_ALL_SYMBOLS) - message(STATUS "GCC default symbol visibility: hidden") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden") - endif() - check_c_compiler_flag(-Wimplicit-function-declaration Wimplicit-function-declaration) - if(Wimplicit-function-declaration) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wimplicit-function-declaration") - endif() - - if(NOT OPENBSD) - check_c_compiler_flag(-Wredundant-decls Wredundant-decls) - if(Wredundant-decls) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wredundant-decls") - endif() - endif() - add_compile_definitions("$<$:NDEBUG>") - add_compile_definitions("$<$:NDEBUG>") - add_compile_options("$<$:-g>") - add_compile_options("$<$:-g>") -endif() +include(ExportAllSymbols) set(THREAD_PREFER_PTHREAD_FLAG TRUE) @@ -248,99 +209,6 @@ if(NOT IOS) find_package(Threads REQUIRED) endif() -# Enable address sanitizer, where supported and when required -if(CMAKE_COMPILER_IS_CLANG OR CMAKE_COMPILER_IS_GNUCC) - set(CMAKE_REQUIRED_LINK_OPTIONS_SAVED ${CMAKE_REQUIRED_LINK_OPTIONS}) - file(WRITE ${PROJECT_BINARY_DIR}/foo.txt "") - if(WITH_SANITIZE_ADDRESS) - list(APPEND CMAKE_REQUIRED_LINK_OPTIONS "-fsanitize=address") - check_c_compiler_flag("-fsanitize=address" fsanitize-address) - check_c_compiler_flag("-fsanitize-blacklist=${PROJECT_BINARY_DIR}/foo.txt" fsanitize-blacklist) - check_c_compiler_flag("-fsanitize-address-use-after-scope" fsanitize-address-use-after-scope) - - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address") - set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fsanitize=address") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address") - - if(fsanitize-blacklist) - set(CMAKE_C_FLAGS - "${CMAKE_C_FLAGS} -fsanitize-blacklist=${PROJECT_SOURCE_DIR}/scripts/blacklist-address-sanitizer.txt" - ) - endif(fsanitize-blacklist) - - if(fsanitize-address-use-after-scope) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize-address-use-after-scope") - endif(fsanitize-address-use-after-scope) - elseif(WITH_SANITIZE_MEMORY) - list(APPEND CMAKE_REQUIRED_LINK_OPTIONS "-fsanitize=memory") - check_c_compiler_flag("-fsanitize=memory" fsanitize-memory) - check_c_compiler_flag("-fsanitize-blacklist=${PROJECT_BINARY_DIR}/foo.txt" fsanitize-blacklist) - check_c_compiler_flag("-fsanitize-memory-use-after-dtor" fsanitize-memory-use-after-dtor) - check_c_compiler_flag("-fsanitize-memory-track-origins" fsanitize-memory-track-origins) - - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=memory") - set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fsanitize=memory") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=memory") - - if(fsanitize-blacklist) - set(CMAKE_C_FLAGS - "${CMAKE_C_FLAGS} -fsanitize-blacklist=${PROJECT_SOURCE_DIR}/scripts/blacklist-memory-sanitizer.txt" - ) - endif(fsanitize-blacklist) - - if(fsanitize-memory-use-after-dtor) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize-memory-use-after-dtor") - endif(fsanitize-memory-use-after-dtor) - - if(fsanitize-memory-track-origins) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize-memory-track-origins") - endif(fsanitize-memory-track-origins) - elseif(WITH_SANITIZE_THREAD) - list(APPEND CMAKE_REQUIRED_LINK_OPTIONS "-fsanitize=thread") - check_c_compiler_flag("-fsanitize=thread" fsanitize-thread) - check_c_compiler_flag("-fsanitize-blacklist=${PROJECT_BINARY_DIR}/foo.txt" fsanitize-blacklist) - - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=thread") - if(fsanitize-blacklist) - set(CMAKE_C_FLAGS - "${CMAKE_C_FLAGS} -fsanitize-blacklist=${PROJECT_SOURCE_DIR}/scripts/blacklist-thread-sanitizer.txt" - ) - endif(fsanitize-blacklist) - set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fsanitize=thread") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=thread") - endif() - - file(REMOVE ${PROJECT_BINARY_DIR}/foo.txt) - set(CMAKE_REQUIRED_LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS_SAVED}) - - option(WITH_NO_UNDEFINED "compile with -Wl,--no-undefined" OFF) - if(WITH_NO_UNDEFINED) - check_c_compiler_flag(-Wl,--no-undefined no-undefined) - - if(no-undefined) - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--no-undefined") - set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--no-undefined") - endif() - endif() -endif() - -if(MSVC) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /Gd") - - set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}) - set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}) - - add_compile_options("$<$:/Zi>") - - add_compile_definitions(_CRT_NONSTDC_NO_DEPRECATE) -endif() - -if(ANDROID) - # workaround for https://github.com/android-ndk/ndk/issues/243 - string(REPLACE "-g " "" CMAKE_C_FLAGS ${CMAKE_C_FLAGS}) - set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -g") -endif() - if(WIN32) add_compile_definitions(UNICODE _UNICODE) add_compile_definitions(_CRT_SECURE_NO_WARNINGS) @@ -451,12 +319,6 @@ if(ANDROID) endif(WITH_GPROF) endif() -if(WITH_VALGRIND_MEMCHECK) - check_include_files(valgrind/memcheck.h FREERDP_HAVE_VALGRIND_MEMCHECK_H) -else() - unset(FREERDP_HAVE_VALGRIND_MEMCHECK_H CACHE) -endif() - if(UNIX OR CYGWIN) set(WAYLAND_FEATURE_TYPE "RECOMMENDED") else() @@ -639,15 +501,6 @@ else() set(FREERDP_PROXY_PLUGINDIR "${PROXY_PLUGINDIR}") endif() -# Android profiling -if(ANDROID) - if(WITH_GPROF) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pg") - set(PROFILER_LIBRARIES "${FREERDP_EXTERNAL_PROFILER_PATH}/obj/local/${ANDROID_ABI}/libandroid-ndk-profiler.a") - include_directories(SYSTEM "${FREERDP_EXTERNAL_PROFILER_PATH}") - endif() -endif() - # Unit Tests include(CTest) diff --git a/client/SDL/SDL2/dialogs/res/CMakeLists.txt b/client/SDL/SDL2/dialogs/res/CMakeLists.txt index 3edf40889..54bed3e83 100644 --- a/client/SDL/SDL2/dialogs/res/CMakeLists.txt +++ b/client/SDL/SDL2/dialogs/res/CMakeLists.txt @@ -26,5 +26,5 @@ else() target_link_libraries(sdl2_client_res ${SDL2_LIBRARIES}) endif() -set_property(TARGET sdl2_client_res PROPERTY POSITION_INDEPENDENT_CODE ON) +set_target_properties(sdl2_client_res PROPERTIES POSITION_INDEPENDENT_CODE ON INTERPROCEDURAL_OPTIMIZATION OFF) target_link_libraries(sdl2_client_res sdl-common-client-res) diff --git a/client/SDL/SDL3/dialogs/res/CMakeLists.txt b/client/SDL/SDL3/dialogs/res/CMakeLists.txt index 7d542dd59..37dc3668c 100644 --- a/client/SDL/SDL3/dialogs/res/CMakeLists.txt +++ b/client/SDL/SDL3/dialogs/res/CMakeLists.txt @@ -26,4 +26,4 @@ endif() target_link_libraries(sdl3_client_res sdl-common-client-res) -set_property(TARGET sdl3_client_res PROPERTY POSITION_INDEPENDENT_CODE ON) +set_target_properties(sdl3_client_res PROPERTIES POSITION_INDEPENDENT_CODE ON INTERPROCEDURAL_OPTIMIZATION OFF) diff --git a/cmake/CXXCompilerFlags.cmake b/cmake/CXXCompilerFlags.cmake index f62d16c8d..cc71f1861 100644 --- a/cmake/CXXCompilerFlags.cmake +++ b/cmake/CXXCompilerFlags.cmake @@ -1,4 +1,5 @@ include(CheckCXXCompilerFlag) +include(CommonCompilerFlags) macro(checkCXXFlag FLAG) check_cxx_compiler_flag("${FLAG}" CXXFLAG${FLAG}) @@ -9,9 +10,6 @@ macro(checkCXXFlag FLAG) endif() endmacro() -option(ENABLE_WARNING_VERBOSE "enable -Weveryting (and some exceptions) for compile" OFF) -option(ENABLE_WARNING_ERROR "enable -Werror for compile" OFF) - if(ENABLE_WARNING_VERBOSE) if(MSVC) # Remove previous warning definitions, @@ -21,57 +19,37 @@ if(ENABLE_WARNING_VERBOSE) ) string(REGEX REPLACE "(^| )[/-]W[ ]*[1-9]" " " "${flags_var_to_scrub}" "${${flags_var_to_scrub}}") endforeach() - - set(C_WARNING_FLAGS /W4 /wo4324) else() - set(C_WARNING_FLAGS - -Weverything - -Wall - -Wpedantic - -Wno-padded - -Wno-switch-enum - -Wno-cast-align - -Wno-declaration-after-statement - -Wno-unsafe-buffer-usage - -Wno-reserved-identifier - -Wno-covered-switch-default - -Wno-disabled-macro-expansion - -Wno-ctad-maybe-unsupported - -Wno-c++98-compat - -Wno-c++98-compat-pedantic - -Wno-pre-c++17-compat - -Wno-exit-time-destructors - -Wno-gnu-zero-variadic-macro-arguments + list( + APPEND + COMMON_COMPILER_FLAGS + -Wno-declaration-after-statement + -Wno-ctad-maybe-unsupported + -Wno-c++98-compat + -Wno-c++98-compat-pedantic + -Wno-pre-c++17-compat + -Wno-exit-time-destructors + -Wno-gnu-zero-variadic-macro-arguments ) endif() - - foreach(FLAG ${C_WARNING_FLAGS}) - checkcxxflag(${FLAG}) - endforeach() endif() -if(ENABLE_WARNING_ERROR) - checkcxxflag(-Werror) -endif() - -checkcxxflag(-fno-omit-frame-pointer) - -if(CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID MATCHES "GNU") - if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 10) - add_compile_options($<$>:-fdebug-prefix-map=${CMAKE_SOURCE_DIR}=.>) - add_compile_options($<$>:-fmacro-prefix-map=${CMAKE_SOURCE_DIR}=.>) - add_compile_options($<$>:-ffile-prefix-map=${CMAKE_SOURCE_DIR}=.>) - add_compile_options($<$>:-fdebug-prefix-map=${CMAKE_BINARY_DIR}=./build>) - add_compile_options($<$>:-fmacro-prefix-map=${CMAKE_BINARY_DIR}=./build>) - add_compile_options($<$>:-ffile-prefix-map=${CMAKE_BINARY_DIR}=./build>) - endif() -endif() +foreach(FLAG ${COMMON_COMPILER_FLAGS}) + checkcxxflag(${FLAG}) +endforeach() # https://stackoverflow.com/questions/4913922/possible-problems-with-nominmax-on-visual-c if(WIN32) add_compile_definitions($<$:NOMINMAX>) endif() +if(MSVC) + add_compile_options(/Gd) + + add_compile_options("$<$:/Zi>") + add_compile_definitions(_CRT_NONSTDC_NO_DEPRECATE) +endif() + set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} CACHE STRING "default CXXFLAGS") message("Using CXXFLAGS ${CMAKE_CXX_FLAGS}") message("Using CXXFLAGS_RELEASE ${CMAKE_CXX_FLAGS_RELEASE}") diff --git a/cmake/CheckAndSetFlag.cmake b/cmake/CheckAndSetFlag.cmake new file mode 100644 index 000000000..5cf000a02 --- /dev/null +++ b/cmake/CheckAndSetFlag.cmake @@ -0,0 +1,28 @@ +include(CheckCCompilerFlag) +include(CheckCXXCompilerFlag) + +macro(CheckAndSetFlag FLAG) + if(FLAG) + get_property(languages GLOBAL PROPERTY ENABLED_LANGUAGES) + + unset(C_FLAG) + unset(CXX_FLAG) + if("C" IN_LIST languages) + check_c_compiler_flag("${FLAG}" C_FLAG) + if(C_FLAG) + string(APPEND CMAKE_C_FLAGS " ${FLAG}") + endif() + endif() + + if("CXX" IN_LIST languages) + check_cxx_compiler_flag("${FLAG}" CXX_FLAG) + if(CXX_FLAG) + string(APPEND CMAKE_CXX_FLAGS " ${FLAG}") + endif() + endif() + + if(NOT C_FLAG AND NOT CXX_FLAG) + message(WARNING "compiler does not support ${FLAG}") + endif() + endif() +endmacro() diff --git a/cmake/CleaningConfigureFile.cmake b/cmake/CleaningConfigureFile.cmake index 535a87ecf..cf168c3d2 100644 --- a/cmake/CleaningConfigureFile.cmake +++ b/cmake/CleaningConfigureFile.cmake @@ -60,6 +60,7 @@ function(cleaning_configure_file RSRC RDST) # Create a target to recreate the configuration file if something changes. string(SHA256 DST_HASH "${DST}") + string(SUBSTRING "${DST_HASH}" 0 8 DST_HASH) if(NOT TARGET ct-${DST_HASH}) add_custom_target( ct-${DST_HASH} COMMAND ${CMAKE_COMMAND} "-E" "make_directory" "${DST_DIR}" diff --git a/cmake/CommonCompilerFlags.cmake b/cmake/CommonCompilerFlags.cmake new file mode 100644 index 000000000..d755cf37b --- /dev/null +++ b/cmake/CommonCompilerFlags.cmake @@ -0,0 +1,46 @@ +include(CheckAndSetFlag) + +option(ENABLE_WARNING_VERBOSE "enable -Weveryting (and some exceptions) for compile" OFF) +option(ENABLE_WARNING_ERROR "enable -Werror for compile" OFF) + +set(COMMON_COMPILER_FLAGS "") +if(ENABLE_WARNING_VERBOSE) + if(MSVC) + list(APPEND COMMON_COMPILER_FLAGS /W4 /wo4324) + else() + list( + APPEND + COMMON_COMPILER_FLAGS + -Weverything + -Wall + -Wpedantic + -Wno-padded + -Wno-switch-enum + -Wno-cast-align + -Wno-unsafe-buffer-usage + -Wno-reserved-identifier + -Wno-covered-switch-default + -Wno-disabled-macro-expansion + ) + endif() +endif() + +if(ENABLE_WARNING_ERROR) + list(APPEND COMMON_COMPILER_FLAGS -Werror) +endif() + +list(APPEND COMMON_COMPILER_FLAGS -fno-omit-frame-pointer -Wredundant-decls) + +include(ExportAllSymbols) +include(CompilerSanitizerOptions) + +if(CMAKE_C_COMPILER_ID MATCHES ".*Clang.*" OR (CMAKE_C_COMPILER_ID MATCHES "GNU" AND CMAKE_C_COMPILER_VERSION + VERSION_GREATER_EQUAL 10) +) + add_compile_options($<$>:-fdebug-prefix-map=${CMAKE_SOURCE_DIR}=.>) + add_compile_options($<$>:-fmacro-prefix-map=${CMAKE_SOURCE_DIR}=.>) + add_compile_options($<$>:-ffile-prefix-map=${CMAKE_SOURCE_DIR}=.>) + add_compile_options($<$>:-fdebug-prefix-map=${CMAKE_BINARY_DIR}=./build>) + add_compile_options($<$>:-fmacro-prefix-map=${CMAKE_BINARY_DIR}=./build>) + add_compile_options($<$>:-ffile-prefix-map=${CMAKE_BINARY_DIR}=./build>) +endif() diff --git a/cmake/CompilerFlags.cmake b/cmake/CompilerFlags.cmake index 0f2002ef5..af814c2fd 100644 --- a/cmake/CompilerFlags.cmake +++ b/cmake/CompilerFlags.cmake @@ -1,4 +1,5 @@ include(CheckCCompilerFlag) +include(CommonCompilerFlags) macro(checkCFlag FLAG) check_c_compiler_flag("${FLAG}" CFLAG${FLAG}) @@ -9,9 +10,6 @@ macro(checkCFlag FLAG) endif() endmacro() -option(ENABLE_WARNING_VERBOSE "enable -Weveryting (and some exceptions) for compile" OFF) -option(ENABLE_WARNING_ERROR "enable -Werror for compile" OFF) - if(ENABLE_WARNING_VERBOSE) if(MSVC) # Remove previous warning definitions, @@ -21,45 +19,25 @@ if(ENABLE_WARNING_VERBOSE) ) string(REGEX REPLACE "(^| )[/-]W[ ]*[1-9]" " " "${flags_var_to_scrub}" "${${flags_var_to_scrub}}") endforeach() - - set(C_WARNING_FLAGS /W4 /wo4324) else() - set(C_WARNING_FLAGS - -Weverything - -Wall - -Wpedantic - -Wno-padded - -Wno-switch-enum - -Wno-cast-align - -Wno-declaration-after-statement - -Wno-unsafe-buffer-usage - -Wno-reserved-identifier - -Wno-covered-switch-default - -Wno-disabled-macro-expansion - -Wno-pre-c11-compat - -Wno-gnu-zero-variadic-macro-arguments + list(APPEND COMMON_COMPILER_FLAGS -Wno-declaration-after-statement -Wno-pre-c11-compat + -Wno-gnu-zero-variadic-macro-arguments ) endif() - - foreach(FLAG ${C_WARNING_FLAGS}) - checkcflag(${FLAG}) - endforeach() endif() -if(ENABLE_WARNING_ERROR) - checkcflag(-Werror) -endif() +list(APPEND COMMON_COMPILER_FLAGS -Wimplicit-function-declaration) -checkcflag(-fno-omit-frame-pointer) +foreach(FLAG ${COMMON_COMPILER_FLAGS}) + checkcflag(${FLAG}) +endforeach() -if(CMAKE_C_COMPILER_ID MATCHES "Clang" OR CMAKE_C_COMPILER_ID MATCHES "GNU") - if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 10) - add_compile_options($<$>:-fdebug-prefix-map=${CMAKE_SOURCE_DIR}=.>) - add_compile_options($<$>:-fmacro-prefix-map=${CMAKE_SOURCE_DIR}=.>) - add_compile_options($<$>:-ffile-prefix-map=${CMAKE_SOURCE_DIR}=.>) - add_compile_options($<$>:-fdebug-prefix-map=${CMAKE_BINARY_DIR}=./build>) - add_compile_options($<$>:-fmacro-prefix-map=${CMAKE_BINARY_DIR}=./build>) - add_compile_options($<$>:-ffile-prefix-map=${CMAKE_BINARY_DIR}=./build>) +# Android profiling +if(ANDROID) + if(WITH_GPROF) + checkandsetflag(-pg) + set(PROFILER_LIBRARIES "${FREERDP_EXTERNAL_PROFILER_PATH}/obj/local/${ANDROID_ABI}/libandroid-ndk-profiler.a") + include_directories(SYSTEM "${FREERDP_EXTERNAL_PROFILER_PATH}") endif() endif() diff --git a/cmake/CompilerSanitizerOptions.cmake b/cmake/CompilerSanitizerOptions.cmake new file mode 100644 index 000000000..b128cd8b7 --- /dev/null +++ b/cmake/CompilerSanitizerOptions.cmake @@ -0,0 +1,48 @@ +include(CMakeDependentOption) + +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 +) + +if(WITH_VALGRIND_MEMCHECK) + check_include_files(valgrind/memcheck.h FREERDP_HAVE_VALGRIND_MEMCHECK_H) +else() + unset(FREERDP_HAVE_VALGRIND_MEMCHECK_H CACHE) +endif() + +# Enable address sanitizer, where supported and when required +if(CMAKE_COMPILER_IS_CLANG OR CMAKE_COMPILER_IS_GNUCC) + set(CMAKE_REQUIRED_LINK_OPTIONS_SAVED ${CMAKE_REQUIRED_LINK_OPTIONS}) + file(WRITE ${PROJECT_BINARY_DIR}/foo.txt "") + if(WITH_SANITIZE_ADDRESS) + add_compile_options(-fsanitize=address) + add_compile_options(-fsanitize-address-use-after-scope) + add_link_options(-fsanitize=address) + elseif(WITH_SANITIZE_MEMORY) + add_compile_options(-fsanitize=memory) + add_compile_options(-fsanitize-memory-use-after-dtor) + add_compile_options(-fsanitize-memory-track-origins) + add_link_options(-fsanitize=memory) + elseif(WITH_SANITIZE_THREAD) + add_compile_options(-fsanitize=thread) + add_link_options(-fsanitize=thread) + endif() + + option(WITH_NO_UNDEFINED "Add -Wl,--no-undefined" OFF) + if(WITH_NO_UNDEFINED) + add_link_options(-Wl,--no-undefined) + endif() +endif() diff --git a/cmake/ConfigOptions.cmake b/cmake/ConfigOptions.cmake index ad23b45e8..1feb6c811 100644 --- a/cmake/ConfigOptions.cmake +++ b/cmake/ConfigOptions.cmake @@ -26,24 +26,7 @@ option(WITH_JPEG "Use JPEG decoding." OFF) include(CompilerDetect) -if(NOT WIN32) - 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 - ) -else() +if(WIN32) if(NOT UWP) option(WITH_MEDIA_FOUNDATION "Enable H264 media foundation decoder." OFF) endif() diff --git a/cmake/ExportAllSymbols.cmake b/cmake/ExportAllSymbols.cmake new file mode 100644 index 000000000..76a543daf --- /dev/null +++ b/cmake/ExportAllSymbols.cmake @@ -0,0 +1,11 @@ +include(CheckAndSetFlag) + +option(EXPORT_ALL_SYMBOLS "Export all symbols form library" OFF) + +if(EXPORT_ALL_SYMBOLS) + add_compile_definitions(EXPORT_ALL_SYMBOLS) +else() + message(STATUS "${} default symbol visibility: hidden") + + checkandsetflag(-fvisibility=hidden) +endif() diff --git a/libfreerdp/core/test/TestSettings.c b/libfreerdp/core/test/TestSettings.c index 342600002..3778a9415 100644 --- a/libfreerdp/core/test/TestSettings.c +++ b/libfreerdp/core/test/TestSettings.c @@ -1,5 +1,6 @@ #include +#include #include #include diff --git a/rdtk/CMakeLists.txt b/rdtk/CMakeLists.txt index 034184548..803afdb4b 100644 --- a/rdtk/CMakeLists.txt +++ b/rdtk/CMakeLists.txt @@ -32,15 +32,9 @@ if(NOT FREERDP_UNIFIED_BUILD) set(CMAKE_C_EXTENSIONS ON) set(WINPR_VERSION_MAJOR 3) - option(EXPORT_ALL_SYMBOLS "Export all symbols form library" OFF) option(BUILD_TESTING_INTERNAL "Build library unit tests" ON) - if(CMAKE_COMPILER_IS_GNUCC) - if(NOT EXPORT_ALL_SYMBOLS) - message(STATUS "GCC default symbol visibility: hidden") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden") - endif() - endif() + include(ExportAllSymbols) else() set(WINPR_VERSION_MAJOR ${FREERDP_VERSION_MAJOR}) endif() @@ -62,7 +56,7 @@ include(CheckCCompilerFlag) include(CMakePackageConfigHelpers) include(SetFreeRDPCMakeInstallDir) -option(RDTK_FORCE_STATIC_BUILD "Force RDTK to be built as static library (recommended)" OFF) +option(RDTK_FORCE_STATIC_BUILD "Force RDTK to be build as static library (recommended)" OFF) if(RDTK_FORCE_STATIC_BUILD) set(BUILD_SHARED_LIBS OFF) endif() diff --git a/scripts/blacklist-address-sanitizer.txt b/scripts/blacklist-address-sanitizer.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/scripts/blacklist-memory-sanitizer.txt b/scripts/blacklist-memory-sanitizer.txt deleted file mode 100644 index 9a05abbdb..000000000 --- a/scripts/blacklist-memory-sanitizer.txt +++ /dev/null @@ -1 +0,0 @@ -fun:RAND* diff --git a/scripts/blacklist-thread-sanitizer.txt b/scripts/blacklist-thread-sanitizer.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/uwac/CMakeLists.txt b/uwac/CMakeLists.txt index 291f9856d..c6693bf88 100644 --- a/uwac/CMakeLists.txt +++ b/uwac/CMakeLists.txt @@ -31,18 +31,12 @@ if(NOT FREERDP_UNIFIED_BUILD) set(CMAKE_C_STANDARD_REQUIRED ON) set(CMAKE_C_EXTENSIONS ON) - option(EXPORT_ALL_SYMBOLS "Export all symbols form library" OFF) option(BUILD_TESTING_INTERNAL "Build library unit tests" ON) - if(CMAKE_COMPILER_IS_GNUCC) - if(NOT EXPORT_ALL_SYMBOLS) - message(STATUS "GCC default symbol visibility: hidden") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden") - endif() - endif() + include(ExportAllSymbols) endif() -option(UWAC_FORCE_STATIC_BUILD "Force UWAC to be built as static library (recommended)" OFF) +option(UWAC_FORCE_STATIC_BUILD "Force UWAC to be build as static library (recommended)" OFF) option(UWAC_HAVE_PIXMAN_REGION "Use PIXMAN or FreeRDP for region calculations" "NOT FREERDP_UNIFIED_BUILD") # Include our extra modules diff --git a/winpr/CMakeLists.txt b/winpr/CMakeLists.txt index 3744c5169..08e33e186 100644 --- a/winpr/CMakeLists.txt +++ b/winpr/CMakeLists.txt @@ -39,19 +39,7 @@ if(NOT FREERDP_UNIFIED_BUILD) endif() # Default to build shared libs - option(EXPORT_ALL_SYMBOLS "Export all symbols form library" OFF) - - if(EXPORT_ALL_SYMBOLS) - # set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) - add_compile_definitions(EXPORT_ALL_SYMBOLS) - endif() - - if(CMAKE_COMPILER_IS_GNUCC) - if(NOT EXPORT_ALL_SYMBOLS) - message(STATUS "GCC default symbol visibility: hidden") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden") - endif() - endif() + include(ExportAllSymbols) if(WITH_DEBUG_ALL) message( WARNING diff --git a/winpr/include/winpr/user.h b/winpr/include/winpr/user.h index d819f43f0..b85a81582 100644 --- a/winpr/include/winpr/user.h +++ b/winpr/include/winpr/user.h @@ -27,7 +27,9 @@ * Standard Clipboard Formats */ -#ifndef _WIN32 +#ifdef _WIN32 +#include +#else #define MB_OK 0x00000000L #define MB_OKCANCEL 0x00000001L