From b4976163cd8bbddc8e3f03d179070e7ec0f4f2ca Mon Sep 17 00:00:00 2001 From: akallabeth Date: Wed, 27 Nov 2024 11:29:48 +0100 Subject: [PATCH 1/2] [CMake,simd] unify WITH_SSE2, WITH_AVX2, WITH_NEON * Add new CMake option WITH_SIMD to enable best available instruction type * Unify simd related defines in single header --- CMakeLists.txt | 4 - ci/cmake-preloads/config-abi.txt | 36 ++--- ci/cmake-preloads/config-android.txt | 16 +- ci/cmake-preloads/config-coverity.txt | 35 +++-- ci/cmake-preloads/config-ios-shared.txt | 34 ++--- ci/cmake-preloads/config-ios.txt | 34 ++--- ci/cmake-preloads/config-linux-all.txt | 108 +++++++------- ci/cmake-preloads/config-macosx.txt | 32 ++-- ci/cmake-preloads/config-qa-static.cmake | 3 +- ci/cmake-preloads/config-qa.cmake | 3 +- ci/cmake-preloads/config-ubuntu-1204.txt | 28 ++-- ci/cmake-preloads/config-windows.txt | 40 ++--- cmake/ConfigOptions.cmake | 5 - cmake/DetectIntrinsicSupport.cmake | 140 +++++++++++++----- include/config/config.h.in | 3 +- libfreerdp/codec/CMakeLists.txt | 26 +--- libfreerdp/codec/neon/nsc_neon.c | 10 +- libfreerdp/codec/neon/rfx_neon.c | 12 +- libfreerdp/codec/sse/nsc_sse2.c | 10 +- libfreerdp/codec/sse/rfx_sse2.c | 10 +- libfreerdp/core/CMakeLists.txt | 1 + libfreerdp/core/simd.h | 39 +++++ libfreerdp/primitives/CMakeLists.txt | 45 +----- libfreerdp/primitives/neon/prim_YCoCg_neon.c | 6 +- libfreerdp/primitives/neon/prim_YUV_neon.c | 6 +- libfreerdp/primitives/neon/prim_colors_neon.c | 8 +- libfreerdp/primitives/prim_internal.h | 21 +-- libfreerdp/primitives/sse/prim_YCoCg_ssse3.c | 6 +- libfreerdp/primitives/sse/prim_YUV_ssse3.c | 6 +- libfreerdp/primitives/sse/prim_add_sse3.c | 6 +- .../primitives/sse/prim_alphaComp_sse3.c | 6 +- libfreerdp/primitives/sse/prim_andor_sse3.c | 6 +- libfreerdp/primitives/sse/prim_colors_sse2.c | 6 +- libfreerdp/primitives/sse/prim_copy_avx2.c | 6 +- libfreerdp/primitives/sse/prim_copy_sse4_1.c | 6 +- libfreerdp/primitives/sse/prim_set_sse2.c | 6 +- libfreerdp/primitives/sse/prim_shift_sse3.c | 6 +- libfreerdp/primitives/sse/prim_sign_ssse3.c | 8 +- scripts/bundle-mac-os.sh | 3 +- 39 files changed, 399 insertions(+), 387 deletions(-) create mode 100644 libfreerdp/core/simd.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 11700a75f..f7d5d63f1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -409,10 +409,6 @@ endif(APPLE) if(ANDROID) set_property(GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS ${ANDROID_LIBRARY_USE_LIB64_PATHS}) - if(${ANDROID_ABI} STREQUAL "armeabi") - set(WITH_NEON OFF) - endif() - if(ANDROID_ABI STREQUAL arm64-v8a) include(CheckCCompilerFlag) check_c_compiler_flag("-mfloat-abi=softfp" ABI_SOFTFP_SUPPORTED) diff --git a/ci/cmake-preloads/config-abi.txt b/ci/cmake-preloads/config-abi.txt index 11b76a00c..b3ed0b5bc 100644 --- a/ci/cmake-preloads/config-abi.txt +++ b/ci/cmake-preloads/config-abi.txt @@ -1,21 +1,21 @@ message("PRELOADING cache") -set (CMAKE_VERBOSE_MAKEFILE ON CACHE BOOL "preload") -set (WITH_MANPAGES OFF CACHE BOOL "preload") -set (CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING "preload") +set(CMAKE_VERBOSE_MAKEFILE ON CACHE BOOL "preload") +set(WITH_MANPAGES OFF CACHE BOOL "preload") +set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING "preload") #set (UWAC_FORCE_STATIC_BUILD ON CACHE BOOL "preload") #set (RDTK_FORCE_STATIC_BUILD ON CACHE BOOL "preload") -set (WINPR_UTILS_IMAGE_PNG ON CACHE BOOL "preload") -set (WINPR_UTILS_IMAGE_JPEG ON CACHE BOOL "preload") -set (WINPR_UTILS_IMAGE_WEBP ON CACHE BOOL "preload") -set (WITH_BINARY_VERSIONING ON CACHE BOOL "preload") -set (WITH_INTERNAL_RC4 ON CACHE BOOL "preload") -set (WITH_INTERNAL_MD4 ON CACHE BOOL "preload") -set (WITH_INTERNAL_MD5 ON CACHE BOOL "preload") -set (WITH_SAMPLE ON CACHE BOOL "preload") -set (WITH_FFMPEG ON CACHE BOOL "preload") -set (WITH_SWSCALE ON CACHE BOOL "preload") -set (WITH_DSP_FFMPEG ON CACHE BOOL "preload") -set (WITH_FREERDP_DEPRECATED_COMMANDLINE ON CACHE BOOL "preload") -set (WITH_PULSE ON CACHE BOOL "preload") -set (WITH_OPAQUE_SETTINGS ON CACHE BOOL "preload") -set (WITH_VERBOSE_WINPR_ASSERT OFF CACHE BOOL "preload") +set(WINPR_UTILS_IMAGE_PNG ON CACHE BOOL "preload") +set(WINPR_UTILS_IMAGE_JPEG ON CACHE BOOL "preload") +set(WINPR_UTILS_IMAGE_WEBP ON CACHE BOOL "preload") +set(WITH_BINARY_VERSIONING ON CACHE BOOL "preload") +set(WITH_INTERNAL_RC4 ON CACHE BOOL "preload") +set(WITH_INTERNAL_MD4 ON CACHE BOOL "preload") +set(WITH_INTERNAL_MD5 ON CACHE BOOL "preload") +set(WITH_SAMPLE ON CACHE BOOL "preload") +set(WITH_FFMPEG ON CACHE BOOL "preload") +set(WITH_SWSCALE ON CACHE BOOL "preload") +set(WITH_DSP_FFMPEG ON CACHE BOOL "preload") +set(WITH_FREERDP_DEPRECATED_COMMANDLINE ON CACHE BOOL "preload") +set(WITH_PULSE ON CACHE BOOL "preload") +set(WITH_OPAQUE_SETTINGS ON CACHE BOOL "preload") +set(WITH_VERBOSE_WINPR_ASSERT OFF CACHE BOOL "preload") diff --git a/ci/cmake-preloads/config-android.txt b/ci/cmake-preloads/config-android.txt index 0832e8511..fb2c94b7f 100644 --- a/ci/cmake-preloads/config-android.txt +++ b/ci/cmake-preloads/config-android.txt @@ -1,14 +1,14 @@ message("PRELOADING android cache") -set (CMAKE_VERBOSE_MAKEFILE ON CACHE BOOL "preload") +set(CMAKE_VERBOSE_MAKEFILE ON CACHE BOOL "preload") set(CMAKE_TOOLCHAIN_FILE "$ANDROID_NDK/build/cmake/android.toolchain.cmake" CACHE PATH "ToolChain file") -set (WITH_SANITIZE_ADDRESS ON CACHE BOOL "build with address sanitizer") +set(WITH_SANITIZE_ADDRESS ON CACHE BOOL "build with address sanitizer") set(FREERDP_EXTERNAL_SSL_PATH $ENV{ANDROID_SSL_PATH} CACHE PATH "android ssl") # ANDROID_NDK and ANDROID_SDK must be set as environment variable #set(ANDROID_NDK $ENV{ANDROID_SDK} CACHE PATH "Android NDK") #set(ANDROID_SDK "${ANDROID_NDK}" CACHE PATH "android SDK") -set (WITH_FREERDP_DEPRECATED_COMMANDLINE ON CACHE BOOL "Enable deprecated command line options") -set (WITH_KRB5 OFF CACHE BOOL "Kerberos support") -set (WITH_CLIENT_SDL OFF CACHE BOOL "SDL client") -set (WITH_SERVER OFF CACHE BOOL "ci default") -set (WITH_X11 OFF CACHE BOOL "ci default") -set (WITH_LIBRARY_VERSIONING OFF CACHE BOOL "ci default") +set(WITH_FREERDP_DEPRECATED_COMMANDLINE ON CACHE BOOL "Enable deprecated command line options") +set(WITH_KRB5 OFF CACHE BOOL "Kerberos support") +set(WITH_CLIENT_SDL OFF CACHE BOOL "SDL client") +set(WITH_SERVER OFF CACHE BOOL "ci default") +set(WITH_X11 OFF CACHE BOOL "ci default") +set(WITH_LIBRARY_VERSIONING OFF CACHE BOOL "ci default") diff --git a/ci/cmake-preloads/config-coverity.txt b/ci/cmake-preloads/config-coverity.txt index 1774e4d19..f2e025926 100644 --- a/ci/cmake-preloads/config-coverity.txt +++ b/ci/cmake-preloads/config-coverity.txt @@ -1,18 +1,17 @@ -set (CMAKE_VERBOSE_MAKEFILE ON CACHE BOOL "preload") -set (WINPR_UTILS_IMAGE_JPEG ON CACHE BOOL "preload") -set (WINPR_UTILS_IMAGE_WEBP ON CACHE BOOL "preload") -set (WINPR_UTILS_IMAGE_PNG ON CACHE BOOL "preload") -set (WITH_CAIRO ON CACHE BOOL "preload") -set (WITH_DSP_EXPERIMENTAL ON CACHE BOOL "preload") -set (WITH_DSP_FFMPEG ON CACHE BOOL "preload") -set (WITH_FFMPEG ON CACHE BOOL "preload") -set (WITH_INTERNAL_RC4 ON CACHE BOOL "preload") -set (WITH_INTERNAL_MD4 ON CACHE BOOL "preload") -set (WITH_INTERNAL_MD5 ON CACHE BOOL "preload") -set (WITH_OPUS ON CACHE BOOL "preload") -set (WITH_PROXY_EMULATE_SMARTCARD ON CACHE BOOL "preload") -set (WITH_PULSE ON CACHE BOOL "preload") -set (WITH_SMARTCARD_INSPECT ON CACHE BOOL "preload") -set (WITH_SOXR ON CACHE BOOL "preload") -set (WITH_UNICODE_BUILTIN ON CACHE BOOL "preload") - +set(CMAKE_VERBOSE_MAKEFILE ON CACHE BOOL "preload") +set(WINPR_UTILS_IMAGE_JPEG ON CACHE BOOL "preload") +set(WINPR_UTILS_IMAGE_WEBP ON CACHE BOOL "preload") +set(WINPR_UTILS_IMAGE_PNG ON CACHE BOOL "preload") +set(WITH_CAIRO ON CACHE BOOL "preload") +set(WITH_DSP_EXPERIMENTAL ON CACHE BOOL "preload") +set(WITH_DSP_FFMPEG ON CACHE BOOL "preload") +set(WITH_FFMPEG ON CACHE BOOL "preload") +set(WITH_INTERNAL_RC4 ON CACHE BOOL "preload") +set(WITH_INTERNAL_MD4 ON CACHE BOOL "preload") +set(WITH_INTERNAL_MD5 ON CACHE BOOL "preload") +set(WITH_OPUS ON CACHE BOOL "preload") +set(WITH_PROXY_EMULATE_SMARTCARD ON CACHE BOOL "preload") +set(WITH_PULSE ON CACHE BOOL "preload") +set(WITH_SMARTCARD_INSPECT ON CACHE BOOL "preload") +set(WITH_SOXR ON CACHE BOOL "preload") +set(WITH_UNICODE_BUILTIN ON CACHE BOOL "preload") diff --git a/ci/cmake-preloads/config-ios-shared.txt b/ci/cmake-preloads/config-ios-shared.txt index ad8919eee..a18d7fa1a 100644 --- a/ci/cmake-preloads/config-ios-shared.txt +++ b/ci/cmake-preloads/config-ios-shared.txt @@ -1,18 +1,18 @@ message("PRELOADING iOS cache") -set (CMAKE_VERBOSE_MAKEFILE ON CACHE BOOL "preload") -set (CMAKE_TOOLCHAIN_FILE "${CMAKE_SOURCE_DIR}/cmake/ios.toolchain.cmake" CACHE PATH "cmake toolchain file") -set (CMAKE_BUILD_TYPE "Release" CACHE STRING "build type") -set (CMAKE_OSX_ARCHITECTURES "arm64" CACHE STRING "iOS platform to build") -set (CMAKE_OSX_DEPLOYMENT_TARGET "10.0" CACHE STRING "iOS minimum target") -set (ENABLE_BITCODE OFF CACHE BOOL "iOS default") -set (BUILD_TESTING ON CACHE BOOL "iOS default") -set (WITH_SANITIZE_ADDRESS ON CACHE BOOL "build with address sanitizer") -set (WITH_CLIENT OFF CACHE BOOL "disable iOS client") -set (WITH_SERVER OFF CACHE BOOL "disable iOS server") -set (WITH_KRB5 OFF CACHE BOOL "Kerberos support") -set (WITH_CLIENT_SDL OFF CACHE BOOL "iOS preload") -set (WITH_FFMPEG OFF CACHE BOOL "iOS preload") -set (WITH_SWSCALE OFF CACHE BOOL "iOS preload") -set (WITH_NEON ON CACHE BOOL "iOS preload") -set (WITH_OPUS OFF CACHE BOOL "iOS preload") -set (BUILD_SHARED_LIBS ON CACHE BOOL "iOS preload") +set(CMAKE_VERBOSE_MAKEFILE ON CACHE BOOL "preload") +set(CMAKE_TOOLCHAIN_FILE "${CMAKE_SOURCE_DIR}/cmake/ios.toolchain.cmake" CACHE PATH "cmake toolchain file") +set(CMAKE_BUILD_TYPE "Release" CACHE STRING "build type") +set(CMAKE_OSX_ARCHITECTURES "arm64" CACHE STRING "iOS platform to build") +set(CMAKE_OSX_DEPLOYMENT_TARGET "10.0" CACHE STRING "iOS minimum target") +set(ENABLE_BITCODE OFF CACHE BOOL "iOS default") +set(BUILD_TESTING ON CACHE BOOL "iOS default") +set(WITH_SANITIZE_ADDRESS ON CACHE BOOL "build with address sanitizer") +set(WITH_CLIENT OFF CACHE BOOL "disable iOS client") +set(WITH_SERVER OFF CACHE BOOL "disable iOS server") +set(WITH_KRB5 OFF CACHE BOOL "Kerberos support") +set(WITH_CLIENT_SDL OFF CACHE BOOL "iOS preload") +set(WITH_FFMPEG OFF CACHE BOOL "iOS preload") +set(WITH_SWSCALE OFF CACHE BOOL "iOS preload") +set(WITH_SIMD ON CACHE BOOL "iOS preload") +set(WITH_OPUS OFF CACHE BOOL "iOS preload") +set(BUILD_SHARED_LIBS ON CACHE BOOL "iOS preload") diff --git a/ci/cmake-preloads/config-ios.txt b/ci/cmake-preloads/config-ios.txt index acdfdad10..85df011f4 100644 --- a/ci/cmake-preloads/config-ios.txt +++ b/ci/cmake-preloads/config-ios.txt @@ -1,18 +1,18 @@ message("PRELOADING iOS cache") -set (CMAKE_VERBOSE_MAKEFILE ON CACHE BOOL "preload") -set (CMAKE_TOOLCHAIN_FILE "${CMAKE_SOURCE_DIR}/cmake/ios.toolchain.cmake" CACHE PATH "cmake toolchain file") -set (CMAKE_BUILD_TYPE "Debug" CACHE STRING "build type") -set (CMAKE_OSX_ARCHITECTURES "arm64" CACHE STRING "iOS platform to build") -set (CMAKE_OSX_DEPLOYMENT_TARGET "10.0" CACHE STRING "iOS minimum target") -set (ENABLE_BITCODE OFF CACHE BOOL "iOS default") -set (BUILD_TESTING ON CACHE BOOL "iOS default") -set (WITH_SANITIZE_ADDRESS ON CACHE BOOL "build with address sanitizer") -set (WITH_CLIENT OFF CACHE BOOL "disable iOS client") -set (WITH_SERVER OFF CACHE BOOL "disable iOS server") -set (WITH_KRB5 OFF CACHE BOOL "Kerberos support") -set (WITH_CLIENT_SDL OFF CACHE BOOL "iOS preload") -set (WITH_FFMPEG OFF CACHE BOOL "iOS preload") -set (WITH_SWSCALE OFF CACHE BOOL "iOS preload") -set (WITH_NEON ON CACHE BOOL "iOS preload") -set (WITH_OPUS OFF CACHE BOOL "iOS preload") -set (BUILD_SHARED_LIBS OFF CACHE BOOL "iOS preload") +set(CMAKE_VERBOSE_MAKEFILE ON CACHE BOOL "preload") +set(CMAKE_TOOLCHAIN_FILE "${CMAKE_SOURCE_DIR}/cmake/ios.toolchain.cmake" CACHE PATH "cmake toolchain file") +set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "build type") +set(CMAKE_OSX_ARCHITECTURES "arm64" CACHE STRING "iOS platform to build") +set(CMAKE_OSX_DEPLOYMENT_TARGET "10.0" CACHE STRING "iOS minimum target") +set(ENABLE_BITCODE OFF CACHE BOOL "iOS default") +set(BUILD_TESTING ON CACHE BOOL "iOS default") +set(WITH_SANITIZE_ADDRESS ON CACHE BOOL "build with address sanitizer") +set(WITH_CLIENT OFF CACHE BOOL "disable iOS client") +set(WITH_SERVER OFF CACHE BOOL "disable iOS server") +set(WITH_KRB5 OFF CACHE BOOL "Kerberos support") +set(WITH_CLIENT_SDL OFF CACHE BOOL "iOS preload") +set(WITH_FFMPEG OFF CACHE BOOL "iOS preload") +set(WITH_SWSCALE OFF CACHE BOOL "iOS preload") +set(WITH_SIMD ON CACHE BOOL "iOS preload") +set(WITH_OPUS OFF CACHE BOOL "iOS preload") +set(BUILD_SHARED_LIBS OFF CACHE BOOL "iOS preload") diff --git a/ci/cmake-preloads/config-linux-all.txt b/ci/cmake-preloads/config-linux-all.txt index 25d9b594c..9a0563cda 100644 --- a/ci/cmake-preloads/config-linux-all.txt +++ b/ci/cmake-preloads/config-linux-all.txt @@ -1,55 +1,55 @@ message("PRELOADING cache") -set (CMAKE_VERBOSE_MAKEFILE ON CACHE BOOL "preload") -set (BUILD_TESTING_INTERNAL ON CACHE BOOL "preload") -set (WITH_MANPAGES ON CACHE BOOL "preload") -set (CMAKE_BUILD_TYPE "Debug" CACHE STRING "preload") -set (WITH_PULSE ON CACHE BOOL "preload") -set (WITH_CHANNELS ON CACHE BOOL "preload") -set (WITH_CUPS ON CACHE BOOL "preload") -set (WITH_WAYLAND ON CACHE BOOL "preload") -set (WITH_KRB5 ON CACHE BOOL "preload") -set (WITH_PCSC ON CACHE BOOL "preload") -set (WITH_JPEG ON CACHE BOOL "preload") -set (WITH_GSM ON CACHE BOOL "preload") -set (CHANNEL_URBDRC ON CACHE BOOL "preload") -set (CHANNEL_URBDRC_CLIENT ON CACHE BOOL "preload") -set (WITH_SERVER ON CACHE BOOL "preload") -set (WITH_DEBUG_ALL OFF CACHE BOOL "preload") -set (WITH_DEBUG_CAPABILITIES OFF CACHE BOOL "preload") -set (WITH_DEBUG_CERTIFICATE OFF CACHE BOOL "preload") -set (WITH_DEBUG_CHANNELS OFF CACHE BOOL "preload") -set (WITH_DEBUG_CLIPRDR OFF CACHE BOOL "preload") -set (WITH_DEBUG_RDPGFX OFF CACHE BOOL "preload") -set (WITH_DEBUG_DVC OFF CACHE BOOL "preload") -set (WITH_DEBUG_KBD OFF CACHE BOOL "preload") -set (WITH_DEBUG_LICENSE OFF CACHE BOOL "preload") -set (WITH_DEBUG_NEGO OFF CACHE BOOL "preload") -set (WITH_DEBUG_NLA OFF CACHE BOOL "preload") -set (WITH_DEBUG_NTLM OFF CACHE BOOL "preload") -set (WITH_DEBUG_RAIL OFF CACHE BOOL "preload") -set (WITH_DEBUG_RDP OFF CACHE BOOL "preload") -set (WITH_DEBUG_RDPEI OFF CACHE BOOL "preload") -set (WITH_DEBUG_REDIR OFF CACHE BOOL "preload") -set (WITH_DEBUG_RDPDR OFF CACHE BOOL "preload") -set (WITH_DEBUG_RFX OFF CACHE BOOL "preload") -set (WITH_DEBUG_SCARD OFF CACHE BOOL "preload") -set (WITH_DEBUG_SND OFF CACHE BOOL "preload") -set (WITH_DEBUG_SVC OFF CACHE BOOL "preload") -set (WITH_DEBUG_THREADS OFF CACHE BOOL "preload") -set (WITH_DEBUG_TIMEZONE OFF CACHE BOOL "preload") -set (WITH_DEBUG_TRANSPORT OFF CACHE BOOL "preload") -set (WITH_DEBUG_TSG OFF CACHE BOOL "preload") -set (WITH_DEBUG_TSMF OFF CACHE BOOL "preload") -set (WITH_DEBUG_WND OFF CACHE BOOL "preload") -set (WITH_DEBUG_X11 OFF CACHE BOOL "preload") -set (WITH_DEBUG_X11_LOCAL_MOVESIZE OFF CACHE BOOL "preload") -set (WITH_DEBUG_XV OFF CACHE BOOL "preload") -set (WITH_SAMPLE ON CACHE BOOL "preload") -set (WITH_NO_UNDEFINED ON CACHE BOOL "preload") -set (WITH_SANITIZE_ADDRESS ON CACHE BOOL "preload") -set (WITH_FFMPEG ON CACHE BOOL "preload") -set (WITH_SWSCALE ON CACHE BOOL "preload") -set (WITH_DSP_FFMPEG ON CACHE BOOL "preload") -set (WITH_PROXY ON CACHE BOOL "preload") -set (WITH_PROXY_MODULES ON CACHE BOOL "preload") -set (WITH_FREERDP_DEPRECATED_COMMANDLINE ON CACHE BOOL "preload") +set(CMAKE_VERBOSE_MAKEFILE ON CACHE BOOL "preload") +set(BUILD_TESTING_INTERNAL ON CACHE BOOL "preload") +set(WITH_MANPAGES ON CACHE BOOL "preload") +set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "preload") +set(WITH_PULSE ON CACHE BOOL "preload") +set(WITH_CHANNELS ON CACHE BOOL "preload") +set(WITH_CUPS ON CACHE BOOL "preload") +set(WITH_WAYLAND ON CACHE BOOL "preload") +set(WITH_KRB5 ON CACHE BOOL "preload") +set(WITH_PCSC ON CACHE BOOL "preload") +set(WITH_JPEG ON CACHE BOOL "preload") +set(WITH_GSM ON CACHE BOOL "preload") +set(CHANNEL_URBDRC ON CACHE BOOL "preload") +set(CHANNEL_URBDRC_CLIENT ON CACHE BOOL "preload") +set(WITH_SERVER ON CACHE BOOL "preload") +set(WITH_DEBUG_ALL OFF CACHE BOOL "preload") +set(WITH_DEBUG_CAPABILITIES OFF CACHE BOOL "preload") +set(WITH_DEBUG_CERTIFICATE OFF CACHE BOOL "preload") +set(WITH_DEBUG_CHANNELS OFF CACHE BOOL "preload") +set(WITH_DEBUG_CLIPRDR OFF CACHE BOOL "preload") +set(WITH_DEBUG_RDPGFX OFF CACHE BOOL "preload") +set(WITH_DEBUG_DVC OFF CACHE BOOL "preload") +set(WITH_DEBUG_KBD OFF CACHE BOOL "preload") +set(WITH_DEBUG_LICENSE OFF CACHE BOOL "preload") +set(WITH_DEBUG_NEGO OFF CACHE BOOL "preload") +set(WITH_DEBUG_NLA OFF CACHE BOOL "preload") +set(WITH_DEBUG_NTLM OFF CACHE BOOL "preload") +set(WITH_DEBUG_RAIL OFF CACHE BOOL "preload") +set(WITH_DEBUG_RDP OFF CACHE BOOL "preload") +set(WITH_DEBUG_RDPEI OFF CACHE BOOL "preload") +set(WITH_DEBUG_REDIR OFF CACHE BOOL "preload") +set(WITH_DEBUG_RDPDR OFF CACHE BOOL "preload") +set(WITH_DEBUG_RFX OFF CACHE BOOL "preload") +set(WITH_DEBUG_SCARD OFF CACHE BOOL "preload") +set(WITH_DEBUG_SND OFF CACHE BOOL "preload") +set(WITH_DEBUG_SVC OFF CACHE BOOL "preload") +set(WITH_DEBUG_THREADS OFF CACHE BOOL "preload") +set(WITH_DEBUG_TIMEZONE OFF CACHE BOOL "preload") +set(WITH_DEBUG_TRANSPORT OFF CACHE BOOL "preload") +set(WITH_DEBUG_TSG OFF CACHE BOOL "preload") +set(WITH_DEBUG_TSMF OFF CACHE BOOL "preload") +set(WITH_DEBUG_WND OFF CACHE BOOL "preload") +set(WITH_DEBUG_X11 OFF CACHE BOOL "preload") +set(WITH_DEBUG_X11_LOCAL_MOVESIZE OFF CACHE BOOL "preload") +set(WITH_DEBUG_XV OFF CACHE BOOL "preload") +set(WITH_SAMPLE ON CACHE BOOL "preload") +set(WITH_NO_UNDEFINED ON CACHE BOOL "preload") +set(WITH_SANITIZE_ADDRESS ON CACHE BOOL "preload") +set(WITH_FFMPEG ON CACHE BOOL "preload") +set(WITH_SWSCALE ON CACHE BOOL "preload") +set(WITH_DSP_FFMPEG ON CACHE BOOL "preload") +set(WITH_PROXY ON CACHE BOOL "preload") +set(WITH_PROXY_MODULES ON CACHE BOOL "preload") +set(WITH_FREERDP_DEPRECATED_COMMANDLINE ON CACHE BOOL "preload") diff --git a/ci/cmake-preloads/config-macosx.txt b/ci/cmake-preloads/config-macosx.txt index 3cfed2251..f5b19f5e8 100644 --- a/ci/cmake-preloads/config-macosx.txt +++ b/ci/cmake-preloads/config-macosx.txt @@ -1,17 +1,17 @@ message("PRELOADING mac cache") -set (CMAKE_VERBOSE_MAKEFILE ON CACHE BOOL "preload") -set (WITH_MANPAGES OFF CACHE BOOL "man pages") -set (CMAKE_BUILD_TYPE "Debug" CACHE STRING "build type") -set (WITH_CUPS ON CACHE BOOL "CUPS printing") -set (CHANNEL_URBDRC OFF CACHE BOOL "USB redirection") -set (WITH_X11 ON CACHE BOOL "Enable X11") -set (WITH_SERVER ON CACHE BOOL "build with server") -set (WITH_SAMPLE ON CACHE BOOL "build with sample") -set (BUILD_TESTING_INTERNAL ON CACHE BOOL "build testing") -set (WITH_SANITIZE_ADDRESS ON CACHE BOOL "build with address sanitizer") -set (WITH_FREERDP_DEPRECATED_COMMANDLINE ON CACHE BOOL "Enable deprecated command line options") -set (WITH_KRB5 OFF CACHE BOOL "Kerberos support") -set (WITH_WEBVIEW OFF CACHE BOOL "ci default") -set (WITH_FFMPEG OFF CACHE BOOL "ci default") -set (WITH_OPUS OFF CACHE BOOL "ci default") -set (WITH_SWSCALE OFF CACHE BOOL "ci default") +set(CMAKE_VERBOSE_MAKEFILE ON CACHE BOOL "preload") +set(WITH_MANPAGES OFF CACHE BOOL "man pages") +set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "build type") +set(WITH_CUPS ON CACHE BOOL "CUPS printing") +set(CHANNEL_URBDRC OFF CACHE BOOL "USB redirection") +set(WITH_X11 ON CACHE BOOL "Enable X11") +set(WITH_SERVER ON CACHE BOOL "build with server") +set(WITH_SAMPLE ON CACHE BOOL "build with sample") +set(BUILD_TESTING_INTERNAL ON CACHE BOOL "build testing") +set(WITH_SANITIZE_ADDRESS ON CACHE BOOL "build with address sanitizer") +set(WITH_FREERDP_DEPRECATED_COMMANDLINE ON CACHE BOOL "Enable deprecated command line options") +set(WITH_KRB5 OFF CACHE BOOL "Kerberos support") +set(WITH_WEBVIEW OFF CACHE BOOL "ci default") +set(WITH_FFMPEG OFF CACHE BOOL "ci default") +set(WITH_OPUS OFF CACHE BOOL "ci default") +set(WITH_SWSCALE OFF CACHE BOOL "ci default") diff --git a/ci/cmake-preloads/config-qa-static.cmake b/ci/cmake-preloads/config-qa-static.cmake index ce0cfd98f..f41fb54d0 100644 --- a/ci/cmake-preloads/config-qa-static.cmake +++ b/ci/cmake-preloads/config-qa-static.cmake @@ -2,8 +2,7 @@ message("PRELOADING cache") set(CMAKE_VERBOSE_MAKEFILE ON CACHE BOOL "preload") set(WITH_SERVER ON CACHE BOOL "qa default") set(WITH_SAMPLE ON CACHE BOOL "qa default") -set(WITH_SSE2 ON CACHE BOOL "qa default") -set(WITH_NEON ON CACHE BOOL "qa default") +set(WITH_SIMD ON CACHE BOOL "qa default") set(WITH_VERBOSE_WINPR_ASSERT OFF CACHE BOOL "qa default") set(ENABLE_WARNING_VERBOSE ON CACHE BOOL "preload") set(BUILD_SHARED_LIBS OFF CACHE BOOL "qa default") diff --git a/ci/cmake-preloads/config-qa.cmake b/ci/cmake-preloads/config-qa.cmake index 99e07faf9..44f231db6 100644 --- a/ci/cmake-preloads/config-qa.cmake +++ b/ci/cmake-preloads/config-qa.cmake @@ -11,8 +11,7 @@ set(WITH_CUPS ON CACHE BOOL "qa default") set(WITH_OPENCL ON CACHE BOOL "qa default") set(WITH_PCSC ON CACHE BOOL "qa default") set(WITH_SOXR ON CACHE BOOL "qa default") -set(WITH_SSE2 ON CACHE BOOL "qa default") -set(WITH_NEON ON CACHE BOOL "qa default") +set(WITH_SIMD ON CACHE BOOL "qa default") set(WITH_SWSCALE ON CACHE BOOL "qa default") set(WITH_DSP_FFMPEG ON CACHE BOOL "qa default") set(WITH_FFMPEG ON CACHE BOOL "qa default") diff --git a/ci/cmake-preloads/config-ubuntu-1204.txt b/ci/cmake-preloads/config-ubuntu-1204.txt index 0a6f85ecc..7e2050049 100644 --- a/ci/cmake-preloads/config-ubuntu-1204.txt +++ b/ci/cmake-preloads/config-ubuntu-1204.txt @@ -1,15 +1,15 @@ message("PRELOADING cache") -set (CMAKE_VERBOSE_MAKEFILE ON CACHE BOOL "preload") -set (WITH_MANPAGES ON CACHE BOOL "man pages") -set (CMAKE_BUILD_TYPE "Debug" CACHE STRING "build type") -set (WITH_CUPS OFF CACHE BOOL "CUPS printing") -set (WITH_KRB5 ON CACHE BOOL "Kerberos support") -set (WITH_ALSA OFF CACHE BOOL "alsa audio") -set (WITH_FFMPEG OFF CACHE BOOL "ffmepg support") -set (WITH_XV OFF CACHE BOOL "xvideo support") -set (BUILD_TESTING_INTERNAL ON CACHE BOOL "build testing") -set (WITH_XSHM OFF CACHE BOOL "build with xshm support") -set (WITH_SERVER ON CACHE BOOL "build with server") -set (WITH_SAMPLE ON CACHE BOOL "build with sample") -set (WITH_SANITIZE_ADDRESS ON) -set (WITH_FREERDP_DEPRECATED_COMMANDLINE ON CACHE BOOL "Enable deprecated command line options") +set(CMAKE_VERBOSE_MAKEFILE ON CACHE BOOL "preload") +set(WITH_MANPAGES ON CACHE BOOL "man pages") +set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "build type") +set(WITH_CUPS OFF CACHE BOOL "CUPS printing") +set(WITH_KRB5 ON CACHE BOOL "Kerberos support") +set(WITH_ALSA OFF CACHE BOOL "alsa audio") +set(WITH_FFMPEG OFF CACHE BOOL "ffmepg support") +set(WITH_XV OFF CACHE BOOL "xvideo support") +set(BUILD_TESTING_INTERNAL ON CACHE BOOL "build testing") +set(WITH_XSHM OFF CACHE BOOL "build with xshm support") +set(WITH_SERVER ON CACHE BOOL "build with server") +set(WITH_SAMPLE ON CACHE BOOL "build with sample") +set(WITH_SANITIZE_ADDRESS ON) +set(WITH_FREERDP_DEPRECATED_COMMANDLINE ON CACHE BOOL "Enable deprecated command line options") diff --git a/ci/cmake-preloads/config-windows.txt b/ci/cmake-preloads/config-windows.txt index 66462b22b..3ee05f10a 100644 --- a/ci/cmake-preloads/config-windows.txt +++ b/ci/cmake-preloads/config-windows.txt @@ -1,21 +1,21 @@ message("PRELOADING windows cache") -set (CMAKE_VERBOSE_MAKEFILE ON CACHE BOOL "preload") -set (CMAKE_WINDOWS_VERSION "WIN7" CACHE STRING "windows build version") -set (BUILD_SHARED_LIBS OFF CACHE BOOL "build static linked executable") -set (CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded" CACHE STRING "MSVC runtime to use") -set (OPENSSL_USE_STATIC_LIBS ON CACHE BOOL "link OpenSSL static") -set (CMAKE_BUILD_TYPE "Debug" CACHE STRING "build type") -set (WITH_SERVER ON CACHE BOOL "build with server") -set (WITH_SAMPLE ON CACHE BOOL "build with sample") -set (WITH_SHADOW OFF CACHE BOOL "Do not build shadow server") -set (WITH_PLATFORM_SERVER OFF CACHE BOOL "Do not build platform server") -set (WITH_CLIENT_SDL ON CACHE BOOL "build with SDL client") -set (WITH_PROXY_MODULES "ON" CACHE BOOL "build proxy modules") -set (CHANNEL_URBDRC OFF CACHE BOOL "USB redirection") -set (BUILD_TESTING_INTERNAL ON CACHE BOOL "build testing") -set (WITH_FFMPEG OFF CACHE BOOL "ci default") -set (WITH_SWSCALE OFF CACHE BOOL "ci default") -set (WITH_WEBVIEW ON CACHE BOOL "ci default") -set (ZLIB_USE_STATIC_LIBS ON CACHE BOOL "ci default") -set (WITH_FREERDP_DEPRECATED_COMMANDLINE ON CACHE BOOL "Enable deprecated command line options") -set (WITH_SDL_LINK_SHARED OFF CACHE BOOL "ci default") +set(CMAKE_VERBOSE_MAKEFILE ON CACHE BOOL "preload") +set(CMAKE_WINDOWS_VERSION "WIN7" CACHE STRING "windows build version") +set(BUILD_SHARED_LIBS OFF CACHE BOOL "build static linked executable") +set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded" CACHE STRING "MSVC runtime to use") +set(OPENSSL_USE_STATIC_LIBS ON CACHE BOOL "link OpenSSL static") +set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "build type") +set(WITH_SERVER ON CACHE BOOL "build with server") +set(WITH_SAMPLE ON CACHE BOOL "build with sample") +set(WITH_SHADOW OFF CACHE BOOL "Do not build shadow server") +set(WITH_PLATFORM_SERVER OFF CACHE BOOL "Do not build platform server") +set(WITH_CLIENT_SDL ON CACHE BOOL "build with SDL client") +set(WITH_PROXY_MODULES "ON" CACHE BOOL "build proxy modules") +set(CHANNEL_URBDRC OFF CACHE BOOL "USB redirection") +set(BUILD_TESTING_INTERNAL ON CACHE BOOL "build testing") +set(WITH_FFMPEG OFF CACHE BOOL "ci default") +set(WITH_SWSCALE OFF CACHE BOOL "ci default") +set(WITH_WEBVIEW ON CACHE BOOL "ci default") +set(ZLIB_USE_STATIC_LIBS ON CACHE BOOL "ci default") +set(WITH_FREERDP_DEPRECATED_COMMANDLINE ON CACHE BOOL "Enable deprecated command line options") +set(WITH_SDL_LINK_SHARED OFF CACHE BOOL "ci default") diff --git a/cmake/ConfigOptions.cmake b/cmake/ConfigOptions.cmake index 03fd2cb87..616395267 100644 --- a/cmake/ConfigOptions.cmake +++ b/cmake/ConfigOptions.cmake @@ -22,11 +22,6 @@ option(WITH_MANPAGES "Generate manpages." ${MANPAGE_DEF}) option(WITH_PROFILER "Compile profiler." OFF) option(WITH_GPROF "Compile with GProf profiler." OFF) -option(WITH_SSE2 "Enable SSE2 optimization." OFF) -cmake_dependent_option(WITH_AVX2 "Compile AVX2 optimizations" ON "WITH_SSE2" OFF) - -option(WITH_NEON "Enable NEON optimization." OFF) - option(WITH_JPEG "Use JPEG decoding." OFF) include(CompilerDetect) diff --git a/cmake/DetectIntrinsicSupport.cmake b/cmake/DetectIntrinsicSupport.cmake index ed50c6453..3d1ad6481 100644 --- a/cmake/DetectIntrinsicSupport.cmake +++ b/cmake/DetectIntrinsicSupport.cmake @@ -1,44 +1,104 @@ -include(CheckSymbolExists) +option(WITH_SIMD "Enable best platform specific vector instruction support" ON) +cmake_dependent_option(WITH_AVX2 "Compile AVX2 optimizations." ON "WITH_SIMD" OFF) -check_symbol_exists("__i586__" "" X86_i586) -check_symbol_exists("__i686__" "" X86_i686) -check_symbol_exists("__X86__" "" X86_X86) -check_symbol_exists("_X86_" "" X86_X862) -check_symbol_exists("__I86__" "" X86_I86) -check_symbol_exists("__IA32__" "" X86_IA32) -check_symbol_exists("_M_IX86" "" X86_M_IX86) -check_symbol_exists("__amd64" "" X86_AMD64) -check_symbol_exists("__amd64__" "" X86_AMD642) -check_symbol_exists("__x86_64" "" X86_X86_64) -check_symbol_exists("__x86_64__" "" X86_X86_642) -check_symbol_exists("_M_X64" "" X86_X64) -check_symbol_exists("__ia64" "" X86_IA64) -check_symbol_exists("__ia64__" "" X86_IA642) -check_symbol_exists("_M_IA64" "" X86_M_IA64) -check_symbol_exists("_M_ARM64" "" MSVC_ARM64) -check_symbol_exists("__aarch64__" "" ARCH_ARM64) -check_symbol_exists("M_ARM" "" ARCH_M_ARM) -check_symbol_exists("_arm__" "" ARCH_ARM) -check_symbol_exists("_thumb__" "" ARCH_THUMB) -check_symbol_exists("_TARGET_ARCH_ARM" "" ARCH_ARM_TARGET) -check_symbol_exists("_TARGET_ARCH_THUMB" "" ARCH_ARM_TARGET_THUMB) - -if(X86_i586 OR X86_i686 OR X86_X86 OR X86_X862 OR X86_I86 OR X86_IA32 OR X86_M_IX86 OR X86_AMD64 OR X86_AMD642 - OR X86_X86_64 OR X86_X86_642 OR X86_X64 OR X86_IA64 OR X86_IA642 OR X86_M_IA64 -) - set(HAVE_SSE_OR_AVX ON CACHE INTERNAL "internal") -else() - set(HAVE_SSE_OR_AVX OFF CACHE INTERNAL "internal") +if(WITH_SSE2) + message(WARNING "WITH_SSE2 is deprecated, use WITH_SIMD instead") + set(WITH_SIMD ON CACHE BOOL "WITH_SSE2") +endif() +if(WITH_NEON) + message(WARNING "WITH_NEON is deprecated, use WITH_SIMD instead") + set(WITH_SIMD ON CACHE BOOL "WITH_NEON") endif() -if(MSVC_ARM64 OR ARCH_ARM64 OR ARCH_M_ARM OR ARCH_ARM OR ARCH_THUMB OR ARCH_ARM_TARGET OR ARCH_ARM_TARGET_THUMB) - set(HAVE_NEON ON CACHE INTERNAL "internal") -else() - set(HAVE_NEON OFF CACHE INTERNAL "internal") -endif() +macro(set_simd_source_file_properties INTRINSIC_TYPE) + if(ARGC LESS_EQUAL 1) + message(FATAL_ERROR "set_simd_source_file_properties called with invalid arguments: [${ARGC}] {${ARGN}") + endif() -if(MSVC_ARM64 OR ARCH_ARM64) - set(HAVE_NEON64 ON CACHE INTERNAL "internal") -else() - set(HAVE_NEON64 OFF CACHE INTERNAL "internal") -endif() + # see https://cmake.org/cmake/help/latest/variable/CMAKE_LANG_COMPILER_ID.html + set(GCC_CLANG_NAMES "AppleClang;Clang;CrayClang;FujitsuClang;GNU;IntelLLVM;TIClang;XLClang;IBMClang") + + set(SSE_X86_LIST "i686;x86;X86") + set(SSE_LIST "x86_64;ia64;x64;AMD64;IA64;EM64T;${SSE_X86_LIST}") + set(NEON_LIST "arm;armv7;armv8b;armv8l") + set(SUPPORTED_INTRINSICS_LIST "neon;sse2;sse3;ssse3;sse4.1;sse4.2;avx2") + + if(NOT "${INTRINSIC_TYPE}" IN_LIST SUPPORTED_INTRINSICS_LIST) + message(WARNING "Intrinsic type ${INTRINSIC_TYPE} not supported, only ${SUPPORTED_INTRINSICS_LIST} are available") + else() + set(SIMD_LINK_ARG "") + if(MSVC) + # https://learn.microsoft.com/en-us/cpp/build/reference/arch-x64?view=msvc-140 + if("${CMAKE_SYSTEM_PROCESSOR}" IN_LIST SSE_LIST) + if("${CMAKE_SYSTEM_PROCESSOR}" IN_LIST SSE_X86_LIST) + # /arch:SSE2 is the default, so do nothing + set(SIMD_LINK_ARG "ignore") + if("${INTRINSIC_TYPE}" STREQUAL "avx2") + set(SIMD_LINK_ARG "/arch:AVX2") + endif() + else() + # /arch:SSE2 is the default, so do nothing + set(SIMD_LINK_ARG "ignore") + if("${INTRINSIC_TYPE}" STREQUAL "sse4.2") + set(SIMD_LINK_ARG "/arch:SSE4.2") + elseif("${INTRINSIC_TYPE}" STREQUAL "avx2") + set(SIMD_LINK_ARG "/arch:AVX2") + endif() + endif() + endif() + elseif("${CMAKE_C_COMPILER_ID}" IN_LIST GCC_CLANG_NAMES) + set(HAVE_SSE_AVX OFF) + foreach(ARCH ${CMAKE_OSX_ARCHITECTURES}) + if("${ARCH}" IN_LIST SSE_LIST) + set(HAVE_SSE_AVX ON) + endif() + endforeach() + if("${CMAKE_SYSTEM_PROCESSOR}" IN_LIST SSE_LIST OR HAVE_SSE_AVX) + if("${INTRINSIC_TYPE}" STREQUAL "sse2") + set(SIMD_LINK_ARG "-msse2") + elseif("${INTRINSIC_TYPE}" STREQUAL "sse3") + set(SIMD_LINK_ARG "-msse3") + elseif("${INTRINSIC_TYPE}" STREQUAL "ssse3") + set(SIMD_LINK_ARG "-mssse3") + elseif("${INTRINSIC_TYPE}" STREQUAL "sse4.1") + set(SIMD_LINK_ARG "-msse4.1") + elseif("${INTRINSIC_TYPE}" STREQUAL "sse4.2") + set(SIMD_LINK_ARG "-msse4.2") + elseif("${INTRINSIC_TYPE}" STREQUAL "avx2") + set(SIMD_LINK_ARG "-mavx2") + endif() + endif() + else() + message(WARNING "[SIMD] Unsupported compiler ${CMAKE_C_COMPILER_ID}, ignoring") + endif() + + if("${INTRINSIC_TYPE}" STREQUAL "neon") + set(HAVE_NEON OFF) + foreach(ARCH ${CMAKE_OSX_ARCHITECTURES}) + if("${ARCH}" IN_LIST NEON_LIST) + set(HAVE_NEON ON) + endif() + endforeach() + if("${CMAKE_SYSTEM_PROCESSOR}" IN_LIST NEON_LIST OR HAVE_NEON) + if(MSVC) + set(SIMD_LINK_ARG "/arch:VFPv4") + elseif("${CMAKE_C_COMPILER_ID}" IN_LIST GCC_CLANG_NAMES) + set(SIMD_LINK_ARG "-mfpu=neon") + else() + message(WARNING "[SIMD] Unsupported compiler ${CMAKE_C_COMPILER_ID}, ignoring") + endif() + endif() + endif() + + if(SIMD_LINK_ARG STREQUAL "") + message(NOTICE "INTRINSIC_TYPE=${INTRINSIC_TYPE}: not supported on target platform, ignoring") + elseif(SIMD_LINK_ARG STREQUAL "ignore") + message(NOTICE "INTRINSIC_TYPE=${INTRINSIC_TYPE}: does not require linker flags, enabled by default") + else() + message("[SIMD] linking ${INTRINSIC_TYPE} [${SIMD_LINK_ARG}]: ${ARGN}") + foreach(src ${ARGN}) + set_source_files_properties(${src} PROPERTIES COMPILE_FLAGS "${SIMD_LINK_ARG}") + endforeach() + endif() + endif() +endmacro() diff --git a/include/config/config.h.in b/include/config/config.h.in index 5da29b8e8..284a681ec 100644 --- a/include/config/config.h.in +++ b/include/config/config.h.in @@ -21,9 +21,8 @@ #cmakedefine WITH_ADD_PLUGIN_TO_RPATH #cmakedefine WITH_PROFILER #cmakedefine WITH_GPROF -#cmakedefine WITH_SSE2 +#cmakedefine WITH_SIMD #cmakedefine WITH_AVX2 -#cmakedefine WITH_NEON #cmakedefine WITH_CUPS #cmakedefine WITH_JPEG #cmakedefine WITH_WIN8 diff --git a/libfreerdp/codec/CMakeLists.txt b/libfreerdp/codec/CMakeLists.txt index 507b2ec5b..a76d6a270 100644 --- a/libfreerdp/codec/CMakeLists.txt +++ b/libfreerdp/codec/CMakeLists.txt @@ -53,29 +53,9 @@ list(APPEND CODEC_SRCS ${CODEC_NEON_SRCS}) include(CompilerDetect) include(DetectIntrinsicSupport) -if(WITH_SSE2) - - if(HAVE_SSE_OR_AVX) - if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_CLANG) - if(CODEC_SSE2_SRCS) - set_source_files_properties(${CODEC_SSE2_SRCS} PROPERTIES COMPILE_FLAGS "-msse2") - endif() - endif() - - if(MSVC) - if(CODEC_SSE2_SRCS) - set_source_files_properties(${CODEC_SSE2_SRCS} PROPERTIES COMPILE_FLAGS "/arch:SSE2") - endif() - endif() - endif() -endif() -if(WITH_NEON) - # aarch64 requires NEON by default, no flag required - if(HAVE_NEON AND NOT HAVE_NEON64) - if(CODEC_SSE2_SRCS) - set_source_files_properties(${CODEC_NEON_SRCS} PROPERTIES COMPILE_FLAGS "-mfpu=neon") - endif() - endif() +if(WITH_SIMD) + set_simd_source_file_properties("sse2" ${CODEC_SSE2_SRCS}) + set_simd_source_file_properties("neon" ${CODEC_NEON_SRCS}) endif() if(WITH_DSP_FFMPEG) diff --git a/libfreerdp/codec/neon/nsc_neon.c b/libfreerdp/codec/neon/nsc_neon.c index 2b67f694b..cfa7b7f58 100644 --- a/libfreerdp/codec/neon/nsc_neon.c +++ b/libfreerdp/codec/neon/nsc_neon.c @@ -26,19 +26,15 @@ #include "../nsc_types.h" #include "nsc_neon.h" -#if defined(WITH_NEON) -#if defined(_M_ARM64) || defined(_M_ARM) -#define NEON_ENABLED -#endif -#endif +#include "../../core/simd.h" -#if defined(NEON_ENABLED) +#if defined(NEON_INTRINSICS_ENABLED) #define TAG FREERDP_TAG("codec.nsc.neon") #endif void nsc_init_neon(NSC_CONTEXT* context) { -#if defined(NEON_ENABLED) +#if defined(NEON_INTRINSICS_ENABLED) if (!IsProcessorFeaturePresent(PF_ARM_NEON_INSTRUCTIONS_AVAILABLE)) return; diff --git a/libfreerdp/codec/neon/rfx_neon.c b/libfreerdp/codec/neon/rfx_neon.c index 5c26a5126..131d91d94 100644 --- a/libfreerdp/codec/neon/rfx_neon.c +++ b/libfreerdp/codec/neon/rfx_neon.c @@ -24,13 +24,9 @@ #include "../rfx_types.h" #include "rfx_neon.h" -#if defined(WITH_NEON) -#if defined(_M_ARM64) || defined(_M_ARM) -#define NEON_ENABLED -#endif -#endif +#include "../../core/simd.h" -#if defined(NEON_ENABLED) +#if defined(NEON_INTRINSICS_ENABLED) #include #include @@ -525,11 +521,11 @@ static void rfx_dwt_2d_extrapolate_decode_neon(INT16* buffer, INT16* temp) rfx_dwt_2d_decode_extrapolate_block_neon(&buffer[3007], temp, 2); rfx_dwt_2d_decode_extrapolate_block_neon(&buffer[0], temp, 1); } -#endif // NEON_ENABLED +#endif // NEON_INTRINSICS_ENABLED void rfx_init_neon(RFX_CONTEXT* context) { -#if defined(NEON_ENABLED) +#if defined(NEON_INTRINSICS_ENABLED) if (IsProcessorFeaturePresent(PF_ARM_NEON_INSTRUCTIONS_AVAILABLE)) { DEBUG_RFX("Using NEON optimizations"); diff --git a/libfreerdp/codec/sse/nsc_sse2.c b/libfreerdp/codec/sse/nsc_sse2.c index a20428a58..0c5495d63 100644 --- a/libfreerdp/codec/sse/nsc_sse2.c +++ b/libfreerdp/codec/sse/nsc_sse2.c @@ -23,13 +23,9 @@ #include "../nsc_types.h" #include "nsc_sse2.h" -#if defined(WITH_SSE2) -#if defined(_M_IX86) || defined(_M_AMD64) || defined(_M_IA64) || defined(_M_IX86_AMD64) -#define SSE2_ENABLED -#endif -#endif +#include "../../core/simd.h" -#if defined(SSE2_ENABLED) +#if defined(SSE_AVX_INTRINSICS_ENABLED) #include #include #include @@ -388,7 +384,7 @@ static BOOL nsc_encode_sse2(NSC_CONTEXT* context, const BYTE* data, UINT32 scanl void nsc_init_sse2(NSC_CONTEXT* context) { -#if defined(SSE2_ENABLED) +#if defined(SSE_AVX_INTRINSICS_ENABLED) if (!IsProcessorFeaturePresent(PF_XMMI64_INSTRUCTIONS_AVAILABLE)) return; diff --git a/libfreerdp/codec/sse/rfx_sse2.c b/libfreerdp/codec/sse/rfx_sse2.c index f3026fda2..189cea293 100644 --- a/libfreerdp/codec/sse/rfx_sse2.c +++ b/libfreerdp/codec/sse/rfx_sse2.c @@ -24,13 +24,9 @@ #include "../rfx_types.h" #include "rfx_sse2.h" -#if defined(WITH_SSE2) -#if defined(_M_IX86) || defined(_M_AMD64) || defined(_M_IA64) || defined(_M_IX86_AMD64) -#define SSE2_ENABLED -#endif -#endif +#include "../../core/simd.h" -#if defined(SSE2_ENABLED) +#if defined(SSE_AVX_INTRINSICS_ENABLED) #include #include #include @@ -488,7 +484,7 @@ static void rfx_dwt_2d_encode_sse2(INT16* WINPR_RESTRICT buffer, INT16* WINPR_RE void rfx_init_sse2(RFX_CONTEXT* context) { -#if defined(SSE2_ENABLED) +#if defined(SSE_AVX_INTRINSICS_ENABLED) if (!IsProcessorFeaturePresent(PF_XMMI64_INSTRUCTIONS_AVAILABLE)) return; diff --git a/libfreerdp/core/CMakeLists.txt b/libfreerdp/core/CMakeLists.txt index b60351ef4..9d61dd631 100644 --- a/libfreerdp/core/CMakeLists.txt +++ b/libfreerdp/core/CMakeLists.txt @@ -56,6 +56,7 @@ set(${MODULE_PREFIX}_GATEWAY_SRCS ) set(${MODULE_PREFIX}_SRCS + simd.h state.h state.c utils.c diff --git a/libfreerdp/core/simd.h b/libfreerdp/core/simd.h new file mode 100644 index 000000000..b11e6d2b4 --- /dev/null +++ b/libfreerdp/core/simd.h @@ -0,0 +1,39 @@ +/** + * FreeRDP: A Remote Desktop Protocol Implementation + * SIMD support detection header + * + * Copyright 2024 Armin Novak + * Copyright 2024 Thincast Technologies GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma once + +#include + +/* https://sourceforge.net/p/predef/wiki/Architectures/ + * + * contains a list of defined symbols for each compiler + */ +#if defined(WITH_SIMD) +#if defined(_M_IX86) || defined(_M_AMD64) || defined(_M_IA64) || defined(_M_IX86_AMD64) || \ + defined(__amd64__) || defined(__amd64) || defined(__x86_64__) || defined(__x86_64) || \ + defined(__i686__) || defined(__ia64__) +#define SSE_AVX_INTRINSICS_ENABLED +#endif + +#if defined(_M_ARM64) || defined(_M_ARM) || defined(__arm) || defined(__aarch64__) +#define NEON_INTRINSICS_ENABLED +#endif +#endif diff --git a/libfreerdp/primitives/CMakeLists.txt b/libfreerdp/primitives/CMakeLists.txt index 022c3588e..e59edac5d 100644 --- a/libfreerdp/primitives/CMakeLists.txt +++ b/libfreerdp/primitives/CMakeLists.txt @@ -79,43 +79,14 @@ add_library(freerdp-primitives OBJECT ${PRIMITIVES_SRCS}) include(CompilerDetect) include(DetectIntrinsicSupport) -if(WITH_SSE2) - if(HAVE_SSE_OR_AVX) - if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_CLANG) - if(PRIMITIVES_SSE2_SRCS) - set_source_files_properties(${PRIMITIVES_SSE2_SRCS} PROPERTIES COMPILE_FLAGS "-msse2") - endif() - if(PRIMITIVES_SSE3_SRCS) - set_source_files_properties(${PRIMITIVES_SSE3_SRCS} PROPERTIES COMPILE_FLAGS "-msse3") - endif() - if(PRIMITIVES_SSSE3_SRCS) - set_source_files_properties(${PRIMITIVES_SSSE3_SRCS} PROPERTIES COMPILE_FLAGS "-mssse3") - endif() - if(PRIMITIVES_SSE4_1_SRCS) - set_source_files_properties(${PRIMITIVES_SSE4_1_SRCS} PROPERTIES COMPILE_FLAGS "-msse4.1") - endif() - if(PRIMITIVES_SSE4_2_SRCS) - set_source_files_properties(${PRIMITIVES_SSE4_2_SRCS} PROPERTIES COMPILE_FLAGS "-msse4.2") - endif() - if(PRIMITIVES_AVX2_SRCS AND WITH_AVX2) - set_source_files_properties(${PRIMITIVES_AVX2_SRCS} PROPERTIES COMPILE_FLAGS "-mavx2") - endif() - endif() - - if(MSVC) - set_source_files_properties(${PRIMITIVES_OPT_SRCS} PROPERTIES COMPILE_FLAGS "/arch:SSE2") - endif() - endif() -elseif(WITH_NEON) - # aarch64 requires NEON by default, no flag required - if(HAVE_NEON AND NOT HAVE_NEON64) - if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_CLANG) - if(NOT MSVC_ARM64 AND NOT ARCH_ARM64) - set_source_files_properties(${PRIMITIVES_OPT_SRCS} PROPERTIES COMPILE_FLAGS "-mfpu=neon") - endif() - endif() - # TODO: Add MSVC equivalent - endif() +if(WITH_SIMD) + set_simd_source_file_properties("sse2" ${PRIMITIVES_SSE2_SRCS}) + set_simd_source_file_properties("sse3" ${PRIMITIVES_SSE3_SRCS}) + set_simd_source_file_properties("ssse3" ${PRIMITIVES_SSSE3_SRCS}) + set_simd_source_file_properties("sse4.1" ${PRIMITIVES_SSE4_1_SRCS}) + set_simd_source_file_properties("sse4.2" ${PRIMITIVES_SSE4_2_SRCS}) + set_simd_source_file_properties("avx2" ${PRIMITIVES_AVX2_SRCS}) + set_simd_source_file_properties("neon" ${PRIMITIVES_OPT_SRCS}) endif() freerdp_object_library_add(freerdp-primitives) diff --git a/libfreerdp/primitives/neon/prim_YCoCg_neon.c b/libfreerdp/primitives/neon/prim_YCoCg_neon.c index d33b4e3b6..e8b47d9cb 100644 --- a/libfreerdp/primitives/neon/prim_YCoCg_neon.c +++ b/libfreerdp/primitives/neon/prim_YCoCg_neon.c @@ -27,7 +27,7 @@ #include "prim_templates.h" #include "prim_YCoCg.h" -#if defined(NEON_ENABLED) +#if defined(NEON_INTRINSICS_ENABLED) #include static primitives_t* generic = NULL; @@ -157,7 +157,7 @@ static pstatus_t neon_YCoCgToRGB_8u_AC4R(const BYTE* WINPR_RESTRICT pSrc, INT32 /* ------------------------------------------------------------------------- */ void primitives_init_YCoCg_neon(primitives_t* WINPR_RESTRICT prims) { -#if defined(NEON_ENABLED) +#if defined(NEON_INTRINSICS_ENABLED) generic = primitives_get_generic(); primitives_init_YCoCg(prims); @@ -167,7 +167,7 @@ void primitives_init_YCoCg_neon(primitives_t* WINPR_RESTRICT prims) prims->YCoCgToRGB_8u_AC4R = neon_YCoCgToRGB_8u_AC4R; } #else - WLog_VRB(PRIM_TAG, "undefined WITH_NEON"); + WLog_VRB(PRIM_TAG, "undefined WITH_SIMD or neon intrinsics not available"); WINPR_UNUSED(prims); #endif } diff --git a/libfreerdp/primitives/neon/prim_YUV_neon.c b/libfreerdp/primitives/neon/prim_YUV_neon.c index 08fc6969c..055f529fb 100644 --- a/libfreerdp/primitives/neon/prim_YUV_neon.c +++ b/libfreerdp/primitives/neon/prim_YUV_neon.c @@ -30,7 +30,7 @@ #include "prim_internal.h" #include "prim_YUV.h" -#if defined(NEON_ENABLED) +#if defined(NEON_INTRINSICS_ENABLED) #include static primitives_t* generic = NULL; @@ -741,7 +741,7 @@ static pstatus_t neon_YUV420CombineToYUV444(avc444_frame_type type, void primitives_init_YUV_neon(primitives_t* WINPR_RESTRICT prims) { -#if defined(NEON_ENABLED) +#if defined(NEON_INTRINSICS_ENABLED) generic = primitives_get_generic(); primitives_init_YUV(prims); @@ -753,7 +753,7 @@ void primitives_init_YUV_neon(primitives_t* WINPR_RESTRICT prims) prims->YUV420CombineToYUV444 = neon_YUV420CombineToYUV444; } #else - WLog_VRB(PRIM_TAG, "undefined WITH_NEON"); + WLog_VRB(PRIM_TAG, "undefined WITH_SIMD or neon intrinsics not available"); WINPR_UNUSED(prims); #endif } diff --git a/libfreerdp/primitives/neon/prim_colors_neon.c b/libfreerdp/primitives/neon/prim_colors_neon.c index 25874dc54..f63b9fd24 100644 --- a/libfreerdp/primitives/neon/prim_colors_neon.c +++ b/libfreerdp/primitives/neon/prim_colors_neon.c @@ -28,7 +28,7 @@ #include "prim_colors.h" /*---------------------------------------------------------------------------*/ -#if defined(NEON_ENABLED) +#if defined(NEON_INTRINSICS_ENABLED) #include static primitives_t* generic = NULL; @@ -341,12 +341,12 @@ neon_RGBToRGB_16s8u_P3AC4R(const INT16* WINPR_RESTRICT pSrc[3], /* 16-bit R,G, a return generic->RGBToRGB_16s8u_P3AC4R(pSrc, srcStep, pDst, dstStep, DstFormat, roi); } } -#endif /* NEON_ENABLED */ +#endif /* NEON_INTRINSICS_ENABLED */ /* ------------------------------------------------------------------------- */ void primitives_init_colors_neon(primitives_t* prims) { -#if defined(NEON_ENABLED) +#if defined(NEON_INTRINSICS_ENABLED) generic = primitives_get_generic(); primitives_init_colors(prims); @@ -358,7 +358,7 @@ void primitives_init_colors_neon(primitives_t* prims) prims->yCbCrToRGB_16s16s_P3P3 = neon_yCbCrToRGB_16s16s_P3P3; } #else - WLog_VRB(PRIM_TAG, "undefined WITH_NEON"); + WLog_VRB(PRIM_TAG, "undefined WITH_SIMD or neon intrinsics not available"); WINPR_UNUSED(prims); #endif } diff --git a/libfreerdp/primitives/prim_internal.h b/libfreerdp/primitives/prim_internal.h index 19faa7edc..fbc0d9dae 100644 --- a/libfreerdp/primitives/prim_internal.h +++ b/libfreerdp/primitives/prim_internal.h @@ -24,6 +24,9 @@ #include #include + +#include "../core/simd.h" + #define PRIM_TAG FREERDP_TAG("primitives") #ifdef __GNUC__ @@ -34,27 +37,15 @@ #endif #endif -#if defined(WITH_SSE2) -#if defined(_M_IX86) || defined(_M_AMD64) || defined(_M_IA64) || defined(_M_IX86_AMD64) -#define SSE2_ENABLED -#endif -#endif - -#if defined(WITH_NEON) -#if defined(_M_ARM64) || defined(_M_ARM) -#define NEON_ENABLED -#endif -#endif - -#if defined(SSE2_ENABLED) || defined(NEON_ENABLED) || defined(WITH_OPENCL) +#if defined(SSE_AVX_INTRINSICS_ENABLED) || defined(NEON_INTRINSICS_ENABLED) || defined(WITH_OPENCL) #define HAVE_OPTIMIZED_PRIMITIVES 1 #endif -#if defined(SSE2_ENABLED) || defined(NEON_ENABLED) +#if defined(SSE_AVX_INTRINSICS_ENABLED) || defined(NEON_INTRINSICS_ENABLED) #define HAVE_CPU_OPTIMIZED_PRIMITIVES 1 #endif -#if defined(SSE2_ENABLED) +#if defined(SSE_AVX_INTRINSICS_ENABLED) /* Use lddqu for unaligned; load for 16-byte aligned. */ #define LOAD_SI128(_ptr_) \ (((const ULONG_PTR)(_ptr_)&0x0f) ? _mm_lddqu_si128((const __m128i*)(_ptr_)) \ diff --git a/libfreerdp/primitives/sse/prim_YCoCg_ssse3.c b/libfreerdp/primitives/sse/prim_YCoCg_ssse3.c index f7c3d4acf..98d59b7bc 100644 --- a/libfreerdp/primitives/sse/prim_YCoCg_ssse3.c +++ b/libfreerdp/primitives/sse/prim_YCoCg_ssse3.c @@ -28,7 +28,7 @@ #include "prim_internal.h" #include "prim_templates.h" -#if defined(SSE2_ENABLED) +#if defined(SSE_AVX_INTRINSICS_ENABLED) #include #include @@ -439,7 +439,7 @@ static pstatus_t ssse3_YCoCgRToRGB_8u_AC4R(const BYTE* WINPR_RESTRICT pSrc, INT3 /* ------------------------------------------------------------------------- */ void primitives_init_YCoCg_ssse3(primitives_t* WINPR_RESTRICT prims) { -#if defined(SSE2_ENABLED) +#if defined(SSE_AVX_INTRINSICS_ENABLED) generic = primitives_get_generic(); primitives_init_YCoCg(prims); @@ -450,7 +450,7 @@ void primitives_init_YCoCg_ssse3(primitives_t* WINPR_RESTRICT prims) prims->YCoCgToRGB_8u_AC4R = ssse3_YCoCgRToRGB_8u_AC4R; } #else - WLog_VRB(PRIM_TAG, "undefined WITH_SSE2"); + WLog_VRB(PRIM_TAG, "undefined WITH_SIMD or SSE2 intrinsics not available"); WINPR_UNUSED(prims); #endif } diff --git a/libfreerdp/primitives/sse/prim_YUV_ssse3.c b/libfreerdp/primitives/sse/prim_YUV_ssse3.c index 4abe6fdac..96bcc4b31 100644 --- a/libfreerdp/primitives/sse/prim_YUV_ssse3.c +++ b/libfreerdp/primitives/sse/prim_YUV_ssse3.c @@ -31,7 +31,7 @@ #include "prim_internal.h" #include "prim_YUV.h" -#if defined(SSE2_ENABLED) +#if defined(SSE_AVX_INTRINSICS_ENABLED) #include #include @@ -1496,7 +1496,7 @@ static pstatus_t ssse3_YUV420CombineToYUV444(avc444_frame_type type, void primitives_init_YUV_ssse3(primitives_t* WINPR_RESTRICT prims) { -#if defined(SSE2_ENABLED) +#if defined(SSE_AVX_INTRINSICS_ENABLED) generic = primitives_get_generic(); primitives_init_YUV(prims); @@ -1512,7 +1512,7 @@ void primitives_init_YUV_ssse3(primitives_t* WINPR_RESTRICT prims) prims->YUV420CombineToYUV444 = ssse3_YUV420CombineToYUV444; } #else - WLog_VRB(PRIM_TAG, "undefined WITH_SSE2"); + WLog_VRB(PRIM_TAG, "undefined WITH_SIMD or SSSE3 intrinsics not available"); WINPR_UNUSED(prims); #endif } diff --git a/libfreerdp/primitives/sse/prim_add_sse3.c b/libfreerdp/primitives/sse/prim_add_sse3.c index 59fce7427..24e17b302 100644 --- a/libfreerdp/primitives/sse/prim_add_sse3.c +++ b/libfreerdp/primitives/sse/prim_add_sse3.c @@ -25,7 +25,7 @@ #include "prim_internal.h" #include "prim_templates.h" -#if defined(SSE2_ENABLED) +#if defined(SSE_AVX_INTRINSICS_ENABLED) #include #include @@ -173,7 +173,7 @@ static pstatus_t sse3_add_16s_inplace(INT16* WINPR_RESTRICT pSrcDst1, /* ------------------------------------------------------------------------- */ void primitives_init_add_sse3(primitives_t* WINPR_RESTRICT prims) { -#if defined(SSE2_ENABLED) +#if defined(SSE_AVX_INTRINSICS_ENABLED) generic = primitives_get_generic(); primitives_init_add(prims); @@ -186,7 +186,7 @@ void primitives_init_add_sse3(primitives_t* WINPR_RESTRICT prims) } #else - WLog_VRB(PRIM_TAG, "undefined WITH_SSE2"); + WLog_VRB(PRIM_TAG, "undefined WITH_SIMD or SSE3 intrinsics not available"); WINPR_UNUSED(prims); #endif } diff --git a/libfreerdp/primitives/sse/prim_alphaComp_sse3.c b/libfreerdp/primitives/sse/prim_alphaComp_sse3.c index 61537bcb9..0a17829f0 100644 --- a/libfreerdp/primitives/sse/prim_alphaComp_sse3.c +++ b/libfreerdp/primitives/sse/prim_alphaComp_sse3.c @@ -31,7 +31,7 @@ #include "prim_internal.h" /* ------------------------------------------------------------------------- */ -#if defined(SSE2_ENABLED) +#if defined(SSE_AVX_INTRINSICS_ENABLED) #include #include @@ -209,7 +209,7 @@ static pstatus_t sse2_alphaComp_argb(const BYTE* WINPR_RESTRICT pSrc1, UINT32 sr /* ------------------------------------------------------------------------- */ void primitives_init_alphaComp_sse3(primitives_t* WINPR_RESTRICT prims) { -#if defined(SSE2_ENABLED) +#if defined(SSE_AVX_INTRINSICS_ENABLED) generic = primitives_get_generic(); primitives_init_alphaComp(prims); @@ -221,7 +221,7 @@ void primitives_init_alphaComp_sse3(primitives_t* WINPR_RESTRICT prims) } #else - WLog_VRB(PRIM_TAG, "undefined WITH_SSE2"); + WLog_VRB(PRIM_TAG, "undefined WITH_SIMD or SSE3 intrinsics not available"); WINPR_UNUSED(prims); #endif } diff --git a/libfreerdp/primitives/sse/prim_andor_sse3.c b/libfreerdp/primitives/sse/prim_andor_sse3.c index 122fdc2d6..04b485167 100644 --- a/libfreerdp/primitives/sse/prim_andor_sse3.c +++ b/libfreerdp/primitives/sse/prim_andor_sse3.c @@ -24,7 +24,7 @@ #include "prim_internal.h" #include "prim_templates.h" -#if defined(SSE2_ENABLED) +#if defined(SSE_AVX_INTRINSICS_ENABLED) #include #include @@ -40,7 +40,7 @@ SSE3_SCD_PRE_ROUTINE(sse3_orC_32u, UINT32, generic->orC_32u, _mm_or_si128, *dptr /* ------------------------------------------------------------------------- */ void primitives_init_andor_sse3(primitives_t* WINPR_RESTRICT prims) { -#if defined(SSE2_ENABLED) +#if defined(SSE_AVX_INTRINSICS_ENABLED) generic = primitives_get_generic(); primitives_init_andor(prims); @@ -53,7 +53,7 @@ void primitives_init_andor_sse3(primitives_t* WINPR_RESTRICT prims) } #else - WLog_VRB(PRIM_TAG, "undefined WITH_SSE2"); + WLog_VRB(PRIM_TAG, "undefined WITH_SIMD or SSE3 intrinsics not available"); WINPR_UNUSED(prims); #endif } diff --git a/libfreerdp/primitives/sse/prim_colors_sse2.c b/libfreerdp/primitives/sse/prim_colors_sse2.c index d826de2f0..3d9192745 100644 --- a/libfreerdp/primitives/sse/prim_colors_sse2.c +++ b/libfreerdp/primitives/sse/prim_colors_sse2.c @@ -28,7 +28,7 @@ #include "prim_internal.h" #include "prim_templates.h" -#if defined(SSE2_ENABLED) +#if defined(SSE_AVX_INTRINSICS_ENABLED) #include static primitives_t* generic = NULL; @@ -1245,7 +1245,7 @@ sse2_RGBToRGB_16s8u_P3AC4R(const INT16* WINPR_RESTRICT pSrc[3], /* 16-bit R,G, a void primitives_init_colors_sse2(primitives_t* prims) { -#if defined(SSE2_ENABLED) +#if defined(SSE_AVX_INTRINSICS_ENABLED) generic = primitives_get_generic(); primitives_init_colors(prims); @@ -1259,7 +1259,7 @@ void primitives_init_colors_sse2(primitives_t* prims) } #else - WLog_VRB(PRIM_TAG, "undefined WITH_SSE2"); + WLog_VRB(PRIM_TAG, "undefined WITH_SIMD or SSE2 intrinsics not available"); WINPR_UNUSED(prims); #endif } diff --git a/libfreerdp/primitives/sse/prim_copy_avx2.c b/libfreerdp/primitives/sse/prim_copy_avx2.c index 3a9dc3b6e..17a00f91c 100644 --- a/libfreerdp/primitives/sse/prim_copy_avx2.c +++ b/libfreerdp/primitives/sse/prim_copy_avx2.c @@ -28,7 +28,7 @@ #include -#if defined(SSE2_ENABLED) +#if defined(SSE_AVX_INTRINSICS_ENABLED) #define TAG FREERDP_TAG("primitives.copy") #include @@ -274,14 +274,14 @@ static pstatus_t avx2_image_copy_no_overlap(BYTE* WINPR_RESTRICT pDstData, DWORD /* ------------------------------------------------------------------------- */ void primitives_init_copy_avx2(primitives_t* prims) { -#if defined(SSE2_ENABLED) +#if defined(SSE_AVX_INTRINSICS_ENABLED) if (IsProcessorFeaturePresent(PF_AVX2_INSTRUCTIONS_AVAILABLE)) { WLog_VRB(PRIM_TAG, "AVX2 optimizations"); prims->copy_no_overlap = avx2_image_copy_no_overlap; } #else - WLog_VRB(PRIM_TAG, "undefined WITH_SSE2"); + WLog_VRB(PRIM_TAG, "undefined WITH_SIMD or WITH_AVX2 or AVX2 intrinsics not available"); WINPR_UNUSED(prims); #endif } diff --git a/libfreerdp/primitives/sse/prim_copy_sse4_1.c b/libfreerdp/primitives/sse/prim_copy_sse4_1.c index 7b50777b6..a99cf5069 100644 --- a/libfreerdp/primitives/sse/prim_copy_sse4_1.c +++ b/libfreerdp/primitives/sse/prim_copy_sse4_1.c @@ -28,7 +28,7 @@ #include -#if defined(SSE2_ENABLED) +#if defined(SSE_AVX_INTRINSICS_ENABLED) #define TAG FREERDP_TAG("primitives.copy") #include @@ -258,14 +258,14 @@ static pstatus_t sse_image_copy_no_overlap(BYTE* WINPR_RESTRICT pDstData, DWORD /* ------------------------------------------------------------------------- */ void primitives_init_copy_sse41(primitives_t* prims) { -#if defined(SSE2_ENABLED) +#if defined(SSE_AVX_INTRINSICS_ENABLED) if (IsProcessorFeaturePresent(PF_SSE4_1_INSTRUCTIONS_AVAILABLE)) { WLog_VRB(PRIM_TAG, "SSE4.1 optimizations"); prims->copy_no_overlap = sse_image_copy_no_overlap; } #else - WLog_VRB(PRIM_TAG, "undefined WITH_SSE2"); + WLog_VRB(PRIM_TAG, "undefined WITH_SIMD or SSE4.1 intrinsics not available"); WINPR_UNUSED(prims); #endif } diff --git a/libfreerdp/primitives/sse/prim_set_sse2.c b/libfreerdp/primitives/sse/prim_set_sse2.c index c15298320..6265fab21 100644 --- a/libfreerdp/primitives/sse/prim_set_sse2.c +++ b/libfreerdp/primitives/sse/prim_set_sse2.c @@ -25,7 +25,7 @@ #include "prim_set.h" /* ========================================================================= */ -#if defined(SSE2_ENABLED) +#if defined(SSE_AVX_INTRINSICS_ENABLED) #include static primitives_t* generic = NULL; @@ -215,7 +215,7 @@ static pstatus_t sse2_set_32s(INT32 val, INT32* WINPR_RESTRICT pDst, UINT32 len) /* ------------------------------------------------------------------------- */ void primitives_init_set_sse2(primitives_t* WINPR_RESTRICT prims) { -#if defined(SSE2_ENABLED) +#if defined(SSE_AVX_INTRINSICS_ENABLED) generic = primitives_get_generic(); primitives_init_set(prims); /* Pick tuned versions if possible. */ @@ -229,7 +229,7 @@ void primitives_init_set_sse2(primitives_t* WINPR_RESTRICT prims) } #else - WLog_VRB(PRIM_TAG, "undefined WITH_SSE2"); + WLog_VRB(PRIM_TAG, "undefined WITH_SIMD or SSE2 intrinsics not available"); WINPR_UNUSED(prims); #endif } diff --git a/libfreerdp/primitives/sse/prim_shift_sse3.c b/libfreerdp/primitives/sse/prim_shift_sse3.c index 6b12a29e3..f5b50e51c 100644 --- a/libfreerdp/primitives/sse/prim_shift_sse3.c +++ b/libfreerdp/primitives/sse/prim_shift_sse3.c @@ -24,7 +24,7 @@ #include "prim_internal.h" #include "prim_templates.h" -#if defined(SSE2_ENABLED) +#if defined(SSE_AVX_INTRINSICS_ENABLED) #include #include @@ -142,7 +142,7 @@ static pstatus_t sse2_lShiftC_16s_inplace(INT16* WINPR_RESTRICT pSrcDst, UINT32 /* ------------------------------------------------------------------------- */ void primitives_init_shift_sse3(primitives_t* WINPR_RESTRICT prims) { -#if defined(SSE2_ENABLED) +#if defined(SSE_AVX_INTRINSICS_ENABLED) generic = primitives_get_generic(); primitives_init_shift(prims); @@ -158,7 +158,7 @@ void primitives_init_shift_sse3(primitives_t* WINPR_RESTRICT prims) } #else - WLog_VRB(PRIM_TAG, "undefined WITH_SSE2"); + WLog_VRB(PRIM_TAG, "undefined WITH_SIMD or SSE3 intrinsics not available"); WINPR_UNUSED(prims); #endif } diff --git a/libfreerdp/primitives/sse/prim_sign_ssse3.c b/libfreerdp/primitives/sse/prim_sign_ssse3.c index ed0d856f7..82b9e97c6 100644 --- a/libfreerdp/primitives/sse/prim_sign_ssse3.c +++ b/libfreerdp/primitives/sse/prim_sign_ssse3.c @@ -23,7 +23,7 @@ #include "prim_internal.h" -#if defined(SSE2_ENABLED) +#if defined(SSE_AVX_INTRINSICS_ENABLED) #include #include @@ -165,12 +165,12 @@ static pstatus_t ssse3_sign_16s(const INT16* WINPR_RESTRICT pSrc, INT16* WINPR_R return PRIMITIVES_SUCCESS; } -#endif /* SSE2_ENABLED */ +#endif /* SSE_AVX_INTRINSICS_ENABLED */ /* ------------------------------------------------------------------------- */ void primitives_init_sign_ssse3(primitives_t* WINPR_RESTRICT prims) { -#if defined(SSE2_ENABLED) +#if defined(SSE_AVX_INTRINSICS_ENABLED) generic = primitives_get_generic(); primitives_init_sign(prims); /* Pick tuned versions if possible. */ @@ -184,7 +184,7 @@ void primitives_init_sign_ssse3(primitives_t* WINPR_RESTRICT prims) } #else - WLog_VRB(PRIM_TAG, "undefined WITH_SSE2"); + WLog_VRB(PRIM_TAG, "undefined WITH_SIMD or SSSE3/SSE3 intrinsics not available"); WINPR_UNUSED(prims); #endif } diff --git a/scripts/bundle-mac-os.sh b/scripts/bundle-mac-os.sh index b7e9ac10f..a4f5722f5 100755 --- a/scripts/bundle-mac-os.sh +++ b/scripts/bundle-mac-os.sh @@ -269,8 +269,7 @@ cd $BUILD cmake -GNinja -Bfreerdp -S"$SCRIPT_PATH/.." \ $CMAKE_ARGS \ -DWITH_PLATFORM_SERVER=OFF \ - -DWITH_NEON=ON \ - -DWITH_SSE=ON \ + -DWITH_SIMD=ON \ -DWITH_FFMPEG=OFF \ -DWITH_SWSCALE=ON \ -DWITH_OPUS=ON \ From 172fe47c859f884b22b7f109fb740b153ff2ea0a Mon Sep 17 00:00:00 2001 From: akallabeth Date: Thu, 28 Nov 2024 19:50:05 +0100 Subject: [PATCH 2/2] [ci,cmake-format] add ci configuration also format the ci configuration files --- scripts/cmake-format.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/cmake-format.sh b/scripts/cmake-format.sh index 1a0d62cba..687a77047 100755 --- a/scripts/cmake-format.sh +++ b/scripts/cmake-format.sh @@ -28,7 +28,8 @@ then fi CMAKE_FILES=$(find ${SRC_PATH} -name "*.cmake" -o -name "CMakeLists.txt") -for FILE in $CMAKE_FILES; +CMAKE_CI_FILES=$(find ${SRC_PATH}/ci -name "*.txt") +for FILE in $CMAKE_FILES $CMAKE_CI_FILES; do echo "processing file $FILE..." cmake-format -c "$SCRIPT_PATH/cmake-format.yml" $FORMAT_ARG $FILE